안녕하세요! 오늘은 '취약한 웹 뷰' 취약점에 대하여 포스팅 해보려 합니다!
['취약한 웹 뷰' 취약점이란?]
> 웹 뷰는 안드로이드 개발 시 주로 웹 브라우저에서 보이는 화면을 표시하거나 웹 앱 혹은 하이브리드 앱을 개발할때 사용합니다. 웹 뷰는 안드로이드 내부모듈인 웹킷 렌더링 엔진을 사용해서 자바스크립트도 지원할 수 있습니다. 문제는 이런 자바스크립트 사용을 허용하게 된다면 XSS 구문을 실행하여 악의적인 쿠키탈취 및 정보 습득이 가능하다는 취약점이 있습니다.
1. 취약점 탐색
1. 우선 AndroidManifest.xml 파일을 보시면 anroid.permission.INTERNET 이라는 권한이 설정되어 있습니다. 이 권한은 웹 뷰를 사용하기전 인터넷 사용 권한을 허락 받기 위해서 설정해놓는 것이니 웹 뷰가 어디서 쓰였는지 찾아보겠습니다.
2. 액티비티 목록을 보니 MyWebViewClient 라는 액티비티에 선언이 되어있습니다. 우선 MyWebViewClient 라는 이름의 클래스로 선언이 되고 이 클래스 안에서 lodaUrl() 함수를 통해 웹 페이지를 앱에 띄우고 있는것 같습니다. 그러면 이 클래스가 쓰인 부분이 어디인지 찾아보겠습니다.
3. MyWebViewClient 를 검색창에 치면 ViewStatement 라는 액티비티에서 사용중인것을 확인하실 수 있습니다! 그러면 ViewStatement의 소스코드를 살펴보겠습니다.
4. ViewStatement 의 소스코드를 보시면 기기 외부저장소에서 Statements_[this.uname].html 이라는 파일이 있는지 확인한 후 loadUrl() 함수를 통해서 외부저장소에서 이 html 파일을 웹 뷰로 띄워주는 것으로 확인이 됩니다.그리고 그 웹 뷰에서 자바스크립트가 사용이 가능하도록 setJavaScriptEnabled(true) 설정을 해주었습니다. 그러면 html 파일에 저희가 조작을 가할 수 있다면 웹뷰를 통한 XSS가 가능하다는 소리입니다! ... 그러면 Statements_[this.uname].html 라는 파일은 어디서 만들어지는지 한번 찾아보도록 하겠습니다.
5.검색창을 통해 확인해본 결과 DoTransfer 이라는 액티비티가 연관돼서 나온것을 확인할 수 있습니다. 그러면 DoTransfer 소스코드 내용을 확인해보겠습니다.
6. DoTransfer 소스코드중 일부입니다. 이 액티비티는 송,수신자 계좌번호와 금액을 입력하면 송금해주는 액티비티 인데, 송금내역을 Statements_[username].html 라는 파일에다가 적어주는 것으로 확인되고 있습니다. 근데 송금정보가 불확실하여 실패를 해도 그 내역을 html 파일에 기록하고 있는것으로 보입니다. 이를통해서 저희는 html 파일에 접근을 할 수 있는 취약점 포인트를 발견하였습니다.
2. 공격과정
1. Transfer 메뉴로 들어갑니다.
2. 송금페이지에서 계좌번호 입력란에 XSS 구문을 넣은후 Transfer 버튼을 눌러줍니다.
3. 송금에 실패했다는 문구가 뜨지만 html 파일에는 기록되어 있을터이니 View Statement 메뉴를 클릭하여 ViewStatement 액티비티로 이동합니다!
4. ViewStatement 액티비티에 입장하자마자 저희가 의도한 XSS 구문이 동작하는 것을 보실 수 있습니다. 이를통해 쿠키탈취 같은 악의적인 스크립트 구문을 삽입하여 공격이 가능합니다.
3. 대응방안
1. WebView 설정 중 setJavaScriptEnabled 메서드를 false로 설정
> 필요한 것이 아니라면 false 로 설정을 바꾸기만 해도 자바스크립트로 인한 공격은 막을수 있습니다.
2. 사용자 입력값 검증
> XSS 에 사용되는 구문이나 특수문자를 치환하는등 사용자의 입력값을 필터링해야 합니다.
3. HTML5 런타임 프레임워크 Crosswalk 사용
> Crosswalk는 안드로이드가 제공하는 Native API(web view)를 사용하지 않고 HTML5 앱을 개발하거나 배포할 수 있게해줍니다. web view 자체를 안사용해도 되니 이러한 취약점을 방어할 수가 있습니다.
긴 글 읽어주셔서 감사합니다!
'모바일 앱해킹(Android) > Insecure Bank' 카테고리의 다른 글
[Insecure Bank] 메모리 내 민감한 정보 저장 (0) | 2024.12.06 |
---|---|
[Insecure Bank] 애플리케이션 패칭 취약점 (0) | 2024.12.05 |
[Insecure Bank] 안전하지 않은 콘텐츠 프로바이더 접근 (0) | 2024.12.04 |
[Insecure Bank] 루팅 탐지 및 우회 (0) | 2024.12.02 |
[Insecure Bank] 액티비티 컴포넌트 취약점 (0) | 2024.11.29 |