본문 바로가기

자동화 분석 도구 (오픈소스 , 무료) MobSF 정적분석 자동화 분석의 끝. 그냥 서버 키고 브라우저에서 드래그앤 드롭 하면 정적분석 알아서 다 해줌. (안드로이드는 동적분석도 지원) 공식 사이트 : github.com/MobSF/Mobile-Security-Framework-MobSF MobSF/Mobile-Security-Framework-MobSF Mobile Security Framework (MobSF) is an automated, all-in-one mobile application (Android/iOS/Windows) pen-testing, malware analysis and security assessment framework capable of performing static a... github.com Objectio..
ios) 안티디버깅 - getppid() ios) 안티디버깅 - getppid 일반적인 앱은 launchd process에 의해 실행된다. launchd 프로세스는 user mode로 첫번째로 돌아가는 프로세스로 PID=1이다. 따라서 일반적인 앱의 ppid(parent process id)는 1로 조회된다면 정상이다. 반면 디버거에서 자식프로세스로 생성한 경우는 ppid는 디버거의 PID로 설정된다. 따라서 getppid() 함수 호출 결과가 launchd인 1이 아니라면 디버거에서 생성했다고 판단할 수 있다. func AmIBeingDebugged() -> Bool { return getppid() != 1 } [우회] 물론 getppid() 함수에 후킹 걸어서 항상 1이 반환되도록 하면 됨. 아니면 반환 결과를 보고 판단하는 함수를 패치해..
ios) 안티디버깅 - sysctl ios) 안티디버깅 - sysctl ptrace와 비슷한 맥락이다. 다만 이번에는 ptrace flag가 설정됐는지 여부를 확인하는 것. Is_debugger_present를 알고 있다면 동일하다고 생각하면 된다. 정보 : 디버거 아래에 자식으로 생성하던, 실행중인 프로세스에 attach를 했건 P_TRACED 플래그는 Set 된다. 아래 코드는 mobile-security-testing-guide의 ios-testing-guide에서 발췌함. #include #include #include #include #include static bool AmIBeingDebugged(void) // Returns true if the current process is being debugged (either //..
ios) ptrace관련 안티디버깅 정리 ios) ptrace관련 안티디버깅 정리 https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/ Defeating Anti-Debug Techniques: macOS ptrace variants | Alexander O'Mara Every reverse engineer who handles software for macOS knows about ptrace(PT_DENY_ATTACH, 0, 0, 0), the infamous kernel-enforced anti-tracing DRM feature added to OS X years back (somewhere around Leopard) and most-notab..
ios 탈옥탐지6 - cydia scheme detection ios 탈옥탐지6 - cydia scheme detection 탈옥 시키면 Cydia는 기본적으로 설치한다. 물론 Cydia 경로를 탐지하는 경우 Cydia 경로를 바꿔버리면 그만이다. 하지만 Cydia의 URL scheme (cydia://) 까지 변경하는 일은 잘 없다. 따라서 cydia:// 스키마를 호출하는 것에 성공했다면 탈옥장치로 간주해볼 수 있다. 다만, 체크 함수에 후킹을 걸거나, 탐지 프로세스 중에 cydia를 잠깐 지우는 것도 우회 방법이 된다.
ios 탈옥탐지5 - 동적라이브러리 탐지 ios 탈옥탐지5 - 동적라이브러리 탐지 (추천) dyld 관련 함수들로 이상 동적라이브러리를 탐지한다. _dyld_image_count() _dyld_get_image_name() 위 같은 함수들로 현재 로드된 dylibs 개수와 이름 등을 조사하여 후킹 여부를 판단한다. 앱 자체 바이너리를 패치하지 않고는 일반적으로 후킹을 통해 탈옥탐지 로직을 우회하므로 효과적인 방법이 된다. 패치 자체가 dylib 삽입으로 진행되므로 공격자 입장에선 상당히 귀찮아진다.
ios 탈옥탐지4 - 루프백 테스트 (서비스 탐지) ios 탈옥탐지4 - 루프백 테스트 장치를 탈옥시키고 가장먼저 하는 행위가 Cydia 설치 및 OpenSSH 설치. 따라서 127.0.0.1:22 로 루프백 테스트 했을 때 정상 연결된다면 탈옥으로 간주할 수 있다. 다만 공격자 입장에서는 그냥 ssh 포트를 바꾸면 그만이다... 이외에도 탈옥장치에서는 정상장치에서 돌릴 수 없는 각종 서비스들도 돌릴 수 있다. 앞서 말한 ssh가 대표적인 예시이고, 이같은 방법으로 다른 서비스들도 탐지 목록에 추가하면 된다.
ios 탈옥탐지3 - system(0) (ios 11이후 사용불가) 탈옥탐지3 - system(0) system(0); 함수 호출 시 반환값을 보고 탈옥여부를 판단한다. /bin/sh가 있는지 여부에 따라서 return 값이 달라지므로 이걸 보고 판단하는 것. return 0 : 비탈옥장치 (정상장치) return 1 : 탈옥장치 예시코드(앱에 적용) +(BOOL)doShell{ if(system(0))//system(0) 호출결과를 보고 탈옥판단 return YES; return NO; } 우회코드(MobileSubstrate로 후킹) static int (*old_system)(char *) = NULL; int st_system(char* cmd){ if(!cmd) return nil; return old_system(cmd); } __attribute__((con..