-
블랙박스 방식
- 어떻게 구현되었는지 모름
- 다양한 테스트 케이스를 시도해보며 알아내는 방식
화이트 박스 방식
- 소스 코드를 갖고 있는 경우 가능
- 준비된 테스트 케이스를 사용
리버싱 사용분야
- 취약점 분석 (버퍼 오버플로우 가능성, 암호 알고리즘 취약점 등)
- 악성 코드 분석
- 버그 수정
- 소프트웨어 사용 제한 기능 제거
- 신기술 연구
- 디지털 포렌식
버퍼 오버플로우
- 버퍼에 지정된 크기보다 더 큰 데이터를 입력함
- 문자열의 경계 값 검사를 하지 않아 발생
- 루트 권한 획득 가능
쉘 코드
- 버퍼 오버플로우를 일으켜, 쉘로 제어를 넘기고
- 다른 프로그램에 접근하기 위해 만든 공격코드
버퍼 오버플로우 공격 과정
- 공격 쉘 코드를 버퍼에 저장한다
- 루트 권한으로 실행되는 프로그램의 특정 함수의 스택 복귀 주소를 쉘 코드가 저장된 버퍼 주소로 변조
- 특정 함수가 호출되면 루트 권한 획득
- 악성코드, 백도어 설치
대처 방법
- 컴파일시 옵션 - 쿠키를 추가하여 쿠기가 변조되었는지 유무 판단
- 주소 공간 랜덤화
- strcpy 대신 strncpy 같은 함수를 사용
- 컴파일러가 스택프레임 범위 검사를 강제로 수행하는 언어를 사용
- Lib Safe 사용
- ASLR - 각 프로세스 안의 스택이 임의의 주소에 위치하도록 하는 기법
- No Excute(NX) - 스택/힙 영역의 실행 권한을 제거
악성 코드
- 컴퓨터에 침입하여 악의적인 행위를 통해 보안사고를 일으키는 소프트웨어
바이러스
- 자기 자신을 복제하여 악의적인 목적을 수행하는 소프트웨어
- 파일이나 문서와 같은 프로그램 없이 스스로 복제될 수 없다
웜
- 자체적으로 수행
- 네트워크를 통해 자신을 복제, 전파
- 취약점을 찾아 감염시키는 도구 역할
- 시스템이 웜에 감염되면 네트워크에 연결된 다른 컴퓨터를 탐색하도록 설계된 도구 사용
- 악성행위를 하는 코드를 페이로드라고함
트로이 목마
- 정상적인 프로그램으로 위장
- 사용자가 실행하도록 속임
- 합법적인 권한을 이용해 시스템에 침입
루트 킷
- 보안 시스템의 탐지를 피하면서 시스템을 제어하기 위해 공격자가 설치하는 악성파일을 모아 놓은 것
- 보통은 운영체제의 합법적인 명령어를 해킹하여 모아놓은 것
- 실행중인 프로세스를 숨김으로서 anti-virus 프로그램의 탐지를 피할 수 있다
- 일반적으로 취약점을 이용하거나 사회 공학 기법으로 루트 킷 설치
루트 킷 분류 요소
- 지속성 - 시스템이 부팅될 때마다 활동
- 메모리 기반 - 재부팅에 살아남지 못하나 탐지가 어렵다
- 사용자 모드 - API 호출을 가로채고 반환되는 결과를 수정
- 커널 모드 - 커널 모드에서 native API로의 호출을 가로챔
- 가상 머신 기반 - 가벼운 가상 머신을 설치하고 그 위에 OS를 구동
- 외부모드 - 정상적인 운영모드 밖에 존재 (BIOS나 시스템 관리 모드)
정적 분석
- 악성코드를 실행하지 않고 분석
- 식별자, 헤더 정보, String 등 추출
- 제어 흐름과 데이터 흐름 등을 보아 기능 전이도, API전이도 등을 생성하여 관찰
동적 분석
- 악성 코드를 실행하고 있는 상태를 갖고서 분석
- 시스템 파일 삭제, 버퍼 오버플로우 등 탐지
- 정적 분석에 비해 정확도 높음
혼합 분석
메모리 분석
- 시스템 메모리를 분석하여 은닉된 정보를 찾아냄
DLL 인젝션
- 실행 중인 프로세스에 DLL파일을 강제로 삽입
- DLL은 프로그램이 실행할 때 참고하는 함수, 구조체, 변수 등이 들어있으며, 프로그램에서 링킹할 수 있는 라이브러리
키로거
- 키보드의 입력 정보를 탈취하는 프로그램
- 후킹이라는 기법을 사용
- 유저 쓰레드 큐와 프로그램사이에서 메시지가 윈도우 프로그램으로 전달될 때 메시지 후킹을 사용하여 탈취
대처
- 시그니처 등록 - 키로거로 의심 되는 프로세스 목록에 기반하여 탐지
- PC에 있는 모든 모듈 분석
- 가상 키보드 입력 방식
- 키보드 드라이버 레벨에서 암호화