2025/02 7

Android Security - exported 편

안드로이드에서 app component는 actiivties, servcies, broadcaset receivers, content providers가 있다.이 4가지 모두 entry point가 될 수 있다.  Activities [1] 역할: 사용자가 직접 interaction하는 UI를 제공[2] 보안: exported=true이면, 다른 앱에서 클래스 이름으로 activity를 시작 가능원래 바로 접근이 되어서는 안되는 activity가 켜질 수 있음 ex) am start -n com.android.banking/.ActivityName [3] 기본값: 기본적으로 exported=false[4] 관련 xml tag:  Services[1] 역할: 장기간 백그라운드 작업에 많이 사용[2] 보안:..

Security & Hacking 2025.02.16

command injection

command injection은 공격자의 controllable input이 쉘 실행 함수의 인자에 도달할때 발생한다.이러한 함수의 예로 system, execve, popen가 있는데, 명령어 삽입과 출력 관점에서 차이점에 대해서 정리한다. system()#include int main() { system("ls -l /home/"); return 0;} $ strace -f --trace=execve ./system_testexecve("./system_test", ["./system_test"], 0x7ffda5ff59e0 /* 27 vars */) = 0strace: Process 790 attached[pid 790] execve("/bin/sh", ["sh", "-c", "ls..

Security & Hacking 2025.02.11

CodeQL

본 글은 CodeQL의 입문자들에게 도움이 되고자 정리한 글입니다. [1] Database1.1) 다양한 분석 지원codeql에서는 data flow anlaysis, control flow analysis, taint anlaysis, range anlaysis를 수행할 수 있다. 와...database에는 abastrct syntax tree, data flow graph, control flow graph를 포함하고 있다. 언어별로 다른 scheme을 지원하니 걱정하지말고 사용하자 1.2) 라이브러리 지원Declaration, Statement , Expression, Type, Preprocessor class들을 지원 기본적으로, library(.qll)들은 stmt, expr 두 클래스들을 b..

Security & Hacking 2025.02.11

00_angr_find

대상 프로그램 분석password를 입력 받아서 complex_function()이랗는 함수를 통해 반환된 문자열을 "ILIUFVJF"와 비교하여 일치할 경우, "Good Job"을 출력한다. 따라서 "Good Job"을 출력하는 입력값을 찾는 것이 목표이다. 솔루션import angrimport sysdef main(argv): # Create an Angr project. # If you want to be able to point to the binary from the command line, you can # use argv[1] as the parameter. Then, you can run the script from the command # line as follows: # pyt..

Security & Hacking 2025.02.10

angr 핵심 개념

[1]  Projectangr로 분석할때 사용하는 object는 대부분 project object에 의존하기 때문에 만들어줘야한다. [2] Loadingbinary file을 va space 표현으로 바꿔야하는데 그걸 하는 녀석이 CLE이고, 로더이다. 해당 cle 객체(proj.laoder)로 va space에 대한 질의를 수행할 수 있다.[3]  The factoryangr에 많은 클래스가 존재하는데, 대부분의 클래스가 project가 초기화되어야한다. 그래서, 그냥 proejct.factory를 제공하고 그걸로 클래스 객체를 생성하든 하면된다.3.1) Blocksproject.factory.bloc()으로 basic block을 얻을 수 있다.  그리고, agnr는 basic block단위로 분석을..

Security & Hacking 2025.02.10

SSL Stripping

SSL StrippingSSL Stripping 이란 HTTPS 를 HTTP 로 downgrade시키는 공격 기법이다.장점은 브라우저에서 인증서 에러를 표시하지 않아 피해자는 실제 공격이 진행되고 있는지 모른다.SSL Stripping을 수행하면 평문 통신을 볼 수 있어서 개인정보들을 탈취할 수 있다.  동작 원리동작 원리는 mitm(e.g,. proxy, arp poisoning) 이 선행되어야한다. (1) mitm된 상황에서,(2) 공격자는 중간에서 https redirect 응답을 차단하고,(3) http로 downgrade 시켜서 클라이언트에게 응답을 준다. 이렇게 되면, 브라우저는 그냥 실제 원하는 서버와 잘 통신하고 있다고 생각한다.비록 실제 구조는 아래와 같지만 말이다. victim --(h..

Security & Hacking 2025.02.10

OOP 다형성

OOP 에서 상속, 다형성, 캡슐화 이 3가지가 키포인트다. 글쓴이는 C++보다 Java를 먼저 배웠는데,C++를 학습하면서, Java, Python 다형성 구현 측면에서 차이점이 있어서 정리한다. 본 글은 클래스의 업캐스팅에 대해서 알고 있다고 가정한다. Java보통 Java에서는 base 클래스를 상속 받아서 여러 클래스들을 구현한다.이때, derived 클래스에서 @override annotation을 사용하여 base 클래스의 method를 오버라이드한다.그리고 업캐스팅을 하고 base 클래스 인스턴스의 method를 호출하면, 자동으로 derived 클래스의 method를 호출한다.이러한 방식으로 Java에서는 다형성을 제공한다. class Base { void show() { ..

Development 2025.02.08