본문 바로가기

전체 글228

6장-후킹 후킹은 프로세스를 모니터링하기 위해 실행 흐름을 변경하거나 프로세스가 접근하는 데이터를 변경하기 위해 사용되는 강력한 기술이다.소프트 후킹과 하드 후킹이 나온다.소프트 후킹은 대상 프로세스에 붙인 다음에 실행 흐름을 가로채기 위해 INT 3 브레이크포인트 핸들러를 구현하는 것이다.하드 후킹은 어셈블리 언어로 작성된 후킹 코드가 실행되게 점프 코드를 삽입하는 것이다. 소프트 후킹은 집중돼 있지 않거나 자주 호출되지 않는 함수를 후킹하는데 유용하다.반대로 자주 호출되거나 프로세스에 최소한의 영향을 주기 위해서는 하드 후킹을 사용해야 한다. 2015. 1. 26.
5장-4 악성 코드의 안티 디버깅 루틴 무력화-2(반복적인 프로세스 탐지 기법 우회) 악성 코드는 디버거가 실행 중인지 확인하기 위해 반복적으로 실행 중인 프로세스를 검사하기도 한다.예를 들면 Immunity 디버거를 사용한다면 Immunitydebugger.exe 가 실행될 것이다.악성코드는 실행 중인 프로세스의 리스트를 반복적으로 구하기 위해 Process32First 함수와 Process32Next 함수를 이용한다.두 함수 모두 실행 결과를 불린값으로 반환한다.EAX 레지스터의 값을 0으로 만들고 곧바로 리턴하게 함수를 패치하면 악성코드는 실행 중인 프로세스 리스트를 구할 수 없다고 한다. 머리가 참 좋다.immunity 디버거에 내장된 어셈블러를 이용해면 함수 패치를 쉽게 수행할 수 있다. 2015. 1. 26.
5장-4 악성 코드의 안티 디버깅 루틴 무력화 악성 코드가 디버거를 이용해 자신의 동작 방식을 분석하지 못하게 차단하려고안티 디버깅 루틴을 사용한다고 한다. 안티 디버깅 예가장 널리 사용되는 안티 디버깅 기법kernel32.dll 의 IsDebuggerPresent 함수를 사용하는 것이다.이 함수는 파라미터 없이 사용되며 디버거가 현재 프로세스에 붙여져 있으면 1을 반환하고 그렇지 않으면 0을 반환한다.IsDebuggerPresent 함수를 디스어셈블한 코드PyCommand에 포함하거나 Immunity 디버거의 파이썬 셸에서 밑의 코드를 실행한다.그러면 안티 디버깅이 우회될 것이다. 2015. 1. 26.
5장-3 공격코드개발-3 윈도우의 DEP우회 DEP는 힙과 스택 같은 메모리 영역에 있는 코드가 실행되는 것을 방지하기 위해 마이크로소프트 윈도도우에 구현된 보안 기능이다.공격 코드가 자신의 셸 코드를 실행시키려는 대부분의 시도를 무력화시킬 수 있다.왜그럴까 ? :대부분의 공격 코드는 자신의 셸 코드를 힙이나 스택에 위치시키기 때문이다.하지만 네이티브 윈도우API를 통해 DEP를 우회할 수 있는 트릭이 존재한다고 한다.프로세스의 DEP 설정을 비활성화시키는 데 사용되는 윈도우 API는 NtSetInformationProcess() 다.NtSetInformationProcess() 프토토타입-----------------------------------------------------------------NTSTATUS NtSetInformation.. 2015. 1. 26.
5장-3 공격코드개발-2 문자필터링 공격 대상 시스템에 공격 문자열을 전달할 때 셸 코드에서 사용할 수 없는 문자들이 있다.예를 들면 strcpt() 함수에 대한 스택 오버플로우를 발견했다면그것을 공격하기 위한 공격 코드는 NULL 문자를 포함하면 안된다.왜냐면 strcpy() 함수는 NULL 문자를 만나면 데이터 복사 작업을 멈추기 때문이다.오버플로우가 발생한 이후의 스택 상태EIP 레지스터가 ESP 레지스터를 가리키고 있는게 보인다.바이트의 0xcc 는 해당 위치에 브레이크 포인트가 설정된 것처럼 단순히 디버거를 멈추게 만든다.공격을 수행하기 전에 해당 문자를 셸 코드 인코더로 인코딩 해야 한다.badchar.py 를 작성하자badchar.py----------------------------------------------------.. 2015. 1. 26.
5장-3 공격 코드 개발 소프트웨어 시스템에서 취약점을 찾는 것은 공격 코드를 만드는 것이 중요하다.immunity디버거는 공격 코드 만드는 것을 쉽게 해준다. 공격 코드에서 사용할 명령 찾기EIP 제어권을 획득한 이후에는 셸 코드가 실행되게 만들어야 한다.일반적으로 레지스터나 레지스터 값의 상대적인 오프셋이 셸 코드의 주소를 가리킨다.셸 코드 주소로 실행 제어권을 전달하려면 그것을 수행하는 명령을 실행 바이너리나 실행 바이너리에 로드된 모듈 중 하나에서 찾아내야 한다. immunity 디버거 파이썬 라이브러리를 이용하면 로드된 바이너리에서 원하는 명령을 쉽게 찾을 수 있다.findinstruction.py 를 작성하자.-------------------------------------------------------------.. 2015. 1. 25.
728x90