- 참치군
- ?
- stalk.io
- :: 2013년, 스리는 여섯살
- 웹 강좌
- 점프 투 파이썬
- 요니나의 대학생 재테크
- This is CS50
- 애자일 이야기
- isao의 IT,게임번역소
- 소프트웨어 이야기
- Color Scripter
- 어디를 가든지 마음을 다해 가라
- VisuAlgo
- 서울대 평생교육원
- 몽환
- RegExr: Learn, Build, & Test R…
- Hello, Stranger :D
- I Like Exploit
- Z3alous Security Story
- Project Euler
- Blog
- pieces of code
- window 쪼물딱 거리기
- IT - Informatics Alphabet
- rop
- 국제 정보교육센터 I2sec 대구 1기
- This is the moment. :)
- blackmoon
- z3alous는 세상에 소리 z3alous~
- Acord
- FORENSIC-PROOF
- 어셈블리
- Outsider's Dev Story
- Open Tutorials
- 코드라이언
- 컴퓨터 그래픽스와 3D 프린팅
- HACKABILITY
- Lee, Jae-Hong
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 소켓
- 베이스
- 발표
- 창의공학설계
- 염색
- 펌
- 공간복잡도
- Wireshark
- 버퍼오버플로우
- 탈색
- 컴파일러
- Calling Convention
- Visual Studio
- 디버깅
- 동대구
- 호출규약
- 레지스터
- 알고리즘
- 추상데이터타입
- 블루블랙
- ubuntu
- Hello World
- BOF
- C언어
- 파이썬
- Debug
- 오지총
- 피보나치
- 시간복잡도
- Packet
- Today
- Total
c0smicb0y
안티바이러스 소프트웨어 공격 본문
안티바이러스 소프트웨어는 가장 복잡한 응용프로그램 중의 하나이다. 안티바이러스 소프트웨어는 많은 파일 타입과 포맷을 다루어야한다.
* 실행파일: exe, dll, msi, com, pif, cpl, elf, ocx, sys, scx 등
* 문서파일: doc, xls, ppt, pdf, rtf, chm. hlp 등
* 압축파일: arj, arc, cab, tar, zip, rar, zoo, lha, lzh, ace, iso 등
* 실행 가능한 패커: upx, fsg, mew, nspack, wwpack, aspack 등
* 미디어파일: jpg, gif, swf, mp3, rm, wmv, avi, wmf 등
파일 포맷들 각각은 아주 복잡할 수 있다. 그래서 안티바이러스 소프트웨어가 모든 포맷을 적절하게 처리하는 것은 아주 어렵다.
대부분의 취약점들은 다음 두 요소에 존재한다는 것은 최근 연구를 통해 알 수 있다.
* 실행파일 압축 해제
* 데이터 압축 해제
안티바이러스 소프트웨어는 압축된 실행파일과 데이터를 처리하기 전에도 압축을 풀려고 시도할 것이다.
실행파일과 데이터의 압축을 푸는 것의 문제는 그 처리과정이 아주 복잡하다는 것이다. 안티바이러스 소프트웨어는 복잡한 연산을 하고, 메모리를 할당하고, 그 연산에 따라 데이터를 추출한다. 이 과정에서 어떤 실수가 발생한다면 취약점으로 이어질 수 있다.
기본적으로 안티바이러스 소프트웨어에는 4가지 종류의 취약점이 있다.
* 로컬 권한 상승 취약점
* ActiveX 관련 취약점 ActiveX가 퇴출되어서 얘는 제외
* 엔진 기반의 취약점
* 관리 인터페이스 관련 취약점
이 취약점들에 대한 안티바이러스 프로세스를 점검하는 방법은 서로 아주 다르다.
안티바이러스 소프트웨어 엔진 점검
엔진 점검 방법에는 세가지 방법이 있다.
* 소스코드 점검
말 그대로 소스코드를 점검하는 방법이다. 하지만 오픈소스 백신을 제외하고는 소스코드를 구하는 것은 힘들다. 직접 소스 코드를 분석하며녀서 위험한 API와 정수 계산, 메모리 작동, 그리고 논리적 오류 등을 찾아낸다.
* Reversing engineering
대부분의 상용 안티바이러스 솔루션들은 소스가 공개되어 있찌 않기 때문에 보안 연구자가 소스코드를 분석하는 것은 거의 불가능하다.
리버싱 엔지니어링은 최선의 선택들 중 하나이다. 연구자들은 어셈블리어 코드를 직접 분석하고, 잠재적인 취약점들을 찾아낸다.
* fuzzing
fuzzing은 놀라운 테크닉이며, 과거 몇 년 사이에 소프트웨어 보안을 촉진시켜왔다.
공개된 안티바이러스 소프트웨어 퍼저는 겨우 하나 밖에 없다. Tavis Ormandy에 의해 공개된 vxfuzz 이다.
안티바이러스 소프트웨어를 퍼징하기 위해 필요한 것들은 다음과 같다.
A. 대용량의 하드 디스크
안티바이러스 소프트웨어가 다양한 파일 포맷을 다루어야 하기 때문에, 지원되는 모든 파일 포맷을 퍼징하는 것이 좋다.
B. Debugger
디버거를 선택해라. Ollydbg와 Immunity Debugger 둘 다 좋은 선택이다.
C. Fuzzer
실제로, 안티바이러스 퍼저를 구현하는 것은 아주 쉽다. 퍼저는 예외를 핸들링하거나 반복적으로 타깃 어플리케이션을 시작시킬 필요가 없다. 이것이 다른 어플리케이션을 퍼징하는 것과 안티바이러스 소프트웨어를 퍼징하는 것 사이의 주요 차이점이다.
안티바이러스 소프트웨어용 퍼저는 그냥 파일 생성기에 불과하다. 파일을 생성하기 위해 아주 간단한 안티바이러스 퍼저는 샘플을 읽고, 그 샘플을 퍼징 문자열로 바이트씩 대체하고, 그런 다음 지정된 디렉토리에 그것들을 저장하기만 하면 된다.
퍼징 문자열을 선택하는 것은 보통 설계자의 경험에 기반을 두고 있다. 퍼징 문자열을 세그먼트 폴트를 일으킬 수 있는 매직 값들을 포함하고 있어야한다.
CRC 체크섬에 대해서는 주의를 해야한다. rar과 zip과 같은 파일 포맷들에 대해서 안티바이러스 소프트웨어는 먼저 그 파일의 CRC 체크를 하고, 매치가 되지 않으면 더 이상의 프로세스가 일어나지 않는다.
특정 파일 포맷들에 대해서는 맞춤식 CRC 함수가 퍼저 내부에 구현될 수 있다.
D. 좋은 샘플들
좋은 샘플들은 퍼징에 중요하다. 안티바이러스 소프트웨어는 아주 많은 파일 포맷들을 처리하기 때문에 점검자는 가능한 많은 샘플들을 수집할 필요가 있다.
이것들이 준비가 되면 다음 4단계를 따르면 된다.
A. 테스트 케이스 만들기
안티바이러스 퍼저를 이용해 할 수 있다. 생성된 테스트 케이스들은 지정된 디렉토리에 저장되어야 한다.
B. 안티바이러스 소프트웨어 다운로드 및 설치
설치 후 스냅샷을 찍어두는 것을 잊지 마라.
C. 스캔
테스트 케이스에 대해 스캐닝을 한다. 이때 안티바이러스 소프트웨어 스캐닝 프로세스에 디버거를 attach해라.
D. 잠을 좀 자라
스캐닝 과정은 테스트 케이스 수에 따라 몇 시간 혹은 며칠이 걸릴지도 모른다. 잠을 좀 자고, 일어나자마자 예와가 발생했는지 디버거를 확인하라. 만약 예외가 발생했다면, 예외를 분석하여 공격이 가능한지 확인해야 한다.
'정보보안 > System' 카테고리의 다른 글
Heap Buffer Overflow (1) | 2015.04.17 |
---|