본문 바로가기

분류 전체보기

(267)
10장 질문 보호되어 있는 글입니다.
윈도우 드라이버 퍼징 윈도우 드라이버를 공격하는 것은 이제는 버그 헌팅 뿐만 아니라 공격 코드 개발자에게도 일상적인 일이 됐다.몇년 전에는 드라이버에 대한 원격 공격이 몇개 있었긴 하지만,지금은 공격 대상 시스템에 대한 권한 상승을 위한 로컬 드라이버 공격이 훨씬 보편적으로 되었다.전에는 WarFTPD의 스택 오버플로우 버그를 찾아내기 위해 Sulley 를 이용했다. 한 가지 간과한 것은 WarFTPD가 사용자 권한으로 동작하고 있어서 사용자 권한밖에 얻지 못했다는 점.--> 원격으로 공격에 성공했어도 관리자 권한은 얻지 못했을 것이다. 만약 오버플로우나 Impersonation 공격 취약점이 있는 드라이버가 로컬에 설치되어 있는 경우, 그것을 이용하면 시스템 권한을 획득해 자유롭게 시스템의 모든 정보에 접근할 수 있다. 드..
my_ioctl_fuzzer.py import pickleimport sysimport random from ctypes import * kernel32 = windll.kernel32 # Defines for Win32 API CallsGENERIC_READ = 0x80000000GENERIC_WRITE = 0x40000000OPEN_EXISTING = 0x3 # Open the pickle and retrieve the dictionary fd = open(sys.argv[1], "rb")master_list = pickle.load(fd)ioctl_list = master_list["ioctl_list"]device_list = master_list["device_list"]fd.close() # Now test that we ca..
ioctl_dump.py import pickleimport driverlib from immlib import * def main( args ): ioctl_list = [] device_list = [] dbg = Debugger() driver = driverlib.Driver() # Grab the list of IOCTL codes and device names ioctl_list = driver.getIOCTLCodes() if not len(ioctl_list): return "[*] ERROR! Couldn't find any IOCTL codes." device_list = driver.getDeviceNames() if not len(device_list): return "[*] ERROR! Couldn't f..
ioctl_fuzzer.py import structimport randomfrom immlib import * class ioctl_hook( LogBpHook ): def __init__( self ): self.imm = Debugger() self.logfile = "C:\ioctl_log.txt" LogBpHook.__init__(self) def run( self, regs ): in_buf = "" # read the IOCTL code ioctl_code = self.imm.readLong( regs['ESP'] + 8 ) # read out the InBufferSize inbuffer_size = self.imm.readMemory( regs['ESP'] + 0x10, 4) inbuffer_size = struct..
USB 로 운영체제 설치시, 검은 화면에 커서만 깜빡일 때 USB에 설치 미디어를 삽입 후 평소대로 Ultra ISO에 구웠더니 까만 화면 왼쪽 위에 커서만.껌뻑껌뻑--> Universal-USB-Installer-1.9.5.9 를 통해 다시 구워봤지만, 똑같은 증세 FAT32 파일 시스템으로 포맷후 다시 구워서 USB 부팅을 해봤지만 똑같음 부팅시 USB는 인식하지만, 내부 파티션을 인식하지 못하는것 같아 USB 전체를 활성 파티션으로 설정해봄. --- diskpart 프로그램 이용. 이제야 부팅이 됨.--> 윈도우가 사용하는 파일 시스템 (NTFS) 의 경우, 이미지로 구웠을 때 자동으로 활성 파티션 인식이 가능하지만, 리눅스의 경우 FAT32 방식을 사용하므로 자동 활성 파티션 인식을 못하는 것으로 추정. 앞으로 모든 리눅스 계열 운영체제 설치 시 파티션 ..
질문정리 1. Sulley 를 읽으면 "설리" 인가?2. 무자비한 퍼징 시도를 막을 수 있는 방법은 무엇인가?3. 퍼징은 무작위 대입으로 오류를 발생시켜 취약점을 탐색하는 방법이라고 했는데, 이 말대로라면 실제 오류를 찾기까지의 시간은 매우 짧을 수도, 반대로 매우 길수도 있다. 실제 취약점 탐색에서 퍼징이 쓰이는가? 쓰인다면 어떤 방식으로 퍼징을 이용하는가?4.
Sulley! Sulley 는 TrippingPoint 의 패드램 아미니와 아론 포트노이가 개발한 파이썬 기반의 강력한 퍼징 프레임워크로써 Sulley 라는 이름은 영화 몬스터 주식회사에 나오는 크고 푸른 괴물인 Sulley 의 이름을 따서 지은 것이다. Sulley 는 단순한 퍼저가 아닌 퍼저 그 이상이다. 패킷을 캡쳐할 수 있고 광범위한 에러 보고 기능과 VMware 자동화를 제공한다. 또한 퍼징 대상 애플리 케이션에서 에러가 발생하면 해당 애플리케이션을 재시작 시켜 버그를 발견하기 위한 퍼징 세션을 다시 시작시킬 수 있다. Sulley 는 블록 기반의 퍼징을 수행한다. 블록 기반 퍼징 방법은 데이브 아이텔이 개발한 SPIKE 에서 처음으로 사용됐다. 블록 기반 퍼징에서는 퍼징을 수행할 프로토콜이나 파일 형식 등을..