본문 바로가기
Android

앱 취약점 - < 인자 전달값 조작 > 분석

by Ate1es 2021. 8. 19.

취약점 개요

 

사용자가 안드로이드 애플리케이션을 사용하기 위해 상호 간 데이터 통신을 합니다. 이때 사용자의 입력값이 들어가는 부분이 굉장히 많은데, 입력되는 파라미터값이 보호되지 않으면 공격자가 해당 파라미터를 수정해 악용할 경우 해킹 피해가 발생할 수 있습니다.

 

취약점 분석

 

인시큐어뱅크 로그인 후 Transfer 버튼을 눌러 계좌송금을 하는 부분입니다. 해당 송금을 클릭하면 왼쪽 그림과 같이 프록시에 다양한 개인정보가 평문으로 잡혀있습니다.

공격자는 이를 이용해 사용자는 555원을 송금하려고 클릭했지만, 중간에 패킷을 가로채 amount 파라미터를 100000으로 조작했습니다.

Foward 를 누르면, 해당 Tranfer 기능이 실행되면서 amount 가 100000으로 실행된 것을 볼 수 있습니다. 사용자의 화면에서는 변조 전의 화면이 보이지만, 실제 동작은 변조된 amount로 동작하는 것을 확인할 수 있습니다.

 

이제 ChangePassword 기능으로 이동하여 진단하겠습니다. 

 

해당 비밀번호 변경 버튼을 누를 때 프록시로 패킷을 잡았습니다. 해당 페이지에 CSRF를 터뜨리기 위해 간단한 HTML 코드를 제작하겠습니다.

 

 

위에서 가로챈 파라미터를 사용해 간단한 HTML 페이지를 제작했습니다.

 

아래 코드는 사용자가 Submit 버튼을 클릭하면 공격자가 원하는 비밀번호로 변경되는 코드입니다. 

<html>
	<body>
    	<from action="http://192.168.219.100:8888/changepassword" method="POST">
        	<input type="hidden" name="username" value="jack"/>
            <input type="hidden" name="newpassword" value="Abcd#1234"/>
            
            <input type="submit" value="Submit Form" />
		</form>
	</body>
<html>

해당 HTML 파일을 브라우저로 열어, Submit Form 버튼을 클릭하면 설정해놓은 파라미터가 실행시킨 인시큐어뱅크 서버로 전송되면서 해당 ID의 비밀번호가 원하는데로 변경됩니다.

 

아래는 인시큐어뱅크 서버의 로그입니다. 공격자가 짜놓은 코드에 있는 value로 패스워드가 변경되었음을 확인할 수 있습니다.

취약점 대응 방안

 

이 취약점이 발생하는 이유는 서버에서 입력값에 대한 검증을 하지 않기 때문입니다. 또한 파라미터에 대한 암호화 과정이 없어 공격자가 매우 다양한 취약점을 테스트 해볼 수 있었습니다. 모든 입력값에 대한 검증이 필수입니다. 

 

가장 먼저 모든 입력값에 대한 유효성 검증을 서버에서 수행해야 하고, 상태 정보나 민감한 데이터, 특히 사용자의 세션 정보와 같은 중요한 정보는 반드시 서버에서 검증해야 합니다.