Android/InsecureBankv2

인시큐어뱅크 앱 취약점 - 중요 정보 메모리 노출 취약점

박연준 2023. 7. 3. 21:17

인시큐어뱅크 앱 취약점 - 중요 정보 메모리 노출 취약점

취약점 소개

앱에서 사용하는 중요한 정보들은 암호화 되어 있으나 메모리로 올라오게 되면 평문으로 노출되는 취약점이다.

중요한 정보가 암호화되어 있더라도 메모리에 올라가면서 복호화 되는 것을 이용한다.

메모리 영역은 변수나 객체가 저장되는 영역으로 스택과 힙 메모리 영역으로 구분된다.

참조 타입은 값이 저장된 위치를 가리키는 변수를 말하며 해당 객체나 배열이 저장된 메모리 영역이 노출될 가능성이 있다. 또한 객체의 생성과 삭제를 관리하기 위해 가바지 컬렉터(GC)가 필요한데 이러한 상황에서 메모리 노출 취약점이 발생할 수 있다.

취약점 진단

다음 코드는 중요 정보인 비밀번호를 String 객체에 저장한다.

 

String은 불변하는 객체이기 때문에 내부적으로 사용되는 문자열 데이터는 변경되지 않는다. 즉, 가비지 콜렉터가 실행되더라도 객체의 참조만 삭제하고 메모리에 존재하는 실제 데이터는 삭제되지 않는다.

중요 정보를 String 객체에 저장하여 사용 후 다른 문자열로 덮어씌우는 방식으로 구현된 경우도 취약하다.

해당 객체가 참조하는 메모리 영역에 특정한 값으로 덮어씌우는 방식은 이전에 해다 변수에 할당된 참조 값이 여전히 유효한 상태로 남아있을 수 있다.

 

위 코드의 경우 기존에 존재하던 Secpasswd123은 유지가 된 상태로 이 값을 참조하던 String 객체만 삭제되며 Secpasswd456 문자열을 참조하는 새로운 STring 객체가 생성된다.

대응 방안

  1. 중요 정보를 처리할 때 char 배열에 저장하고 사용 후에 초기화한다.
  2. 키보드 보안 솔루션을 적용하여 메모리에 키 입력 정보가 적재되는 것을 방지한다.