악성코드를 단말에 감염시키기 위해서 다양한 취약점을 사용하는데요, 버퍼 오버플로우와 같은 취약점을 통하여 실행되는 쉘코드에 대해서 정리를 해봅니다.
개요
* 쉘코드는
- 버퍼 오버플로우 공격에 사용되는 기계어 코드로, 공격자는 작성한 쉘코드를 공격 대상 호스트의 메모리에 삽입하고 EIP(다음에 실행 할 명령이 들어있는 메모리의 번지를 가지는 레지스터, Instruction Pointer)를 조작하여 시스템의 제어 흐름을 가로챌 수 있다.
* 배경
- 버퍼 오버플로우는 1988년 최초의 웜인 모리스 웜(morris worm)에 의해 사용되었음
- 2011 CWE/SANS Top 25 Most Dangerous Software Errors에서 3위를 기록
- CVE Details에 따르면 현재도 빈번하게 발생되고 있음 (DoS, Code Execution에 이어 3번째)
* 버퍼 오버플로우 취약점을 사용한 공격
- 해당 공격에 영향을 받는 취약점(코드의 실행흐름이 변경될 수 있는 소프트웨어의 결함)이 목표 시스템에 존재할 때 익스플로잇(취약점을사용해 공격하는 특정 공격 패턴) 코드를 로컬 또는 원격에서 전송시키는 방식으로 이루어짐
- 버퍼 오버플로우를 발생시킨 후 의도한 명령을 실행시키기 위해서 쉘코드를 사용
관련 연구
* 정적 분석
- 쉘코드가 보이는 특정 패턴을 탐지, 0x90(NOP Sled), "/bin/sh" 문자열, 시스템 콜 패턴
- Snort 같은 IDS에서 널리 사용
- Obfuscation(난독화)를 통하여 우회
- 통계기반 탐지: 데이터 마이닝을 통하여 해당 프로세스가 받는 정상적인 입력의 바이트 분포를 학습 후 바이트 분포에서 벗어나면 탐지, 오탐문제, 오버헤드가 큼
* 동적 분석
- 에뮬레이션: 가상의 CPU나 레지스터로 구성된 가상 환경을 구성, 타겟 프로세스로 가는 입력 값을 가로채어 미리 실행한 후 판단, 런타임 정보를 알 수 없어서 정확한 분기를 예측하지 못하는 한계, 최근엔 타겟 프로세스의 가상 메모리를 덤프하여 사용하여 해결
- 프로그램이 사용하는 가상메모리의 주소범위가 제한되어 있는데, 해당 범위를 넘어서는 주소를 참조하는 경우를 분석하여 탐지
* 쉘코드 제작을 어렵게
- ASR(Address Space Randomization): 가상 주소 공간을 프로세스가 생성될 때 마다 랜덤하게 할당하여 복귀 주소를 알기 어렵게 만드는 방법.
- 입력값 제한: 0x00부터 0xFF까지 모든 값이 사용하는 문자열은 아니므로 이 외의 값을 차단하는 일종의 Whitelist 방식
* 쉘코드가 타겟 프로세스에서 메모리에 쓰이거나 실행되는 것을 어렵게
- Stack Guard: 컴파일 단계에서 RET 앞에 랜덤 값을 삽입하여 무결성 검사
- Stack Shield:
- DEP(Data Execution Prevention): 특정 영역에 실행권한 자체를 없애는 것
- ISR(Instruction Set Randomization): Instruction Set을 랜덤하게
'Work Log > As Cybersecurity Consultant' 카테고리의 다른 글
안전한 인터넷 사용을 위한 주의사항 - 악성코드 감염을 예방하기 위해서는 (0) | 2012.10.17 |
---|---|
안전한 인터넷 사용을 위한 주의사항 - 인터넷 뱅킹 사용 (0) | 2012.10.17 |
영향도 분류를 위한 기준 참고자료 (FIPS PUB 199 - Standards for Security Categorization) (2) | 2011.02.01 |
[보안제품 소개] PMS(Patch Management System, 패치관리시스템) (0) | 2011.02.01 |
[보안제품 소개] CMF/DLP - 2 (0) | 2011.02.01 |