해킹-보안/모바일 (38) 썸네일형 리스트형 IOS 앱 개념 정리 (기본 인터페이스 및 Lifecycle) ி UIKit 기본 인터페이스 UIKit UI를 구현하고 이벤트를 관리하는 IOS의 핵심 프레임워크 사용자 이벤트 처리를 위한 클래스 포함(텍스트/이미지 처리, 애니메이션 처리, 제스처 처리 등) 앱 화면을 구성하는 요소 포함(버튼, 테이블뷰, 슬라이더, 텍스트 필드, 경고창 등) UIResponder에서 파생된 클래스나 UI 관련 클래스는 메인 스레드(혹은 메인 디스패치 큐)에서만 사용할 것 UIApplication 모든 iOS 앱은 UIApplicationMain 함수를 실행 UIKit는 UIApplicationMain 함수를 실행하여 생성된 UIApplication 객체를 통해 앱 실행에 접근 가능 모든 iOS 앱은 단 하나의 UIApplication 인스턴스를 보유 UIApplication 객체는.. 안드로이드 앱 개념 정리(4대 컴포넌트, Lifecycle) ி 앱 기본 항목 Android OS는 멀티유저 Linux 시스템 시스템이 각 앱에 고유한 Linux ID를 부여함 두 개앱이 Linux ID가 공유되도록 설정되면 서로 파일 액세스 가능(리소스 절약됨), 대신 같은 인증서로 서명해야함. Android 시스템은 최소 권한의 원리를 구현(필요한 액세스 권한만 요구) Android 패키지는 접미사가 .apk인 아카이브 파일 ி 앱 구성 요소 4대 컴포넌트 액티비티: 화면에 보여지는 구성 요소(UI)로서 하나의 화면이자 실행 단위 서비스: 백그라운드에서 앱을 계속 실행하기 위한 구성 요소 ex) 음악 재생 Broadcast Receiver: 디바이스에서 발생하는 이벤트 신호를 받아 처리하는 역할 ex) 알람, 배터리 부족 콘텐츠 제공자: 다른 앱이 현재 앱 정.. DIVA - 안전하지 않은 데이터 저장 DIVA 앱에서 Insecure Data Storage - Part2 를 선택하면 계정 정보 입력 창이 나온다. 아이디와 패스워드를 넣고 저장 버튼을 누르면 계정 정보들이 앱 내부 저장소에 저장된다. 소스코드를 보면 "ids2"라는 데이터베이스를 생성 후 "myuser"라는 테이블을 추가한다. 그리고 사용자의 입력값을 해당 테이블에 삽입한다. 계정 정보가 저장되는 코드에는 암호화 없이 평문으로 저장하고 있다. adb shell에서 해당 앱의 databases 폴더를 조회했을 때 입력한 값이 저장되는 db 파일들이 존재하며 방금 확인한 ids2 파일에 계정 정보가 저장된다. sqlite3에서 ids2 파일의 테이블을 조회하면 사용자가 입력한 로그인 정보를 확인할 수 있다. 루팅 탐지 우회 설명 안드로이드 기반인 리눅스는 각 사용자별로 각각에 맞는 권한을 주고, 그 권한 내에서만 시스템을 컨트롤할 수 있도록 구성되어 있다. 하지만 모든 권한을 보유한 root 계정은 안드로이드를 사용자 마음대로 변경을 할 수 있고 이를 획득하여 정상적으로 제어할 수 없던 시스템 파일이나 OS의 접근할 수 없던 부분까지 사용자 임의로 변경 및 삭제를 할 수있다. 때문에 앱에서는 이러한 보안상의 이유로 루트 권한을 제한하고 있고 이를 우회하여 강제적으로 루팅을 할 수있는지 점검해야 한다. 취약점 진단 루팅 체크에 주로 사용되는 경로는 아래와 같다. ① /system/bin/su ② /system/xbin/which ③ /system/app/superuser.apk ④ /data/data/com.noshufou... 브로드캐스트 리시버 취약점 설명 브로드캐스트 리시버는 디바이스에서 발생하는 이벤트 신호를 받아 처리하는 역할을 한다. 대표적으로 배터리 부족, 부팅 완료, 인증코드 입력 메시지 등이 있다. 배터리 부족 메시지는 배터리가 부족하면 모든 앱에 존재하는 브로드캐스트 리시버에게 배터리가 부족하다는 메시지를 전송한다. 그리고 각 앱의 브로드캐스트 리시버는 수신한 메시지를 그대로 사용자에게 전송하여 사용자는 최종적으로 배터리가 부족하다는 알림을 받게 된다. 이때 공격자는 임의의 브로드캐스트 신호를 생성하여 사용자가 받는 알림(메시지, 전화 등)을 가로 채거나, 특정 상황에서 발생하는 작업을 우회하여 수행할 수 있다. 취약점 진단 브로드캐스트 리시버는 Androidmanifest.xml 파일에 요소로 정의된다. MyBroadCastReceiv.. 취약한 콘텐츠 프로바이더 접근 설명 콘텐츠 프로바이더는 다른 앱이 현재 앱 정보에 접근할 수 있도록 도와주는 컴포넌트이다. 예를들어 뮤직 플레이어 앱을 설치하면 내 핸드폰에 저장된 음악들을 조회하는 콘텐츠 프로바이더를 사용해서 음악 파일을 가져온다. 만약, 콘텐츠 프로바이더의 접근 권한이 설정되어 있지 않다면 외부에서 접근 권한이 없는 사용자가 데이터를 조회하거나 변경할 수 있다. 앱에서 콘텐츠 프로바이더에 접근하려면 콘텐츠 리졸버와 URI가 필요하다. 액티비티 컴포넌트 취약점 설명 액티비티는 화면에 보여지는 구성 요소로서 하나의 파일이자 실행 단위이다. 은행 앱을 실행하면 로그인 화면이 뜨고, 사용자에게 계정을 입력받는다. 존재하는 계정이면 로그인되어 메인 메뉴가 실행되고 은행 관련 기능을 이용할 수 있다. 이때 액티비티 속성이 취약하게 설정되어 있다면, 인증 로직을 무시하고 필요한 액티비티를 강제 호출하여 권한이 없는 액티비티에 접근할 수 있다. 취약점 진단 액티비티는 AndroidManifest.xml 파일에 요소로 정의된다. 태그 내의 android:exported 속성이 true로 설정되어 있으면 다른 애플리케이션에서 해당 액티비티를 실행할 수 있다. 인시큐어뱅크는 로그인 화면을 거치지 않고 비밀번호를 변경할 수 있는 취약점이 존재한다. > nox_adb shell a.. 취약한 HTTP 통신 및 파라미터 조작 취약점 설명 HTTP는 평문 데이터로 통신하므로 중간자 공격을 통해 중요 데이터가 노출될 수 있다. 그리고 파라미터에 입력 값 검증이 이루어지지 않으면 공격자는 파라미터 정보를 수정해 악용할 경우, 가격 변조, 개인 신상 유출, 신용카드 도용 등과 같은 피해가 발생할 수 있다. 취약점 진단 인시큐어뱅크 로그인 화면에서 입력한 아이디와 비밀번호가 평문으로 기록된다. 따라서 암호화되지 않은 데이터를 전송하는 취약점이 존재한다. 다음으로 계좌이체 기능에서 파라미터 변조가 가능한지 확인한다. 계좌번호와 금액을 입력하고 Transfer 버튼을 클릭하여 이체할 금액을 변조하여 전송한다. 변조한 패킷에서는 22222 금액이 전송되었지만, 아래 사진(ViewStatement)을 보면 변조 전 데이터인 11111 것을 확인할 .. 1 2 3 4 5