전체 글 5

메모리 접근 행위 기반 안티치트 드라이버 개발

학사 학위 졸업 논문 대주제를 안티치트로 설정하고 각자 역할을 나누었다.  기존 안티치트는 게임사의 서버에서 값의 이상 변화를 감지하거나 클라이언트의 무결성을 검증하거나 실행 중 프로세스를 감시하는 방법등으로 구현이 되어왔다. 하지만 클라이언트가 ring3에서 동작하는 이상 이를 무력화 할 방법 또한 개발되어 왔다.치트 프로그램이 동작하기 위해서는 게임 클라이언트 프로그램이 동작할 때 해당 프로세스에서 메모리 값을 읽어오는 행위가 대부분 일어나고, 게임 핵 프로세스는 커널 함수를 통해 이 행위가 이루어진다고 생각하여 해당 커널 함수를 사용한 기록을 조회한다면 안티치트의 구현이 가능할 것이라고 생각했다.ZwReadVirtualMemory를 목표로 하여 후킹을 하면 해당 기능을 구현할 수 있을 것이라고 가설..

카테고리 없음 2024.12.06

드라이버 CVE 분석

CVE-2020-12928은 AMD Ryzen Master의 특정 버전에서 발견된 권한 상승 취약점이다.공부를 위해 다음 게시물을 참조했다. 또한 IDA와 Ghidra를 번갈아 가며 사용해서 각각의 함수마다 더 분석하기 쉬운 도구를 취사선택했다.https://hackyboiz.github.io/2021/07/14/l0ch/windows-driver-part2/ hackyboizhack & lifehackyboiz.github.ioDriverEntry를 확인하게 되면 DriverObject와 RegistryPath를 인자로 가져오게 된다.DriverObject가 설정되지 않는 경우 함수 sub_14000440C를 실행하는 것을 볼 수 있다.해당 함수에서 인자를 가지고 WDM을 이용하여 드라이버 설정을 초기..

카테고리 없음 2024.12.06

드라이버

시스템 커널에 기능을 추가하거나 하드웨어 자원을 추상화하기 위한 라이브러리 성격의 프로그램이다. Legacy software driver링 0에서 동작하고, 커널과 상호작용대부분의 루트킷과 보안드라이버가 해당Legacy filter driver다른 드라이버의 하위에서 입력 값을 수정하는 드라이버File system minifilter driver파일 시스템과 상호작용하여 파일 I/O 요청을 가로채는 드라이버안티바이러스가 스캐닝을 목적으로 할 때 사용하거나,디스크 암호화를 구현할 때 사용 드라이버가 로드되면 커널 메모리 영역에 올라오고, 운영체제에 포함된 I/O 관리자가 Driver_Object를 등록한 후 DriverEntry함수를 호출한다. DriverEntry함수는 드라이버 설정을 초기화하고 IRP ..

카테고리 없음 2024.12.06

예외처리

Exception Handling윈도우에서 처리되는 예외는 Interrupt, Fault, Trap으로 나뉜다. Interrupt운영체제에서 정의하고 있거나 개발자가 설정한 예외가 발생하였을 때 실행된다.  데이터 버스를 통해 비동기 방식으로 데이터를 처리할 때도 사용한다.Trap특별한 종류의 명령을 수행 할 때 발생하는 예외로, 실행 이후 다음 명령어를 실행한다. 대표적으로 SYSCALL을 호출할 때 사용된다.SYSCALL을 호출하면 RIP를 RCX로 옮긴 후 IA32_LSTAR를 적재하게 되는데, 이것이 시스템 콜 타겟 주소를 가리킨다. Fault 프로세서가 명령을 수행하는 중 발생한 오류 중 수정가능한 오류를 뜻한다. 오류 수정 후 해당 명령을 재 실행한다. 페이징 풀 처리등에 사용된다. Inte..

카테고리 없음 2024.12.06

난독화

난독화 기법 갈래Data-based Obfuscation : 프로그램 내부에서 사용되는 변수와 상수를 난독화Control-based Obfuscation : 프로그램의 흐름과 의도를 이해하기 어렵도록 난독화Data-based obfuscationConstant Unfolding컴파일 과정에서 최적화 기법으로 사용되는 Constant Folding에 반대되는 개념으로,코드 상에서 사용하는 상수를 계산과정을 통해 도출해 내어 분석자로부터 데이터를 감추는 기법이다.위의 과정을 예시로 들면스택에 특정 상수를 넣은 후, 스택의 값에 특정 값을 더하여0x0라는 상수를 만들어 내는 과정이다. Data Encoding위의 Constant Unfolding과 유사하게 데이터를 나타내는 방식을 바꾼 것으로,Polynomi..

카테고리 없음 2024.12.06