반응형
SMALL

1. 취약점 소개

사용자가 안드로이드 앱을 사용하기 위해 로그인을 시도한다. 입력되는 파라미터 값들이 보호되지 않으면 공격자가 파라미터 정보를 수정해 악용할 경우, 개인 신상 유출, 신용카드 도용, 가격 변조 등과 같은 피해가 발생할 있다. 안드로이드 앱에서도 웹과 똑같이 요청하는 중간에서 값을 가로채 매개변수값을 변조해서 전송한다. 공격을 통해 본래 요청값이 변조된 값으로 수정되고 민감한 정보가 포함된 요청이면 정보 유출 위험성이 존재한다. 웹에서는 인증 우회 취약점으로 분류하기도 한다.

 

2. 취약점 진단

2.1) 가격 조작

[그림 2-1] 요청 패킷

프록시 설정 완료 인시큐어뱅크 파라미터 조작 취약점을 진단한다. 인시큐어뱅크 서버 IP 포트를 지정한 로그인을 시도한다. 로그인 시도 Transfer 버튼을 클릭해 버프스윗으로 요청 데이터 값들을 인터셉트한다. 인터셉트 파라미터 값으론 로그인 계정 파라미터를 포함해 5개가 존재한다.

 

[그림 2-2] DB 확인

인시큐어뱅크 서버 DB mydb.db 파일을 sqliteBrowser 도구를 이용해 확인해보면 555555555 금액은 777994437 저장되어 있고 888888888 금액은 98403 저장되어 있음을 확인할 있다.

 

[그림 2-3] 가격 조작

Transfer 시도 이체할 금액을 변조해서 데이터를 보낸다. 금액을 10000에서 1000으로 변조한 Intercept is on 버튼을 클릭한다.

 

[그림 2-4] ViewStatement

ViewStatement 탭을 클릭해서 변조해서 보낸 데이터를 확인하면 금액이 10000으로 이체되었다고 표시된다. 하지만 ViewStatement에서 표시되는 금액일 실제로는 1000 이체되었다.

 

[그림 2-5] DB 확인

sqliteBrowser 도구를 이용해 mydb.db 파일을 확인해보면 [그림 2-2] 달리 가격이 조금 변동되었음을 확인할 있다. 555555555 금액은 777995437, 888888888 금액은 97403으로 변동이 되었다. 처음 이체 시도 10000 보냈지만 파라미터 조작을 통해 1000으로 변조해 실제로는 1000 전송되었음을 확인할 있다.

 

2.2 CSRF 공격

[그림 2-6] 요청 패킷

CSRF 요청되는 값을 변조해서 공격하는 기법이다. 사용자가 특정 링크나 페이지에 접근했을 사용자도 모르게 요청값을 변조해 서버에 전달해서 중요 정보를 임의로 수정한다. Chanegepassword 페이지로 이동해 비밀번호를 변경할 패킷을 가로챈다.

 

[그림 2-7] Submit Form 클릭

만든 코드를 HTML 파일로 저장해 브라우저에서 실행한다. 실행 Submit Form 클릭한다.

 

[그림 2-8] 비밀번호 변경 확인

Submit Form 클릭하면 비밀번호가 변경되었다는 결과 메시지가 출력된다.

 

[그림 2-9] 인시큐어뱅크 서버 로그

인시큐어뱅크 서버 로그에서도 비밀번호가 변경되었다는 결과 메시지가 출력된다.

 

 

[그림 2-10] 로그인 시도

변경된 비밀번호인 Jack@123$% 로그인을 시도한다.

 

[그림 2-11] 로그인 성공

변경된 비밀번호를 이용해 로그인에 성공했음을 확인할 있다.

 

3. 대응 방안

[그림 3-1] 서버 코드

서버 코드에서 POST 메서드를 이용해 전달되는 매개변수를 처리하도록 코드가 구현 되어 있다. 단순히 데이터베이스 유저 이름과 매개변수의 유저 이름이 같으면 매개변수의 새로운 비밀번호를 저장하고, 변경 성공 메시지를 저장해 다시 응답값이 포함되도록 하고 있다.

 

 

[그림 3-2] 클라이언트 코드

ChangePassword.java 파일을 보면 입력 받은 값에 따라 조건을 주고 실행하고 있다. 먼저 httppost 변수에 매개변수를 포함시킬 URL 입력하고 유저 이름과 새로운 비밀번호를 변수로 저장한다. 입력된 비밀번호가 복잡한지 검증하고 합당하면 추가 변경 과정을 실행한다. 코드에선 비밀번호 복잡성은 검증 진행이 되고 있지만 매개변수를 암호화하거나 변경하는 페이지에 대한 추가 인증에 관련된 코드는 구현되어 있지 않다.

 

파라미터 조작은 가장 막기 힘든 취약점이다. 소프트웨어에 대한 입력값이 신뢰를 전제로 보호 메커니즘 구현 공격자가 입력값을 조작한다면 보호 매커니즘은 무의미하다. 소프트웨어를 개발할 기발자들이 모든 입력값에 대해 검증을 수행하는 것이 안전하다. 안전한 소프트웨어 개발을 위해 가장 먼저 모든 입력 값에 대한 검증을 "서버"에서 수행하고 상태 정보, 민감한 데이터, 사용자 세션 정보와 같은 중요한 정보들은 특히 "서버"에서 검증해야 한다.

 

 

반응형
LIST

'안드로이드 앱 취약점 진단 > 인시큐어뱅크' 카테고리의 다른 글

개발자 백도어 취약점  (0) 2021.09.19
애플리케이션 패칭 취약점  (0) 2020.04.15
취약한 액티비티 컴포넌트  (0) 2020.02.15
XSS 공격  (0) 2020.02.10
로컬 암호화 이슈  (0) 2020.02.09
블로그 이미지

만년필석사

,