728x90
소프트웨어 취약성 개요
버그(Bug)
▶ 알 수 없는 에러 혹은 소프트웨어 설계상의 실수로 발생
▶ 예상하지 못한 동작 또는 결과 발생
▶ 버그로부터 크래쉬(Crash)가 발생
버그종류
▶ 논리적인(Logical) 버그
▶ 문법적인(Syntax) 버그
▶ 리소스(Resource) 버그
크래쉬(Crash)
▶ 소프트웨어 크래쉬
- 정상적이지 않은 명령어 실행 (Invaild instruction execution)
- 특정권한을 필요로하는 명령어 실행 (Privileged instruction execution)
- 정상적이지 않은 메모리 역 참조 (Dereference of invaild memory)
▶ 운영체제 / 커널 크래쉬
- BSOD (Blue Screen Of Death)
- 복구 불가능한 크래쉬 (Non-recoverable)
취약성(Vulnerability)
▶ 정의
- 컴퓨터의 하드웨어 또는 소프트웨어의 결함이나 체계 설계 상의 허점으로 인해 사용자(특히, 악의를 가진 공격자)에게 허용된 권한 이상의 동작이나 허용된 범위 이상의 정보 열람을 가능하게 하는 약점
- 사용자 및 관리자의 부주의나 사회공학 기법에 의한 약점을 포함한 정보 체계의 모든 정보 보안상의 위험성
- 악의를 가진 공격자는 이러한 약점을 이용하여 공격 대상 컴퓨터 또는 정보화 기기에서 공격자가 의도한 동작을 수행하거나, 특히 정보를 탈취한다. 보안 취약성 또는 취약성으로 부르기도 한다.
▶ 취약성의 예
- 버퍼 오버플로우 (Stack , Heap , Integer)
- 포맷 스트링 (Format String)
- 널 포인트 역 참조 (Null Pointer Dereference)
어플리케이션 취약점과 취약성
소프트웨어 취약성 정의
▶ 정의
관점에 따른 차이
- 관리 관점과 기술 관점에서 다소 차이가 있음
- 관리관점
- 대개 컨설팅에서 사용하는 형태로 정책적인 성향이 짙음
- 계정관리 , 패스워드 정책 , 접근제어 , 로그 감사 설정 , 암호화 전송 , 인증 서버 미사용 , ......
- 기술관점
- 소프트웨어 취약성에 대해 분석하는 관점
- 버퍼 오버플로우 , 데이터 파싱 , 포맷 스트링 , 서비스 거부 공격 , 권한 상승 취약점 , ......
약점 Vs 취약점 Vs 취약성
약점
- 개발단계에서 발생하는 보안 관련 오류- 공격에 활용될 여지가 있는 오류
- 이론상 존재하는 위험요소
취약성 (vulnerability)
- 위협에 의한 손실이 발생하게 되는 자산의 약점
- 기능 명세, 설계 또는 구현 단계 오류나 시동, 설치 또는 운용상의 문제
- 정보 시스템이 지니게 되는 보안 취약점
취약점
- 운영 단계에서 발생하는 보안 관련 오류
- 실제로 공격 구현이 가능한 오류
- 구현이 실제적으로 가능한 것
취약점 VS 취약성
▶ 엄밀히 구분하면 단어 구성의 의미적 차이가 있지만, 대부분 취약점으로 사용
▶ 구분
- 수직적 / 수평적 구분
- 수직적 구분
- 특정 기업의 자산이나 환경에서 발생하는 보안 위협 -> 취약점 - 수평적 구분
- 여러 기업에서 사용하는 공통적인 요소에서 발생하는 보안 위협 -> 취약성
- 수직적 구분
- As-Is / To-Be
- As-Is
- 현재 공격에 악용될 수 있는 상태 -> 취약점 - To-Be
- 언젠가 공격에 악용될 수 있는 상태 -> 취약성
- As-Is
▶ 자사의 홈페이지에 SQLi 취약점이 발견되었다.
SQL injection 공격을 사용 가능한 '부분'을 발견했다는 것으로 취약성이 아닌 취약점 입니다.
▶ 얼마전 CVE-2013-2251 취약성을 이용한 공격을 받았다.
이미 취약한 부분으로 판명되었고, 이 '부분'을 이용하여 공격(exploit) 받았습니다. CVE-2013-2251이라고 분류된 취약점의 성향(성격)을 띈 공격이기에 취약점이 아닌 취약성으로 말하는 것이 맞다
소프트웨어 취약점 구분
취약점 구분
▶ 패치되지 않은 취약점 (제로 데이 취약성)
- 세간에 알려지지 않은 취약성
- 해당 제품의 제조사에서 대응하지 못한 취약성
- 매우 위험한 상태로 APT 공격에서 가장 많이 사용
- 취약점 자체만으로도 금전적 가치가 상당히 높음
▶ 패치가 공개된 취약점 (윈 데이 취약성)
- 보안 연구가에 의해 보고되거나, 공격자가 사용한 제로 데이 취약성을 발견하여 패치가 만들어 졌으나 아직 그것이 적용되지 않은 상태
- PoC (Proof of Concept) 코드를 공개하기 전 제조사와 협업하고 신속한 대응
소프트웨어 내 예상하지 못한 / 의도하지 않은 동작에 의한 발생
- 흐름 제어 (Control hijack)
- 서비스 거부 (DoS : Denial -of- Service)
- 정보 유출 (Information Leakage)
소프트 웨어 내 크래쉬를 이용하여 익스플로잇 (Exploit)
- 소프트웨어에서 익스프로잇 가능한 크래쉬가 발생될 때, 어떤 버그로부터 크래쉬가 발생되는지 확인
(일반적으로 사용자 입력 값으로 부터 흐름 제어 가능) - 공격 코드를 삽입하여 공격자가 삽입한 임의의 코드로 흐름 제어