[컨테이너 보안] 2-2장. 컨테이너 탈출 (CVE-2019-5736)
2022. 12. 27. 00:10
기술보안/컨테이너
개요 컨테이너가 대중화되기 시작한 시점에서 가장 크리티컬했으며 컨테이너 탈출의 시작을 알린 취약점은 CVE-2019-5736 이라고 할 수 있다. 해당 취약점을 재현해보고 컨테이너의 기반 기술인 runC에 존재하는 취약점을 악용하여 컨테이너를 탈출해보자. runC란? runC는 container의 생성/실행 등을 위한 기본적인 CLI 도구이며 Docker, containerd, Podman 및 CRI-O가있는 컨테이너의 저수준 컨테이너 런타임으로 사용된다. [저수준(Low-level) 컨테이너 런타임 OCI Runtime으로 부르기도 하는 Low Level Container Runtime은 오로지 컨테이너를 실행하는 기능만 제공한다 컨테이너는 linux namespace와 cgroups를 통해 구현된다...
FridaLab Write Up - Challenge 08. 'Check' 버튼의 텍스트를 'Confirm'으로 변경하라.
2022. 12. 15. 18:27
워게임/FridaLab
코드 분석 사진과 같이 Button의 값은 여러 파일을 통해 알아낼 수 있다. res/layout/activity_main.xml에서 정의된 android:text의 값을 confirm으로 변경해야 목표에 도달할 수 있다. Write Up Java.perform(() => { console.log("\n* Hooking Start *") var challenge08 = () => { Java.choose('uk.rossmarks.fridalab.MainActivity', { onMatch: (instance) => { var R_id = Java.use('uk.rossmarks.fridalab.R$id') var string = Java.use('java.lang.String') var button = ..
FridaLab Write Up - Challenge 07. check07Pin()의 chall07 변수 검증을 무차별 대입 공격을 통해 통과하라.
2022. 12. 15. 18:24
워게임/FridaLab
코드 분석 MainActivity에서 challenge_07.setChall07()을 호출하여 chall07에 랜덤한 값을 삽입 후 challenge_07.check07Pin()에서 검증을 수행한다. 반복문을 돌리기 위해 chall07 변수에 삽입될 값의 범위를 한번 알아보겠다. Math.random() * 9000이므로, 0 ~ 8999까지의 범위를 가진다. 하지만 뒤에 1000이 더해져서 최소 범위는 1000부터 시작이 된다. 즉, chall07의 값 범위는 1000 ~ 8999이다. 문제의 목표는 무차별 대입 공격을 수행하여 검증을 통과하라고 하였으니, MainActivity.chall07()의 파라미터에 반복문을 이용하여 값을 넣어서 검증을 통과하면 될 것이다. Write Up Java.perfo..
FridaLab Write Up - challenge 06. 적절한 값을 사용하여 10초 후 chall06()를 동작시켜라.
2022. 12. 15. 18:23
워게임/FridaLab
코드 분석 MainActivity에서 Challenge_06 클래스의 메소드들을 사용되는 것을 확인할 수 있다. 최종적으로 challenge_06 클래스의 confirmChall06 메소드를 사용하여 True를 반환 받는 것이 목표이다. 일단 confirmChall06 메소드에서 True를 받기 위해서 사진과 같은 조건을 만족해야한다. 두 번째 조건인 현재 시간이 challenge_06.startTime()이 호출된 시간보다 10초 더 크면 되는 것이니, challenge_06.startTime() 호출 후 10초 뒤에 challenge_06.confirmChall06()을 호출하면 해결된다. 첫 번째 조건은 challenge_06.addChall06()의 chall06 변수에 삽입된 값을 그대로 cha..
FridaLab Write Up - Challenge 05. 항상 chall05()에 "frida"를 전송하라.
2022. 12. 15. 18:20
워게임/FridaLab
코드 분석 MainActivity에서 CHECK 버튼 클릭 시 chall05()를 호출하는 것을 확인할 수 있다. 하지만, 호출 시 파라미터 값으로 문자열 "notfrida!"을 넘김으로 completeArr의 4번째 인덱스 값이 0으로 지정된다. Write Up Java.perform(() => { console.log("\n* Hooking Start *") var challenge05 = () => { var MainActivity = Java.use("uk.rossmarks.fridalab.MainActivity") MainActivity.chall05.overload('java.lang.String').implementation = function (arg) { this.chall05("frid..
FridaLab Write Up - Challenge 04. chall04()에 "Frida"를 전달하라.
2022. 12. 15. 18:18
워게임/FridaLab
코드 분석 MainActivity에서 확인한 chall04()은 chall02()처럼 선언은 되어 있지만, 호출이 안 된 메소드이다. challenge 02의 풀이 방식에서 chall02() 호출 시 문자열 "frida"를 파라미터 값으로 넘겨주면 해결될 것으로 판단된다. Write Up Java.perform(() => { console.log("\n* Hooking Start *") var challenge04 = () => { Java.choose("uk.rossmarks.fridalab.MainActivity", { "onMatch": (instense) => instense.chall04("frida"), "onComplete": () => console.log("challenge_04 solv..
FridaLab Write Up - Challenge 03. Chall03()의 리턴 값을 True로 만들어라.
2022. 12. 15. 18:17
워게임/FridaLab
코드 분석 chall03 메소드는 false를 리턴하고 있었다. 해당 리턴 값인 false를 true로 리턴하는 것으로 변경하는 것이 Challenge 03 문제이다. Write Up Java.perform(() => { console.log("\n* Hooking Start *") var challenge03 = () => { var MainActivity = Java.use("uk.rossmarks.fridalab.MainActivity") MainActivity.chall03.overload().implementation = () => true console.log("challenge_03 solved!") } // Hooking Function Call challenge03() }) 간단하게 Ov..
FridaLab Write Up - Challenge 02. chall02()를 실행 시켜라.
2022. 12. 15. 18:14
워게임/FridaLab
코드 설명 MainActivity에서 chall02 함수가 정의되어 있지만, 호출하는 코드가 없는 것을 확인되었다. chall02 함수는 completerArr의 1번 인덱스의 값에 1을 지정하는 것뿐인 함수였다. Write Up Java.perform(() => { console.log("\n* Hooking Start *") var challenge02 = () => { Java.choose("uk.rossmarks.fridalab.MainActivity", { "onMatch": (instense) => instense.chall02(), "onComplete": () => console.log("challenge_02 solved!") }) } // Hooking Function Call chal..