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
      - 언젠가 공격에 악용될 수 있는 상태 -> 취약성

▶ 자사의 홈페이지에 SQLi 취약점이 발견되었다.
SQL injection 공격을 사용 가능한 '부분'을 발견했다는 것으로 취약성이 아닌 취약점 입니다.

▶ 얼마전 CVE-2013-2251 취약성을 이용한 공격을 받았다.
이미 취약한 부분으로 판명되었고, 이 '부분'을 이용하여 공격(exploit) 받았습니다. CVE-2013-2251이라고 분류된 취약점의 성향(성격)을 띈 공격이기에 취약점이 아닌 취약성으로 말하는 것이 맞다

 

소프트웨어 취약점 구분

취약점 구분

▶ 패치되지 않은 취약점 (제로 데이 취약성)

  • 세간에 알려지지 않은 취약성
  • 해당 제품의 제조사에서 대응하지 못한 취약성
  • 매우 위험한 상태로 APT 공격에서 가장 많이 사용
  • 취약점 자체만으로도 금전적 가치가 상당히 높음

 

▶ 패치가 공개된 취약점 (윈 데이 취약성)

  • 보안 연구가에 의해 보고되거나, 공격자가 사용한 제로 데이 취약성을 발견하여 패치가 만들어 졌으나 아직 그것이 적용되지 않은 상태
  • PoC (Proof of Concept) 코드를 공개하기 전 제조사와 협업하고 신속한 대응

 

소프트웨어 내 예상하지 못한 / 의도하지 않은 동작에 의한 발생

  • 흐름 제어 (Control hijack)
  • 서비스 거부 (DoS : Denial -of- Service)
  • 정보 유출 (Information Leakage)

소프트 웨어 내 크래쉬를 이용하여 익스플로잇 (Exploit)

  • 소프트웨어에서 익스프로잇 가능한 크래쉬가 발생될 때, 어떤 버그로부터 크래쉬가 발생되는지 확인
    (일반적으로 사용자 입력 값으로 부터 흐름 제어 가능)
  • 공격 코드를 삽입하여 공격자가 삽입한 임의의 코드로 흐름 제어

+ Recent posts