"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Android 앱 보안 테스트 수행 방법: 개발자 및 테스터를 위한 가이드

Android 앱 보안 테스트 수행 방법: 개발자 및 테스터를 위한 가이드

2024-08-10에 게시됨
검색:939

소개

Android 휴대폰의 열렬한 팬으로서 휴대폰이 갑자기 떨어지면 "맙소사!"라는 생각이 가장 먼저 들겠습니까? 아니면 Google Pay나 Paypal에 있는 돈이 안전하지 않다고요? 최신에 다운로드한 앱에서 지루한 각종 광고는 물론 예상치 못한 알림까지 뜬다면 피싱 시도라고 생각하고 즉시 앱을 삭제하시겠습니까?

Android 보안 취약점에 대한 인식이 부족한 사용자에게 앱이 안전한 환경을 제공하도록 어떻게 보장할 수 있나요? Android 생태계의 보안 취약점은 무엇입니까? 새로운 Android 보안 테스트 기술을 어디에서 살펴볼 수 있나요? 보안 테스트 프로세스를 어떻게 간소화할 수 있나요?

일반적인 Android 보안 취약점

첫째, Android 운영 체제의 오픈 소스 개발 장점은 Android 시스템의 샌드박스 시스템(예: 가상 머신)과 같은 개발 시 내재된 보안 문제도 숨깁니다. 그러나 기본 계층에는 취약점이 하나씩 있어 악성 프로그램(또는 도구)이 루트 액세스 권한을 얻고 샌드박스의 제한 사항을 깨뜨릴 수 있습니다. PC 시대와 마찬가지로 절대적으로 안전한 PC 운영 체제는 없습니다. 모바일 인터넷 시대에도 절대적으로 안전한 모바일 운영체제는 없습니다. Android 오픈소스 생태계의 보안 위험은 피묻은 경보종과 같아서 모든 Android 개발자의 마음을 강타합니다.

둘째, Android APP/SDK 개발 과정에서 발생하는 보안 위험은 알려지지 않은 블랙홀과 같습니다. 보안 대결의 종점은 어디인지, 공격자는 누구인지, 터미네이터는 누구인지, 이들을 어떻게 방어해야 할지 결코 알 수 없습니다.

마지막으로, 사용자 수준에서 일반적이고 인식할 수 있는 보안 동작 취약점은 무엇입니까?

Android 앱과 SDK 모두 어느 정도 보안 취약점을 갖고 있습니다. 아마도 어느 날 귀하의 애플리케이션이 위의 보안 취약점 중 하나의 영향을 받을 수도 있습니다. 공교롭게도 최근 Android SDK를 테스트하던 중 Android 애플리케이션 구성 요소와 관련된 보안 취약점을 발견했습니다. 이 예시를 바탕으로 Android SDK 보안 테스트 방법, 기법, 프로세스를 요약합니다.

Android 앱의 보안 테스트 예

취약점 원인 개요
애플리케이션(이하 애플리케이션)의 선택적 구성 요소인 Android SDK는 Java 계층 서비스가 활성 상태인지 모니터링하기 위해 로컬에서 임의의 포트를 열었습니다. 그러나 자바 레이어는 컴포넌트와 통신할 때 입력 매개변수를 엄격하게 확인하지 않기 때문에 리눅스 시스템의 "system()" 함수 호출 시 공격코드가 가득 차고 악성 공격이 발생할 가능성이 있다.

다음 스크린샷은 시뮬레이션 포트가 공격받은 후 통신 중에 애플리케이션 구성 요소 의도가 URL 콘텐츠를 수정하고 Webview에 잘못된 코드가 표시되는 것을 보여줍니다.

Garbled code

취약점으로 인한 잠재적인 보안 위험

Android 앱의 4가지 주요 애플리케이션 구성요소인 활동, 수신자, 서비스 및 콘텐츠 제공자와 IPC용 인텐트를 통해 통신하는 애플리케이션 구성요소의 보안 역할에 대해서는 여기서 자세히 논의하지 않습니다. 위 예시의 구성요소 관련 취약점을 활용하여 다음 다이어그램은 단말 APP 측과 관련된 공격 차원을 보여줍니다.

Attack dimensions

Android 앱의 로컬 애플리케이션 환경으로 인해 네트워크 소켓에는 본질적으로 세분화된 인증 및 권한 부여 메커니즘이 부족합니다. 따라서, 안드로이드 클라이언트를 서버로 사용하고, 역코드를 이용하여 애플리케이션의 로컬 랜덤 포트번호를 검색하여 해당 포트로 적극적으로 공격을 가하게 되면 다음과 같은 보안 위험이 도사리고 있을 것이다.

  1. 로컬 명령 실행: 내장된 애플리케이션의 패키지 이름을 애플리케이션 자체로 지정하고 컴포넌트 이름을 애플리케이션의 활동으로 지정하면 해당 애플리케이션의 모든 활동을 수행할 수 있습니다. 보호된 비수출 활동을 포함하여 시작되어 보안 위험이 발생합니다. 예를 들어 HTTP 요청을 통해 내보내지 않은 여러 활동을 하나씩 시작하면 서비스 거부 취약점이 발견될 수 있습니다.

  2. 애플리케이션 권한을 수정하는 명령 제어: 오픈 소켓 포트를 통해 Android 애플리케이션 구성 요소를 시작하려는 의도를 전달한 다음 해당 권한으로 활동 시작 및 브로드캐스트 전송과 같은 작업을 실행합니다. 공격받은 애플리케이션. 소켓을 통해 전달된 인텐트가 보낸 사람의 신원과 권한에 대해 세부적인 검사를 수행할 수 없기 때문에 Android에서 애플리케이션 구성 요소에 대해 제공하는 권한 보호를 우회하고 내보내지 않은 권한 보호 애플리케이션 구성 요소를 시작할 수 있어 보안 위험이 발생할 수 있습니다.

  3. 민감한 정보 공개, 휴대폰 제어: 로컬 서비스는 UDP 포트를 열어 수신하고 특정 명령을 받은 후 휴대폰의 민감한 정보를 반환할 수 있습니다. 예를 들어, 바이두 휴대폰 집사는 휴대폰의 secretKey를 원격으로 관리할 수 있으며, 그러면 무단 공격자가 네트워크를 통해 휴대폰을 완전히 관리할 수 있습니다.

Android 보안 테스트 실행

Android 보안 강화 버전 최적화

  1. 네이티브 및 Java 레이어 모두에서 시스템 명령 및 특수 문자 필터링에 대한 검사를 추가합니다.

  2. JNI Watchdog 데몬 프로세스에 대한 소켓 통신을 암호화합니다.

  3. 알림을 클릭할 때 악성 링크로 리디렉션되는 것을 방지하기 위해 로컬 알림 기능의 URL, 인텐트 및 활동에 대한 기능 확인을 추가합니다.

  4. 앱 로컬 저장소의 패키지 이름 저장 위치를 ​​변경합니다.

  5. 온라인 구성 기능을 추가합니다.

이러한 보안 강화 최적화를 위한 중요한 요구 사항입니다.

특별 보안 테스트

기존 시스템 테스트나 성능 테스트를 따르는 경우 변화하는 요구 사항에 따라 순방향 테스트만 수행하면 됩니다. 그러나 보안 테스트를 위해서는 SDK 보안의 견고성을 보장하기 위해 역특수 테스트, 다양한 보안 공격 방법 시뮬레이션, 수정된 지점에 대한 테스트 케이스 분기가 필요합니다.

Android 정기 보안 회귀 테스트

  1. 개인정보 데이터: 외부 저장소 보안 및 내부 저장소 보안; 사용자 이름, 비밀번호, 채팅 기록, 구성 정보 및 기타 개인 정보가 로컬에 저장되고 암호화되어 있는지 확인하십시오. 정보를 사용하기 전에 정보의 무결성을 확인하십시오.

  2. 권한 공격: 앱의 디렉토리를 확인하고 앱의 권한이 다른 그룹 구성원에게 읽거나 쓰는 것을 허용하지 않는지 확인하세요. 시스템 권한이 공격을 받고 있는지 확인하세요.

  3. Android 구성 요소 권한 보호: 앱 내부 구성 요소가 타사 프로그램에 의해 임의로 호출되는 것을 방지합니다. 활동이 타사 프로그램에 의해 호출되는 것을 방지하고 활동 하이재킹을 방지합니다. 방송 수신 및 전송 보안을 보장하고, 앱에서 전송된 방송만 수신하며, 제3자가 전송된 콘텐츠를 수신하지 못하도록 방지합니다. 악의적으로 서비스를 시작하거나 중지하는 것을 방지합니다. 콘텐츠 제공자 작업 권한을 확인하세요. 구성 요소를 외부에서 호출해야 하는 경우 호출자에게 서명 제한이 적용되었는지 확인하세요.

  4. 업그레이드: 하이재킹을 방지하려면 업그레이드 패키지의 무결성과 적법성을 확인하세요.

  5. 타사 라이브러리: 타사 라이브러리를 사용하는 경우 업데이트를 추적하고 보안을 확인하세요.

  6. ROM 보안: 이식된 광고, 트로이 목마 등의 추가를 방지하려면 공식 ROM 또는 권위 있는 팀에서 제공하는 ROM을 사용하세요.

  7. 크래킹 방지 대책: 디컴파일에 대응하여 디컴파일 도구를 사용한 디컴파일을 불가능하게 하거나 디컴파일 후 올바른 디스어셈블리 코드를 얻을 수 없도록 합니다. 코드 난독화 및 암호화를 사용하여 정적 분석에 대응합니다. 디버거 및 에뮬레이터를 감지하는 코드를 추가하여 동적 디버깅에 대응합니다. 서명을 확인하고 컴파일된 dex 파일의 해시 값을 확인하여 재컴파일을 방지합니다.

보안 특별 테스트 및 정기 프로세스 테스트를 완료한 후 앱의 기존 기능, 신규 버전과 이전 버전 간의 호환성, 다양한 Android 운영체제 버전과의 호환성에 대한 롤링 회귀 테스트를 수행합니다.

마무리

일반적인 성능 및 시스템 기능 테스트 사례에 비해 보안 테스트 사례에서는 사용자 보안 출현 수준, 애플리케이션 시스템 로컬 및 원격 공격 수준, 운영 체제 취약성 수준 등 Android 생태계에 대한 보다 포괄적인 이해가 필요합니다. 역공격 사고 테스트 케이스 설계에 더 중점을 둡니다.

개발의 출발점이 보안 방어라면, 테스트의 출발점은 해커 공격 마인드입니다. 공격 시나리오에 대한 테스트 사례를 설계하고 공격 테스트 기술을 구현하면 SDK 보안의 견고성이 결정됩니다.

애플리케이션에 대한 최고 수준의 보안을 보장하려면 WeTest 애플리케이션 보안 테스트 활용을 고려해 보세요. 이 서비스는 애플리케이션의 보안 문제에 대한 포괄적인 평가, 프로그램 취약점의 적시 탐지를 제공하고 취약점 복구를 지원하는 코드 복구 예제를 ​​제공합니다.

WeTest를 신뢰하여 잠재적인 위협으로부터 애플리케이션을 보호하고 안전한 사용자 경험을 유지하세요.

Image description

릴리스 선언문 이 글은 https://dev.to/wetest/how-to-do-android-app-security-testing-a-guide-for-developers-and-testers-3j8b?1 에 재현되어 있습니다. 침해가 있는 경우 , [email protected]로 문의해주세요.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3