Tcache Poisoning Tcache PoisoningTcache PoisoningDouble Free Bug를 이용하여 tcache_entry를 조작하고 이미 할당된 메모리에 다시 힙 청크를 할당하는 공격 기법이다. tcache에서 사용하는 tcache_put과 tcache_get 함수에서는 old와 p를 검증하지keyme2003.tistory.com [*] '/root/dream/tcache_poison/tcache_poison' Arch: amd64-64-little RELRO: Full RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000)보호기법을 확인하면 Ful..
개념정리Read-Only Relocations (RELRO) 개념은 바이너리 익스플로잇 보호 메커니즘에서 중요한 역할을 한다. Full RELRO는 특정 유형의 익스플로잇을 방지하는 가장 강력한 보안 조치고 특히 GOT overwrite 기법을 막는 것에 효과적이다. 하지만 이를 우회할 수 있는 방법은 존재한다. 일단 RELRO 개념을 이해해보자. RELRO는 3가지 종류가 있다.No RELRO (RELRO 미적용):보안 수준: 최저설명: 이 설정은 어떤 재배치 읽기 전용 보호도 구현하지 않습니다.취약점: 공격자가 글로벌 오프셋 테이블(GOT)을 덮어쓸 수 있도록 허용하여 GOT 덮어쓰기 공격과 같은 다양한 익스플로잇에 취약합니다.Partial RELRO (부분적인 RELRO):보안 수준: 중간설명: 이..
UnCrackable-Level1에 이어 Level2를 풀어보자. UnCrackable-Level2.apk를 다운받고 [NOX 플레이어]로 App을 실행했다. 문제풀이 App을 실행하면 디버깅을 탐지하는 것을 확인할 수 있다. 어떤 방식으로 디버깅을 탐지하는지 확인하기 위해서 코드를 JEB로 분석했다. ○ MainActivity - onCreate()if((b.a()) || (b.b()) || (b.c())) { this.a("Root detected!");}if(a.a(this.getApplicationContext())) { this.a("App is debuggable!");} onCreate()의 if를 보면 b.a()와 a.a()를 실행하고 결과에 따라 루팅과 디버깅을 탐지하는 것을 ..
문제풀이 App을 실행하면, "Root detected!"라고 뜨는 것을 확인할 수 있다. [OK] 버튼을 누르면 App이 종료된다. 실제 APK 리버싱을 해보면 루팅폰에서 App에 접근하는 것을 [그림 1]과 같이 감지해서 사전차단하는 경우를 많이 볼 수 있다. 이런 유형을 우회하는 방법에 대해 공부하는 의도인 것 같다. APK 코드를 파악하기 위해서 JEB라는 디컴파일 툴을 이용해서 코드를 분석했다.(JEB가 없는 독자는 JADX를 사용하면된다.) ○ MainActivity → onCreate()@Override // android.app.Activityprotected void onCreate(Bundle arg2) { if((c.a()) || (c.b()) || (c.c())) { ..