Native Code Exploit Prevention
iOS는 코드 실행 공격을 방지하기 위해 두 가지 표준 매커니즘을 구현함
- ASLR(address space layout randomization)
- XN 비트(eXecute Never)
- 기타 등
1) ASLR
모든 실행 중인 프로그램의 주소, 프로그램 데이터, 힙, 스택의 메모리 주소를 임의로 설정함.
공용 라이브러리(shared library)의 경우, 다수의 프로세스에 의해 공유될 수 있는 주소에 있어야 하기 때문에..
→ 공유 라이브러리의 주소는 매번 프로그램 호출될 때가 아닌, OS 부팅 떄마다 무작위로 설정됨.
이러한 설정은 특정 함수와 라이브러리의 메모리 주소를 예측하기 힘들게 만든다.
→ 기존 libc 함수의 메모리 주소를 알고 있어야 하는 RTL(Return-To-Libc)과 같은 공격을 막을 수 있음.
# RTL: RET에 라이브러리 함수를 overwrite해서 실행되도록 하는 공격 기법
2) XN 비트
- ARM 플랫폼이 아닌 경우, NX 비트(No-eXecute)
- XN비트는 OS가 CPU에 의해 메모리의 세그먼트를 비 실행으로 표시할 수 있게 해줌.
- iOS에서는 스택 or 힙에 디폴트로 적용
→ 공격자가 악성 코드를 스택 or 힙에 삽입해도, 공격 코드를 실행시키도록 프로그램을 변경시킬 수 없음.
3) 기타
프로그램은 애플의 자체적인 코드 서명 엔타이틀먼트(entitlement)로 서명되어 있어야 읽기 가능하고, 실행 가능한 메모리를 가질 수 있다.
- iOS는, 프로그램이 자체적으로 가지는 웹뷰 기능에게 접근권한을 주지 않음
→ 코드 실행 공격을 예방
iOS에서 Chrome이나 Firefox가 자체 엔진을 사용하지 못하고, 애플이 제공하는 웹뷰를 사용해야함
→ 애플은 서드파티 웹 브라우저 엔진을 허용하지 않음.
→ 크롬도 내장된 웹뷰를 사용.
'보안 > 웹·모바일' 카테고리의 다른 글
[웹] 불필요한 HTTP Method : REST API 관련 이슈 (2 case) (3) | 2023.01.26 |
---|---|
[Android] frida 셋팅 도움말 (frida-server, frida-tools) (0) | 2022.11.22 |
[Android] 루팅 탐지 우회 도움말 log (0) | 2022.11.18 |
[iOS] 탈옥 탐지 우회 도움말 log (0) | 2022.11.09 |
[iOS] 기드라 탈옥탐지 우회 참고 (0) | 2022.11.08 |