본문 바로가기

Hacking & Security

(52)
Android APK Vuln analysis methodology Android APK Vuln analysis methodology Android APK 취약점 Web/ PC Software 뿐만 아니라 android APK에 대해서도 수많은 취약점이 존재한다. 모바일 OS 시장에서 구글 안드로이드의 독주가 두드러지고 있으며 이러한 모바일 OS 시장에서 안드로이드의 성장은 안드로이드 소프트웨어 발전에도 큰 영향을 주고 있다. 그러나, 안드로이드 소프트웨어는 그 구조상 Reverse Engineering에 취약하게 되어있다. 안드로이드 소프트웨어는 가상머신 위에서 동작하며 이는 자바를 기반으로 작성된 가상머신이다. 이렇게 생성된 software는 하나의 소스코드로 다양한 플랫폼에서 동작 즉, multi-platform 동작이 가능하다는 장점이 존재한다. 그러나 가상머신..
ARM Assembly Arm Assembly ARM (Advanced Risc Machine) x86으로 대표되는 CISC 라인과는 반대로 모바일이 대세가 되며 ARM(RISC) 프로세서도 많이 사용되어 지고 있다. 이번엔 ARM architecture 에 대해서 공부해본다. Thumb mode / Arm mode ARM 과 x86의 가장 큰 차이점은 Thumb 모드의 존재다. ARM 자체가 mobile/embedded 등 PC와는 다른 환경에 맞춰 설계하였기 때문에 저전력이 핵심 기술중 하나였으며, 처음 설계될 당시 임베디드 계열에서는 32bit가 아닌 16bit가 추세였다고 한다. 이러한 여러가지 상황에 맞추기 위해 2가지 모드를 지원하게 되었고 당연 리버싱을 하게 될 때도 이를 고려해야 한다. Thumb mode 레지스..
ASPACK unpacking 문제를 풀다가 Aspack을 처음 접해서 해당 공부 내용을 남기고자 블로깅을 진행한다. 0x00. Packer 패커란 실행 파일 압축기를 의미한다, 정확한 명칭은 Run_Time Packer다. '실행 압축'이란 실행 파일에 실행 코드를 원본 형태로 두지 않고 압축을 진행한 것을 의미한다. 또한 압축해제 코드를 실행 파일에 같이 넣어놓은것이다. 따라서 프로그램이 실행될 대 먼저 압축해제 코드가 진행되서 원본 실행코드 압축이 풀리고 실행이되어진다. 0x01. 패커 사용 목적 패커의 사용목적은 크게 두가지로 나뉜다. 첫번째 사용목적은 실행 파일의 크기를 압축하여 줄이고자 하는 목적 두번쨰 사용목적은 PE 파일 내부의 코드, 소스 등을 감추기 위한 목적이다. 0x02. 언패킹 EXEINFO와 같은 툴을 통해 ..
Stolen Bytes Stolen Bytes Stolen Bytes란 훔쳐진 바이트란 의미로 프로그램의 한 부분의 코드를 훔쳐내어 다른 부분으로 옮겨진 코드를 의미한다. 주로 옮겨지는 코드는 EP 위 몇개의 코드들이며 옮겨진 코드들은 OEP주소로 점프하기 전 위치에서 PUSH되어진다. 이부분의 명령어들은 이동된 곳 또는 할당받은 메모리 공간에서 실행되어진다. 만일, 보호된 프로세스의 메모리가 덤프 되었을 때 Stolen bytes를 복구하지 못한다면 덤프된 실행파일은 정상적으로 작동하지 않는다. POPAD와 jmp OEP 사이에 연속되어진 PUSH부분을 Stolen Bytes라고 한다. PUSHAD PUSHAD는 모든 Register를 Stack에 적재(push)하는 명령어이다. POPAD POPAD는 Stack에 백업되어있..
x86 그리고 x64 0x00. 개요 윈도우즈 PC에는서 프로그램등을 다운받을때 x86, x64버전이 표시되었던 것을 본적이 있을것이다. 두 버전 중 한 가지를 꼭 선택해야만 다음 단계로 넘어갈 수 있기에 의무적으로 하나는 선택을 해야했다. 과연이 두 버전에는 어떠한 차이가 있으며 무엇을 선택하는게 옳을까? 0x01. 32bit & 64bit 어떠한 것을 고를지 선택하기 위해서는 bit의 개념을 알아야 한다. bit란 Binary Digit의 약자이며 CPU가 처리하는 데이터의 최소단위의 크기가 몇 bit인지 에서 나온 단어로 숫자 0과 1 두 수 만으로 이루어진 숫자열을 의미한다. 여기서 왜 0과 1 두 수만 이용하는지에 대한 의문이 들 수 있다. 컴퓨터는 모든 데이터를 0과 1 을 이용한 이진법으로만 처리하기 때문이다. ..
APK File APK ( Android Package ) > 안드로이드 플랫폼에서 어플리케이션 설치를 위해 배포되는 패키지 파일 - Android Package는 안드로이드 어플리케이션 파일이며 zip과 같은 하나의 압축 파일이다. 일반적으로 접하는 압축파일과 가장 큰 차이가 있다면 "서명된" 압축파일이라는 점이다. - 어플리케이션에 관계된 파일들을 하나로 압축해놓은 파일이기 때문에, 압축 프로그램을 사용하여 압축을 풀 수 있다. - APK는 앱 실행 파일이라기 보다는 설치 프로그램이라고 할 수 있음. - 애플 IOS의 IPA 확장자에 대응된다. 결론 : APK는 서명된 압축파일이며 파일 내부에는 데이터와 리소스, 자바 실행코드를 묶어놓았다. > 주요 구성요소 - AndroidManifest.xml : 앱에 대한 정보..
Android Architecture Android : 모바일 기기를 위한 Linux based kerenl & middleware & 핵심 애플리케이션을 포함한 소프트웨어 스택 1. 안드로이드 내부 구조 안드로이드 플랫폼 구조는 위 그림과 같다. Linux Kernel : 안드로이드는 리눅스 커널을 기반으로 하는 리눅스 계열 OS이다. 위 그림에서의 커널은 하드웨어와 우리가 사용하는 OS를 연결시켜주는매개존재로 운영체제에 있어서 핵심이다. HAL ( Hardware Abstraction Layer ) : 하드웨어 추상화 계층 하드웨어 추상화 계층에서는 같은 종류의 부품으로 다양한 하드웨어를 설계할 수 있어 직접 하드웨어에 접근하는 형태는 다소 복잡할 수 있다. 이러한 점을 해결하고 복잡한 내부를 감추고 일관성 있는 인터페이스를 제공하기 위..
운영체제 명령 실행 취약점 진단 웹 어플리케이션 취약점 1. 운영체제 명령 실행 ( OS Command Injection ) 1-1) 개요 웹 어플리케이션에서는 이전에 pwnable 분야를 공부할때 쉘을 얻기 위하여 주로 이용하였던 system() , exec() 등과 같은 시스템 명령어를 실행시킬 수 있는 함수를 제공하며 사용자 입력 값에 대한 필터링이 제대로 이루어지지 않을 경우 공격자가 운영체제 시스템 명령어를 호출하여 백도어 설치나 관리자 권한 탈취 등 시스템 보안에 심각한 영향을 미칠 수 있는 취약점이다. OS command Injection은 웹 서버에 OS 명령을 실행하기 위해 웹 인터페이스를 사용한다. 사용자는 웹 인터페이스를 통해 OS 명령을 실행하기 위하여 운영체제 명령어를 입력한다 , 만일 이 명령어가 제대로 필터링..