기술보안/Android

[DIVA-android] DIVA - 13. 입력 값 검증 부재 파트 3(INPUT VALIDATION ISSUES - PART 3)

kimcogi 2024. 2. 12. 21:19

DIVA 앱을 설치 후 실행하면 13개의 문제가 나오게 되는데 이 중 마지막 문제인 13번 문제 입력 값 검증 부재 파트 3(INPUT VALIDATION ISSUES - PART 3) 문제를 클릭한다

 

문제를 들어가게 되면 Code를 입력할 수 있는 창과 함께 memory corruption vulneability라고 힌트가 표기된 것을 보아하니 스택 오버플로우 문제임을 추측할 수 있다

 

임의의 값(1234)을 입력한 결과 에러 메시지(Access denied)가 표시되는 것을 확인할 수 있다

 

jadx를 이용하여 13번 문제가 해당되는 코드인 "InputValidation3Activity"에 접근한 결과 12번 문제에 해당되는 코드인 "Hardcode2Activity"와 매우 흡사하며, 다른 점을 찾자면 "access" 함수가 아닌 "initiateLaunchSequence" 함수를 사용한 정도 일듯 하다

 

힌트에서 오버플로우 문제로 추측할수 있도록 적어뒀기 때문에 "A" 문자열을 40개 입력 시도 한다

 

"A" 문자열을 40개 입력 시 앱이 중지되는 것을 확인할 수 있다

 

logcat을 이용하여 해당 앱에 대한 에러 메시지를 살펴본 결과 "SIGSEGV(세그먼트 폴트)"에러가 발생하였고 eip 레지스터값이 41414141 인 것을 확인할 수 있다

즉 오버플로우에 관련된 문제임이 확실해 진다

 

해당 DIVA 앱 내 제공된 소스코드를 확인해 보는 것이 취약점이 존재하는지에 대한 여부를 확인할 수 있는 가장 좋은 방법이므로 "divajni.c" 파일을 가져와 소스코드를 확인해 본다

"divajni.c" 파일을 확인해 본 결과 취약점은 아래와 같이 보인다

  • strcpy 함수를 사용하는 것
  • CODESIZEMAX의 값이 20으로 지정되어 20을 초과하는 값을 입력할 시 오버플로우가 발생될 수 있는 취약점

strcpy 함수는 C언어에서 문자열을 복사하는 데 사용되는 함수로 "strcpy_s", "strncpy"와 다르게 strcpy함수는 버퍼의 크기를 확인하지 않고 문자열을 복사하기 때문에 오버플로우 취약점이 발생할 수 있는 취약점이 존재한다

위 코드에서는 initiateLaunchSequence 함수 코드 내에서 strcpy 함수를 이용하여 사용자가 입력한 값을 "code" 변수에 복사해서 실제 변수인 CODE와 비교하고 있는 내용이 코딩되어 있는데, 사용자 입력값이 저장되는 "code" 변수는 CODESIZEMAX"에 의해 20 bytes로 할당 된 상태이다

문자열을 20bytes 이상 입력하였을 시 문자열을 복사할 때 버퍼의 크기를 확인하지 않는 strcpy 함수로 복사가 되었기 때문에 오버플로우가 발생된 것으로 볼 수 있는 문제이다

 

<참고>

 

strcpy() — 스트링 복사

형식 #include char *strcpy(char *string1, const char *string2); 설명 strcpy() 함수는 끝나는 널 문자를 포함하여 string2를 string1에서 지정한 위치로 복사합니다. strcpy() 함수는 널로 끝나는 스트링에서 작동합니

www.ibm.com

 

KISA 한국인터넷진흥원

 

www.kisa.or.kr

 

반응형