환영! 이 저장소는 실제 API 보안 기술에 대한이 일련의 블로그 게시물의 일부입니다. 이 시리즈는 공격자가 보유한 데이터에 액세스하는 데 사용할 수있는 다양한 악용에 대해 모바일 API 백엔드를 방어하는 프로세스를 안내합니다. 이 데모 시나리오 에서이 공격을 통해 시스템의 실제 사용자는 회사를 희생하면서 불공정 한 비즈니스 이점을 얻을 수 있습니다.
이 저장소는 Shipfast 스토리를 설명하는 데 사용되는 세 가지 구성 요소를 모두 보유합니다.
우리는 3 개의 프로젝트를 동일한 저장소에 보관하고 블로그 시리즈 진행의 모든 단계를 포함하도록 코드를 구성했습니다. 우리는 이것이 전체적으로 이해하기 쉽기를 바랍니다.
첫 번째 블로그 게시물에서 장면을 설정 한 후, 연속적인 항목은 적절한 경우이 Github 저장소의 코드 링크를 사용하여 보안 측정이 어떻게 강화 될 수 있는지 (또는 우회)를 보여줍니다. 블로그 시리즈는 각각 논의중인 주요 보안 방법을 참조하여 요약 될 수 있습니다.
당사는 다운로드 및 설치할 수 있도록 두 서비스 및 APK의 무료 배포를 제공하므로 블로그를 읽을 때 작업 할 수 있습니다. 다음 섹션에서는 우리가 배포 한 서비스, 제공하는 앱,이 저장소에서 관련 코드를 찾을 수있는 위치 및 각 블로그 게시물의 변경 사항에 대한 간략한 요약을 제공합니다.
Shipfast API 코드는 서버/Shipfast-API 폴더에서 찾을 수 있습니다. 이 코드는 클라우드에 배포되어 https://shipfast.demo.sproov.io에서 사용할 수 있습니다.
Shipfast API는 블로그 스토리를 따르기 위해 v1 에서 v4 로 버전을 보유하고 있으며 다음 URL을 사용하여 각 단계에 액세스 할 수 있습니다.
이 저장소의 릴리스 페이지에는 각 단계마다 APK가 포함되어 있습니다. 그들은 당신이 당신의 Android 장치에 한 번에 모든 것을 설치할 수 있도록 설정됩니다 (현재 iOS는 미안하지 않음).
앱 코드는 모두 Androidstudio 프로젝트 인 App/Android/Kotlin/Shipfast입니다.
우리는 각 버전의 앱에서 다른 색 구성표를 사용하여 실행중인 것을 신속하게 식별 할 수 있습니다.
색상은 특별한 의미가 없지만 분명히 녹색이 최고입니다.
Rogue Web Service 인 Shipraider는 사악한 해적에 의해 Shipfast 운전자가 Shipfast 고객의 만족도를 활용하도록 돕기 위해 설립되었습니다. 코드는 서버/Shipraider-Rogue-Web 폴더에서 찾을 수 있습니다.
웹 사이트의 각 버전은 다른 도메인에서 제공됩니다.
Shipraider 웹 사이트는 모바일 앱과 동일한 색 구성표를 따라 버전을 구별합니다.
아래에서는 블로그 시리즈에 사용 된 기술에 대한 간략한 개요를 제공하여 관련 코드 라인 및 관련 블로그 게시물에 대한 링크로 API를 잠그기 위해 API를 잠그십시오.
개발자가 API 서버에 요청하는 내용을 식별하기 위해 사용하는 가장 일반적인 방법은 요청 헤더에서 긴 문자열을 사용하는 것입니다. 대부분 Api-Key 라고합니다. 첫 번째 블로그 게시물을 참조하십시오.
API 키는 서버와 클라이언트 모두에서 구현하기가 매우 간단합니다. 이 앱 코드는 모든 요청에 키를 추가하고 서버는이 코드에서 표시된대로 간단한 헤더 확인으로 요청을 확인합니다.
불행히도 API 키 보호를 우회하는 것도 쉽습니다. 모든 요청에 대해 비밀로 전달되기 때문입니다. 이 시리즈의 두 번째 블로그는 MITM (Man in the Middle) 공격으로 API 키를 추출하는 방법을 보여줌으로써 시작됩니다. 그런 다음 키가 Shipraider 웹 사이트에 추가되어 Shipfast API에 대한 요청에 사용됩니다.
보호를 향상시키기 위해 두 번째 블로그 게시물은 HMAC를 소개하여 API 요청에 서명하여 납치 또는 변조를 방지합니다. 비밀 부분 이 클라이언트에서 서버로 명시 적으로 전송되지 않으므로 API 키보다 낫습니다.이 버전에서는 코드에 정적으로 내장되어 있습니다.
HMAC 구현은 API 키 구현보다 조금 더 정교하지만 여전히 간단합니다. API 서버 구현 의이 코드와 모바일 앱 구현에 대한이 코드를 확인할 수 있습니다.
그러나 HMAC 비밀이 하드 코딩 된 경우 공격자가 추출하기 쉽습니다. 세 번째 블로그 게시물은 오픈 소스 바이너리 분석 도구를 사용하여 HMAC 비밀과 요청에 서명하는 데 사용되는 관련 알고리즘을 공개하여이를 보여줍니다. 이것들이 Shipraider 코드에 복사되면 Rogue 웹 사이트가 다시 일어나고 실행할 수 있습니다.
두 번째 공격 시나리오는 HMAC 알고리즘에 정적 비밀을 사용하는 것이 약점임을 보여주었습니다. 다음 방어는 역동적 인 비밀을 사용하는 것입니다. 런타임에 계산 된 것. 세 번째 블로그 게시물은 정적 비밀을 동적 데이터와 결합하여 HMAC 알고리즘을 초기화 할 동적 비밀을 생성하는 방법을 설명합니다.
모바일 앱의 구현은 이러한 코드 라인에서 볼 수 있으며 API 서버에 해당하는 것은 여기에서 볼 수 있습니다.
런타임시 HMAC 비밀을 계산하면 우회하기가 어렵지만 불가능하지는 않습니다. 공격자는 이제 Shipraider 웹 사이트에서 동작을 재현하기 위해 더 큰 코드 섹션을 이해해야합니다. 네 번째 블로그 게시물에는 이에 대한 몇 가지 접근 방식이 나열되어 App Repackaging 및 Android Studio Debugger를 사용하여 자세한 예제를 제공합니다. 다시, 공격자는 Shipraider에 동등한 코드를 작성하여 Shipfast API를 계속 사용할 수 있습니다.
네 번째 블로그 게시물은 시리즈의 최종 보안 측정을 소개합니다. 모바일 앱 증명은 Approov에서 구현 된 API 보안 개념입니다. 간단히 말해서, APTRoov는 API에 대한 액세스를 활성화하기 전에 전체 앱과 실행되는 환경을 확인합니다. 앱이 핵심입니다 . API 액세스가 앱의 합법적 인 인스턴스로 고정되어 있다는 확신을 갖습니다. 이 접근법은 제품 개요 페이지 및 관련 백서에 자세히 설명되어 있습니다.
Approov 통합은 모바일 앱 개발자에게는 간단합니다. [QuickStart 통합 예제]]]]]] (https://pretroov.io/docs/latest/Approov-integration-examples/mobile-app/)을 사용하여 Approoov SDK를 빌드에 추가하여 프로세스 속도를 높이고 SDK에 전화하여 API 요청에 포함하도록 alproov 토큰을 얻으십시오. shipfastapp.kt의 shipfast 앱에서 이것을 볼 수 있습니다. // *** UNCOMMENT THE CODE BELOW FOR APPROOV *** 앞에있는 줄을 검색하십시오.
API 서버 통합도 간단합니다. API 요청에 응답하기 전에 많은 JWT 라이브러리 중 하나를 사용하여 Approov 토큰을 확인하십시오. Shipfast API는 Express-JWT 노드 패키지를 사용하여 checkApproovToken 콜백으로 Approov 토큰을 확인합니다.
고급 사용법 문서는 Shipfast 및 Shipraider 서비스를 구성하는 각 구성 요소에 대한 빌드 및 배포 단계를 설명합니다. 블로그 시리즈를 따르려면 일반적으로 Approov 팀이 배포하고 유지 관리하는 서비스 및 앱을 사용하는 것으로 충분합니다.이 경우 해당 문서를 따를 필요가 없습니다. 그러나 마지막 블로그 게시물의 끝에 설명 된 옵션 펜 스팅 챌린지를 시도하면 필요합니다.
전체적으로 블로그 시리즈는 요청이 합법적 인 출처에서만 제공되도록 API 보안의 점진적인 개선을 보여줍니다. 이 저장소의 블로그와 코드는 API 개발에 일반적으로 사용되는 일부 보호 메커니즘을 쉽게 우회하는 방법을 보여주는 데 사용됩니다. Approov 통합에서 정점에 이르면 Shipfast API가받은 검증 된 요청에 대해 최고 수준의 신뢰를 제공합니다. Approov 솔루션을 더 깊이 탐색하려면 다음 링크 중 하나를 점프 오프 포인트로 시도해보십시오.