안녕하세요 :) LIAPP TEAM 입니다.
포근한 봄이 오나 싶었는데 날이 쌀쌀해진 요즘입니다.
오늘은 안드로이드 앱 개발을 위한 4가지 보안 체크리스트에 대해서 소개해드리고자 합니다.
안드로이드는 오픈소스 기반의 개방된 환경으로 개발자가 부담 없이 앱을 개발할 수 있는 운영체제입니다. 하지만 접근이 쉽고 개발에 있어 제약조건이 적다는 점이 보안에 있어서는 취약점으로 작용하고 있습니다. 이미 안드로이드에는 수많은 모바일 앱이 양산되고 있으나, 정작 사용자들이 믿고 사용할 수 있는 수준의 보안이 적용된 앱은 그리 많지 않습니다.
특히 안드로이드 운영체제에서는 간단한 해킹 기술을 통해 앱의 디컴파일 또는 리버싱 엔지니어링이 가능해 해킹 위험에 노출되어 있습니다. 디컴파일이나 리버싱 엔지니어링을 통해 앱의 소스코드를 복제, 제작된 해적판 앱이 유포되면 원제작사에 심각한 금전적 손실은 물론, 평판에도 심각한 악영향을 미칠 수 있습니다. 또한 악의적인 목적으로 앱에 악성코드가 주입되어 배포될 경우 불특정 다수의 개인정보 유출이나 기기 이상 등의 피해에 노출될 수 있습니다.
이처럼 다수의 피해 사례에도 불구하고 개발자들이 모바일 앱 개발 과정에서 기술 또는 시간상의 문제로 모든 보안 시스템을 마련하기란 쉽지 않습니다. 하지만 꼭 필요한 보안만 적용한다면 시간과 비용의 문제를 쉽게 해결할 수 있습니다. 이러한 현실적인 과제를 해결하기 위해 LIAPP TEAM에서 앱 출시 전 반드시 확인해야 할 안드로이드 앱 보안을 위한 필수적인 기능 4가지를 알려드리고자 합니다.
1. 루팅 탐지 및 차단 기능
기본적으로 앱에는 안드로이드의 ‘루팅’을 탐지하는 기능이 필요합니다. 대부분의 스마트폰 OS는 Sandbox 개념을 도입하여 보안을 유지하고 있는데요, 루팅이라는 것을 이것을 깨는 행위입니다. 루팅이 되면 언제든지 Sandbox의 통제를 벗어나 스마트폰 내 모든 권한을 보유하게 되고 다른 앱들의 저장파일은 물론 디버깅, 메모리덤프 등 공격자가 원하는 작업을 할 수 있게 됩니다. 기본적으로 루팅 탐지 기능이 활성화된 앱은 루팅된 기기에서 모바일 앱 실행 시 강제로 종료됩니다.
2. 소스코드 보호 기능
앱 개발 단계에서는 소스코드 취약점 제거가 대표적인 보안 활동입니다. 소스코드 난독화는 말 그대로 소스코드를 읽기 어렵게 만드는 기술입니다. 개발자에게 코드의 가독성이란 중요한 요소지만 난독화는 오히려 그 반대 개념으로, 코드 가독성을 떨어뜨려 누군가 앱을 디컴파일 하더라도 로직 분석을 어렵게 만드는 기술입니다. 참고로, 이런 난독화 기술은 소스코드 작성 시에 적용하는 것이 아니라 빌드 시에 적용하는 것입니다. 개발할 때는 가독성 및 개발의 편의성을 고려하여 개발하고 빌드 시 가독성을 떨어지게 만드는 것이죠. 하지만 소스코드 난독화는 소스코드 암호화가 아니라 난독화이기 때문에 코드를 열심히 쫓아가면 분석이 가능하다는 한계가 있는 보조수단인 것을 이해하셔야 것입니다.
LIAPP은 소스코드를 보호하기 위해 난독화 뿐만 아니라 중요 소스코드를 암호화를 통해 강력한 보안을 제공하고 있습니다. 단순한 단어 재배열의 난독화가 아니라 모든 해킹툴을 원천 차단하는 암호화 솔루션으로 악의적인 목적을 가진 해커의 공격을 원천적으로 보이지 않게 차단하는 강력한 보안성을 자랑합니다.
3. 앱 무결성 검증
앱 무결성 검증은 앱이 실행되는 시점에 내가 개발한 앱이 변경되었는지 위,변조 여부를 탐지하는 기능입니다. 무결성 검증 방법이 적용된 안드로이드 앱의 경우 앱 내부에 위,변조 여부를 탐지하기 위한 특정 코드를 포함하고 있습니다. 이 코드는 실행 시점에 앱의 변경 여부를 검사하여 위,변조 여부를 파악합니다. 만약 앱이 위, 변조로 탐지될 경우 앱의 동작을 중지시키거나 제한합니다.
현재 모바일 뱅킹 등의 금융권, 보험 증권 및 모바일 게임 앱에 적용되고 있으며, 앱 보안을 위해 가장 기본적으로 요구되는 기능 중 하나입니다. 하지만 이 방법에도 주의해야 할 점이 있습니다. 무결성을 검증하는 로직도 결국은 앱 내부에 들어 있어서 이 로직까지 위, 변조될 위험이 있기 때문에 이 앱 무결성 검증 로직 또한 소스코드 난독화, 소스코드 암호화 기술을 통해 보호해야 합니다.
4. 입력정보 보호
앱 실행 시 사용자에게 입력받는 비밀번호, 주민등록번호 등 중요정보는 사용자가 입력 시 노출되지 않도록 가상 키패드 등을 적용해야 합니다. 앱 내 단순 텍스트 창에서 중요정보를 입력할 때, 마스킹 처리로 UI상에서는 안 보이지만 실제 실행되는 앱의 프로세스에 할당된 메모리 내에는 그 값이 평문으로 남아있게 됩니다. 이때 메모리 덤프 등을 통해 중요 정보를 해커가 가져갈 수 있습니다.
이를 보호하기 위해 가상 키패드를 사용하면 키 값 하나하나를 입력할 때마다 사용자가 입력한 값이 아닌 암호된 값으로 저장하고 입력 종료 시 서버로 전송하면 서버에서 값을 복호화하는 작업이 진행됩니다. 이러한 로직을 구현 시에는 취약한 알고리즘을 사용해 암호화하거나 암호화 키 교환을 안전하지 않은 방식으로 설계하여 암호화 채널이 쉽게 뚫리지 않도록 고려해야 합니다.
LIAPP의 경우, 모바일 전용 키패드 LIKEY를 제공해 하나의 앱 안에서 동일 입력값에 대한 암호화문이 상이하도록 매번 다른 일회성 데이터(One Time Data)를 서버로부터 수신하여 입력 정보의 해킹 및 유출을 강력하게 방지합니다.
현재 안드로이드의 보안 취약점에 대한 인식이 높아져 많은 기업과 금융회사, 게임회사 등에서 보안솔루션을 도입하고 있지만, 그럼에도 불구하고 아직 수많은 앱들이 보호되지 않고 있습니다. 사용자들은 많은 사람들이 사용하고 있는 앱 일수록 안전할 거라는 생각을 할 수도 있습니다. 앱 개발자들이 먼저 나서서 앱 보안에 대한 올바른 인식과 대처방안을 가져야 우리 사회의 개인정보 보안의 문제와 기업의 브랜드 자산 유출로 인한 피해를 제대로 막을 수 있을 것입니다. 앱 출 시 전, 위의 4가지 체크리스트를 잘 확인하셔서 안전한 앱을 출시하시길 바랍니다.
감사합니다!!!~