안녕하세요 리앱팀입니다~ :)
비가 내리는 연휴가 지나니 날이 더운 한주 입니다.
오늘은 모바일 앱 위변조와 방지 솔루션에 대해서 소개하고자 합니다.
※ 정적(static) DATA
앱 또는 앱 패키지 내에 선언되어 있는 정보
ex) 접속할 서버의 URL, DB query, 패키지 내에 파일로 저장되어 있는 정보,
그 외 String으로 선언된 정보
※ 동적(dynamic) DATA
앱이나 앱 패키지 내에는 존재하지 않고 서버와의 통신을 통해 받아지는 정보
ex) 앱 동작에 필요한 정보 중 정적 DATA를 제외한 정보
앱 위변조 해킹을 하기 위해서는 일반적으로 아래와 같은 순서로 작업이 이루어져요.
1. 소스코드 분석 후 해킹할 point 타겟팅
2. 수정해야할 값이 동적 DATA라면, 앱 debugging을 통하여 해당 Method에서 사용되는 DATA를 확인
3. 타겟팅한 로직을 원하는 동작을 하도록 로직 수정 및 DATA 수정
4. 수정된 앱을 동작시킬 수 있도록 Re-Packaging
5. 해킹된 앱을 어떻게 배포할 것인지 선택하여 배포
첫번째,
소스코드의 분석 후 해킹할 로직에 대한 타겟팅입니다.
프로그래밍이나 코드 분석의 기본 지식없이 툴만을 사용하여 해킹을 하는 (낮은 기술적 난이도) 스크립트 키드 수준의 해커가 아니라면, 거의 모든 해킹의 첫번째 순서는 소스코드의 분석 이 선행됩니다.
이는 PC, 모바일을 통털어서 전 분야에 해당되는 사항이며,
특히 android 와 같은 경우에는 우리가 만들어낸 앱이 기계어가 아닌
상대적으로 분석이 쉬운 JAVA ByteCode로 구성되어 있기 때문에
소스코드의 분석 난이도가 쉽냐 어렵냐 하는 관점에서는
PC나 iOS보다 Android가 훨씬 취약한 것이 사실입니다.
하지만, 이는 어디까지나 해커의 역량에 관한 것이므로,
바이너리 코드로 이루어진 iOS가 소스분석에 절대적으로 안전하다고 판단할 수는 없습니다.
그렇지만 바이트코드의 소스분석 난이도가 낮으므로,
iOS를 공격하려는 해커의 수보다 Android를 공격하려는 해킹의 수가 많은 것은 사실입니다.
(바이너리 코드와 비이트 코드에 관해서는 다른 포스팅에서 더 이야기 하도록 하겠습니다)
두번째,
내가 원하는 해킹의 결과를 도출하기 위해서 타겟팅한 로직에서 실제 어떤 데이터 값이나 어떤 로직으로 변경해야하는지 ( field의 값을 몇으로 변경하여야 원하는 값으로 인식하는지.. 어떤 if를 뛰어 넘어야 하는지.. )를 확인하고 테스트 해봐야 합니다.
이러한 값이 소스코드 내에 static하게 정의되어 있다면 ( 정적 DATA ) 그것을 참고하여 변경하면 되지만, 만약 이러한 값이 서버와의 통신 및 다른 시스템과의 연계를 통하여
내려받는 값으로써 앱 실행시에만 알 수 있는 값이라면, 소스 코드를 변경하여 해당 값에 대한 logging을 하거나 앱을 실행하고 debugging을 통하여 서버와의 통신 정책 및 값들에 대한 정보를 받아오는 작업을 진행합니다.
세번째,
실제 내가 분석한 코드를 기반으로 어느 부분을 고치면 내가 원하는 값이 나올지에 대해 알았고 그 값을 어떤 값으로 변경해야 하는지에 대해 디버깅을 통해 알았기 때문에 직접 수정하여 적용해 보는 작업을 진행합니다.
네번째,
리패키징은 수정이 완료된 소스 코드를 기존의 정상적인 앱과 같이 보이기 위해 다시 앱의 형태로 변환하는 과정을 말합니다.
다섯번째,
이렇게 변경된 앱을 어떻게 배포할 것인지는 해커가 원하는 목적에 따라 다를 수 있습니다.
많은 기업들이 처음부터 모든 해킹에 대한 방어책을 준비하고 실행한다면 매우 좋겠지만,
이러한 작업은 현실적으로 많은 제약이 있는 중소 규모 기업에서는 여건상 곤란한 부분이 있습니다.
조금 극단적인 예를 들어볼까요?
한 명의 천재 해커가 자신의 만족으로 혼자 해킹하여 서비스의 컨텐츠를 무료로 이용한다면,
이는 한 명의 사용자가 하는 것이므로 상대적으로 서비스에 큰 피해를 주지 않을 것입니다.
또한, 이러한 사용자는 DB나 서비스 모니터링 및 법적인 규제를 통하여 제재할 수 있을 것입니다.
하지만, 해킹된 앱이 배포되고 불특정 다수가 사용하게 되면,
이러한 해킹앱 사용자를 통해 많은 정상 사용자가 피해 또는 불합리함을 느끼게 될 것이며
이는 사용자의 이탈로 이어지게 되며 해킹 앱의 사용자가 늘어날수록 서비스의 수익률 저하와 정상 사용자의 이탈은 가속화될 것입니다.
마지막으로,
보안은 한 번 준비로 마칠 수 있는 것이 아니기 때문에 현재 할 수 있는 상황에서 우선 순위를 정하고 하나씩 준비해감으로써 최종적으로는 서비스에 피해를 줄 수 있는 해킹을 성공적으로 차단하는 것을 목표로 두어야 할 것입니다.
좋은글 감사합니다 ^^