[ios] 보안 메모리 보호 기술

iOS는 많은 보안 기능을 제공하여 사용자의 데이터를 안전하게 보호합니다. 이 중에서도 메모리 보호는 중요한 부분 중 하나입니다. 메모리 보호는 시스템이 악의적인 공격으로부터 보호되도록 하는 데 도움을 줍니다.

스택 난독화 (Stack Smashing Protection)

스택은 함수 호출과 지역 변수를 저장하기 위한 중요한 메모리 영역입니다. Hacker가 스택 버퍼 오버플로우 공격을 시도하여 프로그램 흐름을 조작하고 악성 코드를 실행하는 것을 방지하기 위해, Xcode의 컴파일러는 스택 난독화 (Stack Smashing Protection) 를 자동으로 적용합니다.

int vulnerableFunction(char *input) {
    char buffer[10];
    strcpy(buffer, input);  // buffer overflow vulnerability
    ...
}

포인터 인증 (Pointer Authentication)

iOS 14부터는 ARMv8.3 이상의 CPU를 탑재한 기기에서 포인터 인증 (Pointer Authentication) 기술을 지원합니다. 이를 통해 포인터 유효성을 검증하고 변경된 포인터로부터의 공격을 방지할 수 있습니다.

void * __crypto_vptr_authptr(const void *ptr, const char *desc);
void * __crypto_vptr_authptrM(const void *ptr, const char *desc, size_t size);
void * __crypto_vptr_unauthptr(const void *ptr, const char *desc);
void * __crypto_vptr_unauthptrM(const void *ptr, const char *desc, size_t size);

메모리 보호 속성 (Memory Protection Attributes)

iOS는 메모리 보호 속성 (Memory Protection Attributes) 을 사용하여 힙, 스택 및 실행 가능한 메모리 영역을 보호합니다.

void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);

이들 기술은 iOS 앱의 보안을 강화하는 데 큰 역할을 합니다. 앱 개발자들은 이러한 기술들을 활용하여 사용자의 데이터를 안전하게 보호할 수 있도록 노력해야 합니다.

참고문헌: