과거의 해킹이 아니다 Rootkit 발견되지 않도록 은닉하는 형태의 해킹 툴 Hooking API Hooking, Winsock Hooking, System Hooking Virtualization 환경 제어가 강력해짐 Hacking Earns Money Every Computer is Connected Hackers goes Web 2.0 (Collaborate)
도움 – 오토마우스, aimbot, 매크로, 자동반응 등 Authoritative Clients (힘자랑 클라이언트) 하지 말아야 할것을 하게 함 – 텔레포트, 능력치 올리기, 제한 풀기 등 Information Exposure (정보 노출) 알지 말아야 할것을 알게 함 – 맵핵, 스탯핵, 투명벽 등 Bugs and Design Loopholes (Exploits) (버그) 기존 로직의 버그를 이용 Others Compromised Servers Environmental Weaknesses Social Cheats Identity Theft Reverse Engineering
메모리 조작 – TSearch, Cheat Engine, … 실행 파일 조작 – OllyDbg, Resource Hacker, … 코드 메모리 조작 – OllyDbg, Loader, … 패킷 조작 – WPE, Proxy, … 환경 조작 – Microsoft Windows, VMWare…
유저 친화적 인터페이스 강력한 코드 분석 기능 C Runtime (strcpy, rand, …) Reference Analysis 알아보기 쉽게 친절한 가이드 API Stack 분석, 안내 “CreateMutexA” API 도 파라메터와 함께 친절하게 “strstr” C Runtime도 파라메터와 함께 친절하게 References 특정 코드를 역참조
0x0136000 stack 0x03d0000 heap 0x0400000 A.exe 0x6400000 MyDll.dll 0x7c80000 kernel32.dll Memory Address Space 0x0136000 stack 0x03d0000 heap 0x0400000 A.exe 0x6000000 A.dll 0x6400000 MyDll.dll 0x7c80000 kernel32.dll Process B.exe 0x0136000 stack 0x03d0000 heap 0x0400000 A.exe 0x6400000 MyDll.dll 0x7c80000 kernel32.dll Memory Address Space 0x0136000 stack 0x03d0000 heap 0x0400000 B.exe 0x6400000 Mama.dll 0x6500000 MyDll.dll 0x7c80000 kernel32.dll 프로세스마다 Adress Space를 갖는다 (같은 포인터값이라도 프로세스마다 다른 데이터) EXE 는 보통 0x0400000 에 위치 같은 DLL 는 보통 같은 주소에 위치 특히 OS 기본 DLL 은 같다고 봐도 된다 하지만 같은 프로세스의 두 DLL 의 주소영역이 겹칠 수 있다 ! Relocating / Rebasing
다른 DLL 이 같은 주소를 쓰려고 하면? OS 는 DLL 의 주소를 동적으로 바꿀 수 있게 해준다 Relocation / Rebasing DLL 호출하는 코드는 어떻게 바꾸지? DLL 의 함수를 import 했을 경우 아래와 같은 코드 생성 CALL [0x43210] IAT (Import Address Table)
가능 IAT 가 가리키는 주소의 코드를 직접 수정하는 방법도 있다 코드영역을 수정하기 위해서는 VirtualProtect 이용 PAGE_EXECUTE_READ PAGE_READWRITE 하나의 API 에는 여러가지 gateway 가 있다. TextOutA TextOutW OpenProcess NtOpenProcess / ZwOpenProcess kernel32.dll ntdll.dll ntoskrnl
가로채기 CreateRemoteThread SetWindowsHookEx Buffer Overflow Many more in Kernel Mode 해커가 코드를 가로채는 방법 Code patching IAT patching Breakpoint DLL hijacking SEH (Structured Exception Handling) Access Violation Division By Zero Many more in Kernel Mode
- 권한 제약이 없다 Driver 를 개발하면 Kernel mode 에서 동작하는 프로그램을 만들 수 있다 Filter Drivers – No Hooking Necessary IA32 Debug Register (Data Breakpoint) Trap (Interrupt)
is Tomorrow's Code Execution.“ 데이터만으로 코드 실행 가능 대부분 c string 처리에서 발생 c string 을 그냥 쓰는길은 자폭의 길 String Class 로 wrapping 해서 쓸것 정 써야할곳에는 strcpy_s, strcat_s 를 쓸것 Buffer Max Size 와 Size 를 검사할것
말고, 보낸 데이터를 서버가 검사하라 클라이언트도 Double Check 정교한 동기화를 사용한다면 클라이언트끼리 검사 ex) Starcraft 는 서로의 데이터가 기대된것과 틀리면 즉시 멀티플레이에서 drop 시킨다 다양한 타이밍 / 방식으로 할 수록 좋다 ex) 매번 총을 쏠때마다: 이전 발사와의 시간간격 게임 종료후: 총 발사한 총탄/총 시간 내가 가한 대미지 수 : 발사한 총탄의 총 대미지
terminology, a honeypot is a trap set to detect, deflect or in some manner counteract attempts at unauthorized use of information systems – wikipedia 실제 데이터는 암호화, honeypot plain data 를 둔다. 걸려들 경우 100% cheating ! (no false positive)
데이터 유효성 검사시에 활용하면 좋다. ex) 서버의 랜덤을 활용한 확률 기반 검사 요청 if (rand() % 100 == 0) { if (rand() % 100 == 0) { if (rand() % 100 == 0) send_req_verify_A() // 1/1000000 else send_req_verify_B() // 약 1/10000 } else send_req_verify_C() // 약 1/100 } else send_req_verify_D() // 99/100
보안 위협 발생시 사용할 수 있는 시스템 ex) 서버측에서 커맨드를 내리면 특정 윈도 타이틀 / 프로세스명을 검색하여 새로 발견된 치트 프로그램 사용자 제재 처리 평소에 사용하지 않는 것이 핵심 해커에게 노출/공격당할 가능성이 적음 온라인상에서 클라이언트측으로 DLL 을 내려줄 수 있다면 더욱 좋다. (denial of service 공격을 감안하여 DLL 로부터 “실패” 메시지를 받아 제재하지 말고 DLL 로부터 “성공” 메시지를 받지 못하면 제재)
defend all points; the attacker can choose the weakest point. 방어자는 모든 지점을 다 막아야 하지만 공격자는 한 곳만 골라 공격할 수 있다. The defender can defend only against known attacks; the attacker can probe for unknown vulnerabilities. 방어자는 알고 있는 범위만을 막을 수 있지만 공격자는 모르는 취약점을 찾아낼 수 있다. The defender must be constantly vigilant; the attacker can strike at will. 방어자는 언제나 늘 지키고 있어야 하지만, 공격자는 원하는 아무때 공격할 수 있다. The defender must play by the rules; the attacker can play dirty. 방어자는 원칙을 지켜 행동해야하지만, 공격자는 비열하게 공격할 수 있다.