티스토리 뷰

정적 분석 : 앱이 동작하는 원리를 찾기 위함 + 값들

동적 분석 : 실질적으로 앱이 동작하는 것을 가지고 (실행하는거 보고) + 네트워크 간에 오고가는 패킷을 캡쳐해서 분석

 

코드 패칭 : patch 한다? 보안 업데이트 같은거 하듯이

파일을 우회한다 제약이 되어있는 것을 가로질러서” (정품 프로그램 크랙하듯이/시리얼 넘버 입력하듯이)

금융 앱 실행하기 위해서는

백신이 설치되어 있는가 동작되어 있는가 (동작 안되어 있으면 키기)

키로킹 프로그램 설치 되어 있는가

루팅이 되어있는가

이런거 이용하면 충분히 우회 가능

잘만들어진  금융앱들은 코드 패칭 통하면 동작을 하지 않음

==> 앱이 변형이 되었는가 일종의 해쉬값을 비교함

 

수작업으로 분석하지않고 안드로가드, 드로이드 박스 등등 이용해서 분석이 가능

 

온라인 분석 : 동적분석과 정적분석된 값들을 모두 이용 (바이러스 토탈 이용)

 




 

s   OS

s   윈도CE : 가장 기본적인 기능만 수행. 윈도우 커널을 최적화해서 만듦.

s   블랙베리 OS : RIM 사에서 만듦. 통신이 포함되기 시작.

s   iOS

s   안드로이드 : 구글 뿐만 아니라 휴대폰 업체들이 연합해서 만듦 <= 안드로이드는 맘만 먹으면 여기저기 다른 제조사의 어떤 기기에도 설치 가능

CPU도 다르고 디바이스마다 다 다른데 연합을 했기 때문에 가능.

안드로이드 1.0 1.1은 일반인들에게 소스가 공개되지 않았으나 1.5부터 공개

 

안드로이드는 점점 점유율이 높아지고 있고 iOS는 평균 유지, 나머지는 다 없어지고 있음

==> 결국 남는건 안드로이드와 iOS만 남게 되지 않을까

 

OS 선택 기준 = 컨텐츠 = ?

하다못해 윈도우폰에 쓸 수 있는 앱도 많지 않고 다른 OS들도 마찬가지. 사용자들이 요구하는 기능을 얼마나 많이 지원해주는가가 중요

 

iOS 

OS 를 받아서 쓰임 (기본적인 커널이 유닉스 기반임- Darwin UNIX)

UI를 아주 미세하게 바꾸면서 기본틀은 유지 - 한번 고객이 계속 사용하게 되는 것

안드로이드 역시 기본 맥락은 바뀌지 않고 있음

 


iOS 운영체제 구조



iOS 보안 체계

- 안전한 부팅 절차 확보 : 모든 단계에서 암호화 단계 거침

s   애플 암호화 로직의 서명된 방식에 의해 무결성이 확인된 후에만 동작

s   부트 ROM에 애플의 루트 CA의 공개키 포함

s   부트 ROM에 의해 실행된 코드는 애플에 의해 서명된 Low Level Bootloader 무결성 점검

s   이상이 없는 경우 LLB 실행

s   LLB iBOOT 무결성 확인 뒤 실행

s   iBOOT iOS 커널 무결성 확인 뒤 실행

 

** 부팅

1. 하드웨어 기반으로 POST가 부팅 과정을 체크 (이상이 있으면 비프음) - OS가 부팅된 것이 아님!

2. CMOS : 부팅 순서 정함 (C: CD USB….뭐부터 할지) - 부트 로더에 의해서 그 다음부터 부팅 진행이 됨 <= 0번째 섹터 ** LLB는 이 이전

 

- 시스템 소프트웨어 개인화

s   애플은 모든 소프트웨어를 아이튠즈/앱스토어(아이튠즈와 연동)를 통해 일괄적으로 배포 ==>애플에서 제공하는 것 말고는 임의로 설치가 불가능

s   보안상 문제가 생기더라도 즉각적인 대응이 가능 <=설치할 수 있는 경로가 하나뿐이기 때문..! 안드로이드는 마켓도 많고 대응이 어려움

s   일반적으로는 소프트웨어 설치/업데이트 이후 다운그레이드 불가능 (애플의 기본적인 정책) ==> 탈옥을 하기도 하지만가끔씩 정식적으로 다운그레이드 가능하게 하도록 할때: 베타 테스트 버전이 나왔을 때 제외

s   개인이 앱스토어에서 가져온 소프트웨어 설치할 때 개인별 모듈 (LLB, iBOOT, 커널, OS이미지) 암호 정보와 랜덤으로 생성되는 값, ECID(단말 장치별 고유값) 저장 ==> 애플이 이 기기에 어떤 소프트웨어 설치하는지 다 알게됨!!

s   애플의 응용프로그램 설치 서버는 각단말기의 고유한 소프트웨어 코드값을 각각 생성 하고 저장하는 형태로 개인별 모든 iOS 응용 프로그램을 식별 ==> 모든 단말기에 설치된 모든 응용프로그램은 각각 고유한 코드 값으로 버전이 관리 되므로 임의의 프로그램의 변경 및 설치 통제

- 응용 프로그램에 대한 서명

s   모든 앱에 대해서 코드 무결성 사인 (Code Signature)을 등록

s   ** PKI : Public Key Infrastructure 공개키 기반

s   -공개키 : CA에 공개키가 다 등록이 됨. 누구나 다 접근 가능

s   -개인키(비밀키) : 자기 혼자만 가지고 있음

s   두개의 차이 ==> 암호화(상대방의 공개키)와 전자 서명(자신의 개인키)

s   상대방에게 문서를 전달할 때

[문서A] -------------상대방공개키-----------------[암호화된문서C]

[해쉬] ß전자서명

공개키

[문서A]

 

s   코드 무결성 사인 : 일종의 해시값. 등록된 앱의 코드 무결성 사인이 다를 경우 앱 설치 못하게 함 (애플에 공식적으로 등록하면 키가 옴)

s   개인이 각가의 iOS에 설치한 어플리케이션이 문제 있을 경우 네트워크에 연결된 iOS 강제삭제 가능

 

- 샌드박스 활용

s   사용자 앱의 경우 기본적으로 앱끼리 데이터 주고 받을 수 없고 시스템 파일에서 접근 할 수 없음

s   앱끼리 문서나 음악 사진 등 전송하는건 시스템 API 에서 기능을 제공하는 경우에만 가능

 

-멀티태스킹 금지를 했었음 ==> 지금은 제한적으로 허용

s   초기에 iOS는 기본적으로 음악듣는 것 외에 멀티태스킹 금지 (악성코드가 활동하는 것 막기 위함. 대부분의 악성코드는 사용자가 컴퓨터를 사용하는 과정에서 실제로 사용하는 프로그램과 함께 백그라운드로 실행하였기 때문)

s   지금은 악성코드라는게 따로 있음! 이렇게 막는 것이 의미가 없음을 알게 됨

s   앱 하나 사용하고 다른거 사용하려니 사용자 불편, 요구 증가

 

- 원격지에서 iOS 로그인 금지

s   기본적으로 유닉스에 바탕 두고 있기 때문에 유닉스처럼 SSH 서버 등 실행할 수 있음 BUT 애플은 원격지에서 iOS구동하는 단말기에 HTTP FTP의 단순한 파일 전송 기능 이외에는 명령이 입력 가능한 응용 프로그램 비허용

 

탈옥

- 애플이 공식적으로 지원하지 않는 기능을 사용

- iOS 내부의 시스템 파일 및 응용 프로그램 파일에 대한 접근과 외부 관리 인터페이스가 포함

- 시스템 파일에 접근 가능

- SSH서버 실행 가능

root 패스워드가 ‘alpine’로 기본적으로 설정되어 있음





안드로이드

- “인간의 모습을 한 로봇

- 리눅스 커널 2.6.25 기반으로 한 모바일 운영체제

- 2005년 구글에서 안드로이드 사 인수, 2007 11월 안드로이드 플랫폼을 휴대용 장치 운영체제로 무료 공개한다고 발표

- 34( 80)의 하드웨어, 소프트웨어, 통신 회사가 모여 만든 Open Handset Aliance (OHP) 에서 공개 표준 개발하고 있음 http://www.openhandsetalliance.com/

 


안드로이드 운영체제 구조



 

프레임워크 : 기본틀. 뼈대. 응용프로그램을 실행하기 위한 기본 베이스가 되는 것들. 대부분 매니저라고 이름 지음 -> 응용프로그램과 커널을 전반적으로 관리

응용프로그램은 대부분 자바로 만들어져있고 라이브러리와 커널은 C C++로 만듦

자바 어플리케이션을 만들기 위해서는 자바 버츄얼 머신이 필요

자바 버츄얼 머신 대신하는게 달빅 가상 머신

JVM안쓰고 Dalvik 쓰는 이유? 라이선스 문제 : 자바는 오라클에서 가지고 있음 (예전에는 썬에서 가지고 있었음). 기본적으로 자바는 오픈되어있지만 JVM은 아님

* Dalvik 말고 새로운 가상머신도 4.4버전부터 들어가있음 (사용자가 선택 가능)

 

안드로이드 보안 체계

- 응용프로그램의 권한 관리

s   안드로이드에 설치된 모든 응용프로그램은 일반 사용자 권한으로 실행됨

s   응용프로그램이 사용자의 데이터에 접근 할 때 모든 사항을 응용프로그램 사양에 명시 (접근 시 사용자의 동의를 받도록 하고 있음 - 응용 프로그램 설치시 동의 절차)

s   모든 응용 프로그램은 설치 시 자신의 고유한 사용자 ID를 할당 받아서 동작

** 문자를 수신하는 앱을 잘 보도록. 의심! (가로채는 걸지도)

** 설치할 때 마다 UID : user id // GID : group id 만들어짐



- 응용 프로그램에 대한 서명

s   iOS는 애플사에서 받은 키로만 서명해야하지만 안드로이드는 개발자가 스스로 만들어서 사용. à 보안보다는 응용 프로그램에 대한 통제권을 개발자가 가지게 하는 것이 목적. 서명 검증을 해도 서명이 됐다 안됐다만 확인하는 것. (공식적이지 않기 때문에)

 

-샌드박스 활용

s   기본적으로 시스템과 다른 어플리케이션에 접근 하는 것 통제

s   본인이 앱을 만들 때 내가 관리하는 데이터는 다른 앱에서도 사용해도 된다고 설정할 시에 그냥 바로 넘겨서 사용 가능하도록 함. 카카오톡과 연계되는 게임 설치시 카카오톡의 친구 목록이 게임으로 넘어가듯. (카카오톡이 가져다 쓰는 것을 허용한 것.) + 전화번호부, 사진, 다른 데서 다 읽어 들여오는 앱들 많음

s   iOS보다는 앱간의 데이터 교환이 자유로움

 

안드로이드 취약점

- 사용자 선택에 따라 보안 수준 선택

s   다양한 마켓 존재 : 구글플레이, 통신사, 제조사, 네이버, 블랙마켓 등등 짱 많음 ==> 바이러스와 악성코드 다양하게 유포

s   일반 리눅스 운영체제와 유사한 보안 취약점 그대로 존재






 

스마트폰 악성 앱

- 루팅 & 탈옥 : 공격자가 스마트폰의 최고 권한을 획득하기 위한 방법



- 리패키징 : 공격자가 의도하는 기능을 수행하는 악성코드를 정상적인 앱에 추가하여 유포하는 방법

- 개인정보 등 중요 정보 유출 : 사용자 이름, 전화번호, 사진, 문자, 위치정보 등 가종 개인정보 등... 현존하는 대부분의 스마트폰 악성코드의 근본적인 목적




댓글
댓글쓰기 폼