목록Basic (8)
-
기지평문공격

본 글은 PC/태블릿 으로 보는 것을 권장드립니다. 0) 개요 이번 교육에서는 함수 호출, 메시지, 이벤트등을 가로채는 해킹 기술인 후킹(Hooking)을 이용하여 어플리케이션의 동작 흐름을 마음대로 제어하는 기법에 대해 중점적으로 다룰 것입니다. 이전의 시스템 해킹, 웹 해킹 교육과는 비교적 다뤄야 하는 도구들이 많고 환경 설정이 복잡하여 교육 전에 미리 환경을 구성하고 오셔야 합니다. 해당 가이드에서 설치할 도구들은 아래와 같습니다. 도구 이름 설명 비고 NOX Player 실제 안드로이드 운영체제를 탑재한 기기를 이용하면 좋겠지만, 아이폰을 사용하고 계신 분들도 있기 때문에 PC 상에서 안드로이드 운영체제를 사용할 수 있는 에뮬레이터 프로그램을 사용합니다. 교육자도 아이폰 ADB 안드로이드 에뮬레이..
Hash Collision에 대하여 Hash Collision, 우리 말로 하면 해시 충돌이다. 해시 충돌이란 어떤 해시 함수가 서로 다른 두 입력에 대해 동일한 출력 값을 나타내는 경우를 말한다. 보통 해시 함수는 다수의 데이터가 있을 때 이들을 구별하고 특정 데이터의 검색을 빠르게 하기 위해 사용되는데, 이 때문에 해시 충돌이 많이 일어나는 해시 함수일수록 그 질이 낮다고 평가된다(서로 다른 데이터를 구분하고 검색하는 비용이 증가하기 때문) Hash Collision의 예를 들자면 다음과 같다. 입력으로 받은 데이터를 정수 0부터 15까지의 해시 값으로 매핑해주는 해시 함수가 있다고 가정하자. 재수없게 해시 충돌이 발생한다면 다음 그림과 같은 상황일 것이다. 해싱을 했을 때 하나의 데이터당 하나의 해..
개괄 학교에서 Race Condition에 대해 배우고 있는데, 갑자기 문득 옛날에 공부했었던 Spectre 취약점이 생각났다. Spectre는 CPU 계열 취약점 중 하나로, 분기 예측 기법이 사용된 모든 마이크로프로세서에서 발생하는 CPU Exploit이었기 때문에 한때 혹자는 이를 CPU 게이트라고 부르기도 했다. Spectre를 이야기 할 때 항상 쌍으로 따라오는 Meltdown도 있지만 이는 다음에 다루도록 하고, 이 글에서는 Spectre 취약점 개념과 개념 증명(proof of concept)을 보며 해당 취약점의 위험성을 재고해 보도록 하자. Spectre 발생 원인 결론부터 말하자면 Spectre가 발생하는 이유는 CPU에 덕지덕지 발라져 있는 최적화 기법 때문이다. 사용자에게 더 빠른 ..
[reference] : Microsoft 기술문서, Wiki, Wiki Books 함수 호출 규약이란 이 글에서 다루고자 하는 함수 호출 규약(Function Calling Convention)이란, 서브루틴을 호출할 때 그들이 caller로부터 arguments를 전달 받는 방식과 서브루틴 종료시 돌려주는 return의 형태를 일컫는다. 보통 함수 호출 규약은 CPU의 아키텍처와 운영체제에 따라 여러 종류(x86, MIPS, ARM, ...)로 나뉘는데, 여기서는 x86에 대해서만 공부해보려 한다. x86 Calling Convention은 대표적으로 stdcall, cdecl, fastcall 세가지 방식이 존재한다(이외의 것은 다루지 않는다. - Microsoft 기술 문서 참고). __stdca..
Hooking에 필요한 테크닉을 정리하였다. 아이디어가 생기면 계속해서 추가할 것 Hook Java Method Java.perform(function() { TargetClass = Java.use('com.target.class'); TargetClass.Method.implementation = function() { // overload() console.log('[*] method hooked!'); } }); Dex 분석을 통해 얻어낸 Method 심볼로 해당 함수 내용을 대체하거나 무력화한다. Hook Java Instance Java.perform(function() { Java.choose("com.examplePackage.exampleClass", { /*..
설명 UNIX 계열의 운영체제에서는 ptrace 라는 system call을 통해 프로그램 분석, 수정 작업이 가능하다. ptrace는 프로세스에 Attach한 뒤 코드, 데이터, 스택, 힙, 레지스터 등에 접근이 가능하다. 하나의 process에 Attach할 수 있는 다른 프로세스는 오직 1개 이하이다. gdb, strace, ltrace 등 디버깅을 위한 도구들은 ptrace를 사용한다. 그러한 이유로, 프로그램 실행시 ptrace를 자기 자신한테 붙이면 Anti-Debugging의 효과를 낸다. 참고로 PTRACE_TRACEME라고 하는 매크로가 있는데 이를 ptrace에 넘겨주면 자신을 Attach 한다. 실습 #include #include #include void check(void) __a..