[모의해킹] 모바일 DeepLink 도용 취약점

cielo ru·2024년 7월 28일
0

모의해킹

목록 보기
9/14
post-thumbnail

➰ 취약점 개요

문자로 온 링크를 클릭 한번 잘못했다가 돈이 빠져나가거나 개인정보가 유출된다는 말을 들어본 적 있을 것이다.

이에 활용되는 기술이 '딥링크(DeepLink)'인데, 딥링크는 모바일 웹상에 있는 링크나 그림을 클릭할 경우 기기 내 관련 앱이나 사전에 정의된 특정 웹페이지가 실행되는 모바일 기술이다. 클릭을 할 때 특정 웹페이지를 악성 링크로 접속하도록 조작하여 사용자 개인정보를 조회하거나 계좌이체를 하며 악용한다.

❓딥링크 취약점이 많아지는 이유
모바일 애플리케이션 사용이 폭발적으로 증가하면서 다양한 기능과 콘텐츠에 빠르게 접근할 수 있도록 DeepLink를 많이 사용하게 되었다. 이로 인해 DeepLink를 사용하는 애플리케이션의 수가 증가하면서 취약점이 발생할 가능성도 높아졌다.

실제로 이메일, SMS, 소셜 미디어 광고 등에서 DeepLink를 많이 사용하는데, 사용자가 클릭 시 앱의 특정 프로모션 페이지로 바로 이동할 수 있다. 또한 푸시 알림을 통해 사용자가 알림을 클릭하면, 앱의 특정 페이지로 바로 이동하게 하여 관련 정보를 제공하거나 특정 액션을 취하게 할 수 있다. 이 과정에서 활용되는 것이 모두 딥링크이다.

DeepLink는 특정 콘텐츠나 기능에 빠르게 접근할 수 있도록 하는 유용한 기능이지만, 이를 악용하여 악성 링크를 통해 사용자에게 피해를 줄 수 있다.

🌱 쉽게 말하면 어플 광고 같은 것들이다. 어플에 있는 정보를 보기 위해서 클릭을 하면 어플 먼저 설치하라면서 설치 페이지로 이동시키는 것들을 딥링크로 이해하면 된다. 그 링크를 악용하는 것이 딥링크 도용 취약점이다!

➰ 취약점 내용

공격자에 의해 조작된 URI를 이용자의 사용환경(웹뷰, 애플리케이션 등)에서 접속할때 개발자가 의도하지 않은 기능 동작 여부를 점검한다.

양호

위는 딥링크가 활용된 예시이다. '열기' 버튼을 눌렀을때 트립닷컴 다운로드 페이지로 가야 정상이지만 경로를 의도하지 않은 경로로 수정하여 열기 버튼을 눌렀을때 액션이 취해지거나 이동된다면 취약이다.

취약

** 트립닷컴 페이지는 이해를 위한 예시이고, 실제로 취약한 사이트가 아니다.

열기 버튼을 눌렀을 때 계좌에 돈이 빠져나가도록 액션을 취했다. 돈이 빠져나갔으므로 취약이다.

➰ 점검기준

🌱 양호

  • DeepLink를 통해 접근하는 모든 기능 및 데이터는 인증 및 권한 검사를 철저히 수행하며 적절한 에러 메시지를 반환한다.

  • DeepLink를 통해 접근할 수 있는 URL은 화이트리스트로 관리하고, 검증된 링크만 허용한다.

  • DeepLink가 민감한 데이터를 처리하거나, 중요한 기능을 호출할 때 적절한 보안 검증을 거친다. 적절한 검증을 거치지 않은 상태에서 접근 시도 시 에러 메시지를 반환한다.

💊 취약

  • DeepLink를 통해 접근하는 기능 및 데이터에 대해 인증 및 권한 검사가 이루어지지 않고 접근이 가능하다.

  • DeepLink URL이 화이트리스트로 관리되지 않고, 모든 링크가 허용된다.

  • DeepLink의 파라미터 검증이 부족하여, 인젝션 공격이나 기타 악성 행위가 발생했을 때 접근이 가능하다.


➰ 점검 방법

  1. 앱에 등록된 Custom scheme을 조작하여, URI 접속을 통해 특정 activity 호출을 통한 인증우회 ,임의페이지 리다이렉션, Javascript Code 실행이 가능 여부를 점검한다.

딥링크 구성 예시
> schema://host.name/path/to/endpoint?

쿠팡은 coupang://category/1/product/12345678 이렇게 되어 있으며 각 어플마다 맨 앞의 SCHEME가 다르다.

  1. 인텐트 스키마를 도용하여, 내부 파일에 접근, webview 조작 등 임의 기능을 실행 할 수 있는지를 점검한다.

점검실습

  1. AndroidManifest 에 명시된 딥링크(http://xe1.com, https://xe1.com) 확인한다. deepLink가 설정되어 SendMoney에 연결되는 것을 확인할 수 있다.

    ** android:scheme 필드와 android:host 필드가 명시되어 있어야 함

  2. SendMoney Activity가 실행 될 때 data에서 파라미터로 account와 money라는 값을 받아오는 것을 알 수 있다.

  1. http://xe1.com?account=282838&money=500 처럼 해커의 account와 원하는 금액을 넘기는 URL를 만들고 Short URL을 이용하여 URL을 감춘 뒤 피싱 메세지를 보낸다.
 short url 만드는 주소: https://www.shorturl.at/
  1. 만들어진 shortURL를 실행한다.
 https://shorturl.at/qRUW7
  1. Oh Bank를 통해 열리게 되어 SendMoney가 작동하여 해커의 account로 인증도 없이 이체가 되는 것을 확인한다.

** Deeplink는 도용할 수 있는 방법이 점점 많아지고 있다. 따라서 점검 실습도 다양하다. 그중에서 가장 간단한 예시를 들었다. 추가로 필요한 부분은 DeepLink 메뉴얼을 참고하길 바란다.

➰ 대응 방안

  • 공격자가 임의의 URI를 로드할 수 없도록 WebView에 로드하는 URI 또는 Domain에 대한 추가 검증을 진행한다.

  • 딥링크 URI 파싱 시 취약한 함수 사용을 금지 하고, getQueryParameter 등의 함수를 활용하여 사전에 정의된 인자 값을 파싱하도록 조치한다.
    - 필터링 없이 가져오는 함수 : split, getHost, substring
    - 사전에 정의된 인자 값을 파싱하는 함수 : getQueryParameter

  • 인가된 URI에만 자바인터페이스 권한을 부여한다.

  • 도메인 검증을 이용한 우회를 방지한다.
    - uri.startsWith 함수를 통해 URI를 검증한다.

  • 서브 도메인 악용을 막기 위해 슬래쉬(/)로 끝나도록 도메인명 작성

  • URI.parse 함수 사용하는 경우 특수 문자를 필터링한다.


➿ 경험담

인턴 기간 동안 가장 기억에 남는 취약점이 바로 DeepLink이다. 당시 링크 접속을 통한 피싱 사례가 많이 나타났고, 2023년에 처음으로 전자금융기반시설 취약점 목록에 추가되었기 때문에 각 공공기관에서도 딥링크 취약점을 좀 더 자세히 봐달라고 할 정도였다. 모든 앱의 apk 파일을 jadx 로 풀어서 딥링크가 있는 Activity를 모두 확인했다..ㅎㅎ

실제로 점검을 진행했을 때 딥링크가 포함되어 있는 액티비티가 많았고 많이 활용되고 있었다. 딥링크를 이용한 악용사례가 점점 다양해지고 있어서 완전히 방지하기란 어려울 것 같다. 그래도 URI 파싱을 할 때 필터링을 하거나 취약한 함수 사용을 금지함으로써 방지할 수 있는 부분은 방지하고, 금융권에서 딥링크로 인해 악용 사례가 나타나지 않길 하는 마음으로 점검을 진행했던 것 같다. 추후에 딥링크 기법에 대해서 좀 더 공부해보고 싶다.


➰ 참고

profile
Cloud Engineer & BackEnd Developer

0개의 댓글