본문 바로가기

분류 전체보기231

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.
5장-2 Immunity 디버거 101 Immunity 디버거와 사용자 인터페이스를 간단히 살펴보자.Immunity 디버거를 실행하면그림과 같은 화면이 나올 것이다.좌측 상단 CPU 패널 : 프로세스의 어셈블리 코드가 출력됨우측 상단 레지스터 패널 : 모든 범용 레지스터와 그 외의 CPU 레지스터 내용이 출력됨좌측 하단 메모리 덤프 패널 : 선택한 메모리 영역의 내용을 16진수 값으로 보여줌우측 하단 스택 패널 : 스택의 내용을 보여주며 심볼 정보를 갖고 있는 함수의 파라미터를 디코드해 보여준다.하단 명령 바 패녈 : WinDbg 스타일의 명령으로 디버거를 제어할 수 있는 곳PyCommand 실행 가능 PyCommandImmunity 디버거에서 파이썬을 실행시키는 주된 방법은 PyCommend를 이용하는 것이다.PyCommand란 : 후킹, .. 2015. 1. 25.
5장-1 Immunity 디버거 Immunity 디버거http://debugger.immunityinc.com에서 무료로 다운로드 가능하다. 2015. 1. 25.
4장-4 종합 툴 툴은 위험성이 있는 함수 호출을 찾아내고 그런 함수 호출을 추적한다.위험하다고 생각되는 함수가 호출되면 스택에서 네 개의 파라미터를 참조한다.해당 함수가 오버플로우를 발생시킬 수 있는지 판단하고 해당 프로세스의 스냅샷을 만든다.접근 위반이 발생하면 스크립트는 마지막으로 위험한 함수가 호출된 시점으로 프로세스를 되돌린다. danger_track.py-------------------------------------------------------------------#danger_track.py from pydbg import * from pydbg.defines import * import utils # 접근 위반이 발생한 후에 조사할 명령의 최대 개수 MAX_INSTRUCTIONS = 10 # 다음.. 2015. 1. 25.
728x90