Controls against security flaws in programs
지금까지 의도치 않은 flaws, 의도했지만 악의는 없는 것들, malicious code 등을 살펴봤다. 이것을 control하는 것이 목적.
software lifecycle
- 소프트웨어는 lifecycle동안 몇개의 단계를 거친다.
- specification, design, implementation, change management, code review, testing, documentation, maintanance….
- 이 중 어느 단계에서 security control에 신경써야 할까?
security control
design
어떻게 하면 security flaws가 적은 프로그램을 design할 수 있을까?
- modularity
- 프로그램을 각각 subtask를 책임지는 작은 모듈로 나눔 - 체크하기 편하게
- 모듈은 더 적은 coupling. coupling이 높으면 unexpected behaviour 케이스가 늘어남
- encapsulation
- 필요한 정보만을 작은 모듈이 공유 - coupling 줄임
- information hiding
- mutual suspicion
- confinement
implementation
- C 쓰지마!!! - (ㅋㅋ)
- static code analysis
- security flaw찾는데 도움을 주는 소프트웨어가 있음.
- 이들은 버퍼오버플로우 등등 탐지
- 하지만 완벽한 건 아니다..
- formal methods
- 의심스러운 코드 패턴 보는 거 대신
- genetic diversity
- 유전적 다양성을 띄게 하자… 웜과 바이러스는 빨리 propagate됨. 하나로 통일되어있으면 한 바이러스에 전멸될 수 있음.
change management
- 큰 소프트웨어 프로젝트는 백명의 사람들이 함께 코드에 매달리기도 함
- 오늘은 안전해도 내일은 아닐 수도 있다..
- 소스코드와 configuration information을 tracking하자.
code review
- 어쩌면 가장 효율적인 방법일지도..
- 다른사람한테 보여주고 찾아달라고 해..
- 오픈소스 모델
testing
- attacker처럼 행동해보기
- 프로그램이 지정되지 않은 작업을 수행하도록 함 ( design과 implementation을 고려해서!)
- black-box testing
- Fuzz testing
- white-box testing
- clear-box testing
- regression testing
documentations
- 안됐을 때 메모해두기
- 체크리스트 만들기
Maintenance
- 그간 거쳐온 것들… 점검..
* 출처 한양대학교 원영준 교수님 2022-1 information security 강의 자료 정리
Uploaded by Notion2Tistory v1.1.0