Offcanvas

How To / 모바일 / 보안

'모바일 앱을 안전하게' 개발자 7단계

2013.09.26 Dan Kuykendall  |  Computerworld
모바일 애플리케이션 제작에 있어 실수가 가장 많이 나는 부분은 세션 관리다. 이런 실수가 그 자체로는 크게 위험하지 않다. 그러나 실수가 늘어날수록 애플리케이션도 위험에 취약해진다. 그리고 문제는 어느 앱이든 상관 없이 이런 에러를 한 두 개 쯤은 쉽게 발견할 수 있다는 것이다.

OWASP AppSecUSA 2013행사에서, 필자는 특히 공격에 취약했던 한 모바일 앱에 대해 자세히 소개할 예정이다. 이 앱은 인기 있는 판타지 풋볼 게임 애플리케이션이었는데 해킹을 당할 경우 사용자들이 팀 라인업을 마음대로 바꿀 수 있게 됐으며 사칭 댓글을 달 수도 있었다.

최신 버전으로 모바일 앱 업데이트를 하지 않은 사용자 계정을 다른 리그 매니저나 해커들이 마음대로 팀 라인업을 바꿔버릴 수 있었던 것이다.

이 사례은 매우 흥미롭기도 했지만 동시에 무언가를 일깨워주었다. 필자는 세션 관리 취약점에서 발견되는 패턴에 대해 계속해서 연구해 나갈 생각이다. 연구가 진행되는 동안, 개발자들과 보안 전문가들이 흔히 저지르는 실수를 방지하고 모바일 애플리케이션 세션 관리를 제대로 도와 줄 방법들을 소개할 계획이다. 다음은 그간 발견한 안전한 모바일 앱 개발을 위한 보안 교훈들이다.

1. 클라이언트를 신뢰하지 말자
애플리케이션의 그 어떤 요청도 잠재적 공격 페이로드(payload)로 보아야 하며, 신뢰해서는 안 된다. 요청이 있을 때는 그 요청의 신뢰성을 반드시 확인해야 한다.

2. 암호화는 필수다
해커들이 모바일 기기에서 무선 커뮤니케이션을 읽어낼 수도 있다. 이런 일을 방지하려면 SSL로 클라이언트를 암호화하고 모바일 인증서를 요구해야 한다.

3. 세션 만기 기한을 둔다
개발자들은 사용자들이 다시 로그인 할 필요가 없도록 애플리케이션 세션을 매우 긴 시간 동안 허용한다. 그렇지만 세션이 켜져 있는 동안은 언제나 해커들이 서버에 악성 리퀘스트를 할 수 있다는 점을 알아야 한다. 다시 말 해, 개발자들은 사소한 편의와 보안을 맞바꾸고 있는 것이다.

4. 비밀을 지켜라
클라이언트와 서버만 알고 있고, 리퀘스트 사인에 사용되는 비밀 키를 통해 서버는 공격을 미리 알고 막을 수 있다.

5. 리퀘스트의 유효 시간을 제한하라
리퀘스트 유효 시간이 길수록 공격자가 리퀘스트를 중간에 가로채거나, 수정하거나, 엿볼 위험도 커진다. 모든 리퀘스트에는 타임 스템프가 있어야 하며 서버가 지정한 시간이 지나면 만료되도록 해야 한다.

6. 반복되는 리퀘스트를 거절하라
공격자들은 중간에 가로챈 리퀘스트를 반복적으로 사용할 수 있다. 단순히 성가신 정도로 끝날 수도 있지만(반복되는 트윗의 경우처럼) 심각한 결과를 초래할 수도 있다(예를 들어 계좌 송금 리퀘스트가 여러 번 보내지는 것이다).

NONCE(number used once 의 약자)를 이용해 반복되는 리퀘스트를 막을 수 있다. 클라이언트는 각 리퀘스트에 대해 무작위로 난수를 만들어 낸다. 서버는 이 숫자들을 기억하고 있다가 리퀘스트가 신뢰할 수 있으며 반복적으로 사용되는 것이 아님을 확인한다. 반복적인 NONCE가 계속되면, 서버는 그 리퀘스트를 부적절한 것으로 인식한다. 5번에서 설명했듯, 서버에 저장된 NONCE 리스트는 타임 스템프로 최소화 할 수 있다.

7. 수정된 리퀘스트를 불허하라
해커들은 리퀘스트를 반복하는 대신, 그 자체를 수정해 버리는 방법을 사용하기도 한다. 예를 들어, 공격자가 서로 다른 계좌에 한 번에 돈을 송금하는 경우를 상정해보자. 이는 공유 비밀 키나 암호화 키 쌍(cryptographic keypair)를 사용해 방지할 수 있다. 리퀘스트의 HMAC를 만들어 리퀘스트와 함께 서버에 보내면 서버는 그 리퀘스트가 수정된 것이 아님을 확인할 수 있다.

결론
안전한 모바일 애플리케이션을 만들기 위해서는 우선 여기에 적힌 것들부터 실행해 나가야 한다. 이 중 하나라도 소홀히 한다면 언제든 공격의 대상이 될 수 있다. 그렇지만 이 모든 사항은 일련의 과정처럼 쉽게 할 수 있는 것들이다. 클라이언트를 신뢰하지 않거나(1번) 해커가 언제든 커뮤니케이션 내용을 엿듣고 있을 수 있다고 의심하는 자세를 가지면(2번), 개발자는 자연히 해커가 애플리케이션을 공격할 수 있는 시간을 줄이려 할 것이고(3번), 비밀 키(4번)을 사용해 타임스템프(Time stamp, 5번)나 NONCE(6번)을 포함해 콘텐츠를 사인하고(7번) 세 데이터 포인트 모두 안전함을 확인할 수 있다.

* Dan Kuykendall은 NT 오브젝티브(NT OBJECTives, Inc)의 공동 CEO이자 CTO다. ciokr@idg.co.kr

CIO Korea 뉴스레터 및 IT 트랜드 보고서 무료 구독하기
추천 테크라이브러리

회사명:한국IDG 제호: CIO Korea 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아01641 등록발행일자 : 2011년 05월 27일

발행인 : 박형미 편집인 : 천신응 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.