hacktricks/mobile-pentesting/android-app-pentesting/webview-attacks.md

10 KiB
Raw Blame History

웹뷰 공격

htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요 htARTE (HackTricks AWS Red Team Expert)!

HackTricks를 지원하는 다른 방법:

WebView 구성 및 보안 가이드

WebView 취약점 개요

Android 개발의 중요한 측면 중 하나는 WebView의 올바른 처리입니다. 이 가이드는 WebView 사용과 관련된 위험을 완화하기 위한 주요 구성 및 보안 관행을 강조합니다.

WebView 예시

WebView에서의 파일 액세스

기본적으로 WebView는 파일 액세스를 허용합니다. 이 기능은 Android API 레벨 3 (컵케이크 1.5)부터 사용 가능한 setAllowFileAccess() 메서드에 의해 제어됩니다. android.permission.READ_EXTERNAL_STORAGE 권한을 가진 애플리케이션은 파일 URL 스킴(file://path/to/file)을 사용하여 외부 저장소에서 파일을 읽을 수 있습니다.

사용되지 않는 기능: 일반 및 URL에서 파일 액세스

  • URL에서의 일반 액세스: 이 사용되지 않는 기능은 파일 URL에서의 교차 출처 요청을 허용했으며 잠재적인 XSS 공격으로 인한 중대한 보안 위험을 초래했습니다. Android Jelly Bean 이상을 대상으로 하는 앱의 기본 설정은 비활성화(false)되어 있습니다.
  • 이 설정을 확인하려면 getAllowUniversalAccessFromFileURLs()를 사용하세요.
  • 이 설정을 수정하려면 setAllowUniversalAccessFromFileURLs(boolean)를 사용하세요.
  • URL에서 파일 액세스: 이 또 다른 사용되지 않는 기능은 다른 파일 스킴 URL에서의 콘텐츠 액세스를 제어했습니다. 일반 액세스와 마찬가지로, 보안을 강화하기 위해 기본 설정은 비활성화되어 있습니다.
  • 확인하려면 getAllowFileAccessFromFileURLs()를 사용하고, 설정하려면 setAllowFileAccessFromFileURLs(boolean)를 사용하세요.

안전한 파일 로딩

자산 및 리소스에는 액세스할 수 있지만 파일 시스템 액세스를 비활성화하려면 setAllowFileAccess() 메서드를 사용합니다. Android R 이상에서 기본 설정은 false입니다.

  • getAllowFileAccess()로 확인하세요.
  • setAllowFileAccess(boolean)로 활성화 또는 비활성화하세요.

WebViewAssetLoader

WebViewAssetLoader 클래스는 로컬 파일을 로드하는 현대적인 방법입니다. 로컬 자산 및 리소스에 액세스하기 위해 http(s) URL을 사용하며, 동일 출처 정책을 준수하여 CORS 관리를 용이하게 합니다.

loadUrl

이것은 웹뷰에서 임의의 URL을 로드하는 데 사용되는 일반적인 함수입니다.

webview.loadUrl("<url here>")

자바스크립트 및 인텐트 스키마 처리

  • JavaScript: 웹뷰에서 기본적으로 비활성화되어 있으며 setJavaScriptEnabled()를 통해 활성화할 수 있습니다. 적절한 보호장치 없이 JavaScript를 활성화하는 것은 보안 취약점을 유발할 수 있으므로 주의가 필요합니다.
  • 인텐트 스키마: 웹뷰는 intent 스키마를 처리할 수 있으며, 신중하게 관리되지 않으면 취약점을 악용할 수 있습니다. 한 예로 노출된 WebView 매개변수 "support_url"을 악용하여 교차 사이트 스크립팅(XSS) 공격을 실행할 수 있는 취약점이 있었습니다.

취약한 WebView

adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url "https://example.com/xss.html"

{% endcode %}

자바스크립트 브릿지

Android에서는 WebView에서 JavaScript을 사용하여 네이티브 Android 앱 기능을 호출할 수 있는 기능을 제공합니다. 이는 addJavascriptInterface 메소드를 활용하여 구현되며, 이는 JavaScript를 네이티브 Android 기능과 통합하는 _WebView JavaScript 브릿지_로 표현됩니다. 이 메소드는 WebView 내의 모든 페이지가 등록된 JavaScript 인터페이스 객체에 액세스할 수 있도록 허용하기 때문에 민감한 정보가 이러한 인터페이스를 통해 노출될 경우 보안 위험이 발생할 수 있으므로 주의가 필요합니다.

  • Android 버전 4.2 미만을 대상으로 하는 앱의 경우 극도의 주의가 필요합니다. 이는 악의적인 JavaScript를 통해 원격 코드 실행을 허용하는 취약점으로 인해 발생할 수 있습니다. 이 취약점은 reflection을 이용합니다.

자바스크립트 브릿지 구현

  • JavaScript 인터페이스는 네이티브 코드와 상호 작용할 수 있으며, 다음 예제에서는 클래스 메소드가 JavaScript에 노출되는 방법을 보여줍니다:
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
  • JavaScript Bridge는 WebView에 인터페이스를 추가하여 활성화됩니다:
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
  • 자바스크립트를 통한 잠재적인 악용, 예를 들어 XSS 공격을 통해 노출된 자바 메소드를 호출할 수 있습니다:
<script>alert(javascriptBridge.getSecret());</script>
  • 위험을 완화하기 위해 JavaScript 브릿지 사용을 제한하여 APK와 함께 제공된 코드로만 로드되도록하고 원격 소스에서 JavaScript를 로드하지 못하게 합니다. 오래된 기기의 경우 최소 API 레벨을 17로 설정합니다.

Reflection 기반 원격 코드 실행 (RCE)

  • 문서화된 방법을 통해 특정 payload를 실행하여 reflection을 통해 RCE를 달성할 수 있습니다. 그러나 @JavascriptInterface 주석은 무단 메소드 액세스를 방지하여 공격 표면을 제한합니다.

원격 디버깅

  • Chrome 개발자 도구를 사용하여 원격 디버깅이 가능하며 WebView 콘텐츠 내에서 상호 작용 및 임의의 JavaScript 실행이 가능합니다.

원격 디버깅 활성화

  • 응용 프로그램 내 모든 WebView에 대해 원격 디버깅을 활성화하는 방법:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
  • 애플리케이션의 debuggable 상태에 따라 디버깅을 조건부로 활성화하려면:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}

임의 파일 유출

  • XMLHttpRequest를 사용하여 임의 파일을 유출하는 방법을 보여줍니다:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText);
}
}
xhr.open('GET', 'file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db', true);
xhr.send(null);

참고 자료

제로부터 영웅이 될 때까지 AWS 해킹 배우기 htARTE (HackTricks AWS Red Team Expert)!

HackTricks를 지원하는 다른 방법: