13. RTL(Return to Libc) > 자유게시판 1

본문 바로가기
사이트 내 전체검색

자유게시판 1

13. RTL(Return to Libc)

페이지 정보

작성자 최고관리자 댓글 0건 조회 2회 작성일 24-06-30 11:54

본문


13. RTL(Return to Libc)

sshohan contents are below.

References: 05-sshohan contents: Go Click
Other Blog: Blog ArtRobot (Title: 13. RTL(Return to Libc)) More ...
Publish Date: (2024-05-02|3:10 pm), Modified Date: (2024-06-30|8:54 pm)


--- Blog Post Contents
Node js - Prototype Pollution 취약점
2018년 Northsec의 Olivier Arteau가 발표 JS언어 고유의 프로토타입 체인 동작 원리를 이용해 웹 서버를 공격 속성설정 부분에서의 취약점 객체병합 부분에서의 취약점 객체복사 부분에서의 취약점 실제 공격 예시 서버 클라이언트 (Publish Date: 2022-11-08)

Redis EVAL(LUA) 취약점
https://github.com/aodsec/CVE-2022-0543 (Publish Date: 2022-11-01)

Blind SQLi - bypass Filtering, WAF
(Publish Date: 2022-10-30)

Blind SQLi - 한글 추출
(Publish Date: 2022-10-28)

03. Terraform - HCL 리소스 정의 및 프로비저닝
○ 여기서는 Terraform으로 인프라스트럭처 리소스를 선언하기 위하여, 프로바이더 중 AWS를 사용 ○ 과정 1. HCL 언어로 필요한 리소스 선언 2. 선언된 리소스들이 생성가능한지 계획(Plan)을 확인 3. 선언된 리소스들을 아마존 웹 서비스에 적용(Apply) ○ EC2와 RDS 리소스를 생성하기 위하여 4개의 리소스 aws_key_pair, aws_security_group, aws_instance, aws_db_instance 를 정의할 것 ○ AWS 프로바이더 정의 - 디렉터리 이름과 파일 이름에 대한 원칙은 없으며, HCL을 사용하기 위해선느 확장자가 tf 이어야함. - Terraform은 기본적으로 특정 디렉터리에 있는 모든 .tf 확장자를 가진 파일을 전부 읽어들인 후, 리소스 생성, 수정, 삭....... (Publish Date: 2022-09-04)

02. Terraform - 프로비저닝, 개념
○ Amazon AWS를 이용하여 웹 서비스를 배포하는 상황을 가정 ○ 절차 1. AWS 계정을 준비하고, API 키 설정 2-1. Infrastructure를 정의하는 HCL 언어로 필요한 리소스를 선언 2-2. 선언된 리소스들이 생성가능한지 계획(Plan)을 확인 2-3. 선언된 리소스들을 AWS에 적용(Apply) 3. 웹 어플리케이션을 배포 ※ 여기서 2단계는 생성하고자 하는 리소스 수 만큼 반복하면서 점진적으로 진행 ○ 기본 개념 1. 프로비저닝(Provisioning) - 어떤 프로세스나 서비스를 실행하기 위한 준비 단계 - 프로비저닝에는 크게 네트워크나 컴퓨팅 자원을 준비하는 작업과 준비된 컴퓨팅 자원에 사이트 패키지나 애플리케이션 의존성을 준비하는 단계가 있음 - 테....... (Publish Date: 2022-09-04)

01. Terraform - 설치
○ 개요 : IaC(Infrastructure as Code) 도구로 인프라스트럭처 관리 도구 ○ 프로비저닝(Provisioning) : 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비 -> Terraform은 프로비저닝을 코드로할 수 있게함. ○ 테라폼 설치(Install) - Mac OS - Windows OS, etc. -> https://www.terraform.io/downloads - 특정버전의 terraform을 사용하고 싶을 경우 -> https://releases.hashicorp.com/terraform/?_ga=2.34173473.1651083793.1496392362-1657749582.1486466048 출처 : https://www.44bits.io/ko/post/terraform_introduction_infrastrucute_as_code (Publish Date: 2022-09-04)

25. FSB(Format String Bug)
○ 포맷 스트링(Format String) [ 구성 ] [ 형식 지정자(Specfier) ] [ 너비(width) ] [ 파라미터(parameter) ] - 참조할 인자의 인덱스를 지정하며, 이 필드의 끝인 $로 표기 ○ FSB(Format String Bug) - write, puts, printf 등 문자열을 출력하는 다양한 함수 중, printf는 포맷 스트링(Format String)을 이용하여 다양한 형태로 값을 출력 - C에는 printf 외 "scanf", "fprintf", "fscanf", "sprintf", "sscanf" 등 다양한 포맷스트링 지원 함수가 있음. - 위 함수들은 포맷스트링을 채울 값들을 레지스터나 스택에서 가져오는데, 인자의 개수와 함수에 전달된 인자의 개수를 비교하는 루....... (Publish Date: 2022-08-22)

24. Dreamhack out_of_bound writeup
- 소스코드는 위와 같다. ○ 공격 시나리오 - read 함수로 입력을 받을 때 "/bin/sh" 문자열을 넣어준다. - scanf로 입력받는 값의 범위를 검증하지 않는 점을 이용하여 system 함수 실행 시 oob 취약점을 발생 시켜, read 함수로 입력 시켜준 name 변수의 주소를 가르키게 한다. ※ name 변수의 위치 : 0x804a0ac ※ command 변수의 위치 : 0x804a060 ※ offset(0x4C = 76) = 0x804a0ac - 0x804a060 ※ command 변수는 포인터의 포인터로 값이 주소를 가르켜야 한다 즉, read 변수에 [자신의 주소+4]인 0x804a0b0 을 대입 후, "/bin/sh"을 넣어준다. ○ PoC (Publish Date: 2022-08-09)

23. OOB(Out of Bounds) 취약점
○ 배열의 인덱스는 0부터 시작하는데, 프로그래밍할 때, 0번째 요소라고 하는 데서 발생하는 인지적 실수, 사소한 부등호 실수, 그리고 인덱스를 벗어나서 참조할 수 있어도 경고를 띄워주지 않는 컴파일러를 사용했을 때 OOB(Out Of Bounds) 취약점이 발생한다. ○ 인덱스 값이 음수이거나 배열의 길이를 벗어날 때 발생하는 취약점으로, 프로세스는 계산한 주소가 배열의 범위 안에 있는지 검사하지 않는 점을 이용 ○ OOB를 이용하여 임의 주소의 값을 읽으려면, 읽으려는 변수와 배열의 오프셋을 알아야 하며, ○ 배열과 변수가 같은 세그먼트에 할당되어 있다면, 둘 사이의 오프셋은 항상 일정하므로 디버깅을 통해 알아낼 수 있음. ○ 만....... (Publish Date: 2022-08-09)

22. Dreamhack hook writeup
- hook 문제는 Full RELRO가 설정되어 있어, Hook Overwrite 공격을 하여야할 것으로 보이며, - PIE는 설정되어 있지 않다. - read 함수로 값을 받아오고 long 값만큼의 값의 주소에 다음 8byte 값을 쓰게 하는 것으로 확인된다. ○ 공격 시나리오 - 먼저, stdout 주소를 알려주므로, libc에서 stdout 주소를 구하여, libc_base를 구한다. ※ stdout_offset = lib.symbols['_IO_2_1_stdout_'] libc_base = stdout_addr - stdout_offset - 우리가 덮어쓰고자 하는 hook은 "__free_hook"이므로, libc_base에 "__free_hook"의 주소를 더한다. ※ free_hook = lib.symbols['__free_hook'] + ....... (Publish Date: 2022-08-08)

21. Dreamhack oneshot writeup
- PIE가 적용되어 있고, Canary가 적용되어 있지 않으며, read 함수에서 오버플로우가 발생한다. - 스택에서 check 변수가 있는 위치는 0으로 되어야하며, - 처음에 stdout의 주소를 출력해주므로, libc에서 해당 주소의 offset을 구해 base를 구할 수 있다. ※ stdout_offset = lib.symbols['_IO_2_1_stdout_'] ※ libc_base = stdout_addr - stdout_offset - oneshot gadget을 구한다. - 버퍼는 rbp-0x20에 위치 ○ PoC (Publish Date: 2022-08-05)

20. Dreamhack Hook Overwrite Write up
- 원본 C 소스코드는 위와 같으며, Canary, Full RELRO, NX, PIE가 모두 적용되어 있는 것을 확인할 수 있다. - 소스코드 內 read 함수에서 overflow가 발생하나, 메모리 보호기법을 우회하여 RET를 변조하긴 어려워 단순히 Stack에 존재하는 값을 조회하는데 사용하여야할 것으로 보이며, - addr 변수에 주소를 받아, value로 받은 값을 쓰는 로직과, - free 함수 호출 시 인자로 받는 변수의 주소를 받는 로직이 있다. ○ 공격 시나리오 - read 함수를 이용하여 Stack Overflow를 발생시켜, RBP+8에 위치한 RET 값인 __libc_start_main+231의 주소를 구해서, [__libc_start_main+231의 주소]-(libc.symbols['__libc_start_main']+231....... (Publish Date: 2022-08-05)

19. Hook Overwrite
Hooking : 어떤 함수, 프로그램, 라이브러리를 실행하려 할 때 이를 가로채서 다른 코드가 실행되게 하는 기법 Hook Overwrite : 바이너리에 존재하는 훅을 덮어써서 특정 함수를 호출할 때, 악의적인 코드가 실행되도록 하는 기법(maaloc, free, realloc 등의 함수에서 주로 사용, Full RELRO 우회0) one_gadget : 실행하면 셸이 획득되는 코드 뭉치 "david942j"가 만들어놓은 툴을 사용하면 쉽게찾을 수 있다. https://github.com/david942j/one_gadget (Publish Date: 2022-08-04)

18. PIE(Position-Independent Executable)
1. PIC(Position-Independent Code) - 리눅스에서 ELF는 실행파일과 공유 오브젝트(Shared Object, so)로 두가지가 존재 - 공유 오브젝트는 기본적으로 재배치(Relocation)이 가능하도록 설계되어 있는데, 컴퓨터 과학에서는 이런 성질을 만족하는 코드를 PIC라고 부름. - 위와 코드에서 PIC가 적용된 코드는 문자열을 받아오는데 "lea rdi,[rip+0xa2]"라는 코드를 통해 받아오며, 이는 현재 코드 위치로 부터 상대적인 부분에 위치한 문자열을 받아오는 것(Relative Addressing)으로, 바이너리가 무작위 위치에서 실행 가능하다. 2. PIE(Position-Independent Executable) - ASLR이 코드 영역에도 적용되도록하는 보안성 향상을 위한....... (Publish Date: 2022-08-04)

17. RELocation Read-Only(RELRO)
1. Lazy Binding : 함수가 처음 호출될 때 함수의 주소를 구하고, 이를 GOT에 적는 과정(Runtime Resolving) → Lazy Binding을 하는 바이너리는 실행 중에 GOT 테이블을 업데이트할 수 있어야 하므로 GOT에 쓰기권한이 부여 2. ELF의 데이터 세그먼트에는 프로세스 초기화 및 종료와 관련된 ".init_array", ".fini_array"가 있음. → 해당 영역은 프로세스의 시작과 종료에 실행할 함수의 주소를 저장하고 있는데, 여기에 공격자가 임의로 값을 쓸 수 있을 경우 프로세스의 실행흐름이 조작 3. RELRO(RELocation Read-Only) : 2.의 문제를 해결하고자 개발된 것으로, RELRO는 쓰기권한이 불필요한 데이터 세그먼트에 쓰기권....... (Publish Date: 2022-08-04)

16. Dreamhack basic rop 32bit(2) Write up
- 소스코드를 확인한 결과, basic rop 64bit와 동일한 코드로 확인되며, read 함수에서 BOF 취약점이 발생 - 바이너리 파일은 canary가 미적용되어 있으나, NX가 적용되어 있다.(ROP) - 이번에도 rop-64bit 문제와 마찬가지로, write 함수의 GOT을 Overwrite 하는 방식으로 공격을 수행한다. - 함수 호출순서 : puts(write_got)→read(0,write_got,~)→write('/bin/sh') 하면될것같다. - 입력받는 buffer는 ebp-0x44 위치에 있다. - 먼저 PLT를 확인한다. ※ puts_plt : 0x8048420 ※ read_plt : 0x80483f0 ※ write_plt : 0x8048450 - 다음을 Overwrite할 GOT를 확인한다. ※write_got : 0x804a024 - ROP Gadget의 위치를 찾는다 ※ 0....... (Publish Date: 2022-08-04)

15. Dreamhack basic rop 64bit(1) Write up
- 주어진 basic_rop_x64 파일에 대한 checksec 확인한 결과 NX가 적용되어 있으나, Canary는 미적용인 상태로 확인된다. - basic_rop_x64 바이너리의 소스코드는 위와 같으며, read 함수에서 BOF 취약점이 존재하는 것을 확인하였다. - ROP를 통한 GOT Overwrite를 하여, system 함수를 실행시키면 될 것으로 보인다. - 여기서는 write 함수의 GOT을 Overwrite하여 공격을 실시할 예정이다. - gdb를 통하여 바이너리의 plt와 got을 확인한다. # puts_plt : 0x4005c0 # write_plt : 0x4005d0 # write_got : 0x601020 # read_plt : 0x4005f0 // write_got에 system 주소를 쓸 때 필요! - 버퍼는 rbp로부터 -0x40 위치에 존재한다. - ROPGadget을 이....... (Publish Date: 2022-08-03)

14. ROP(Return Oriented Programming)
○ 다수의 리턴 가젯을 연결해서 사용하는 공격 기법 ○ 13. RTL 공격 방식에서 system 함수의 PLT를 이용하여 공격을 하였지만, 현재는 여러 개발 도구에서 해당 함수의 사용을 지양하도록 하고 있어, 실제 바이너리에서 system 함수의 PLT가 포함되어 있을 가능성 ↓ ○ 따라서, 현실적으로 ASLR이 걸린 환경에서 system 함수를 사용하려면 프로세스에서 libc가 매핑된 주소를 찾고, 그 주소로부터 system 함수의 오프셋을 이용하여 함수의 주소를 계산 ○ ROP 방식은 상황에 맞춰 Return to Library, Return to dl-resolve, GOT Overwrite 등의 페이로드를 구성 가능 ○ ROP 페이로드는 리턴 가젯으로 구성되는데, ret 단위로 여러 코드가 연....... (Publish Date: 2022-08-03)

13. RTL(Return to Libc)
○ NX(None eXecutable) 메모리 보호기법으로 인하여 버퍼에 주입한 셸코드를 실행하기가 어려워졌으나, BOF 취약점 발생 시 RET를 덮는 것은 가능 ○ 공격자들은 실행 권한이 남아있는 코드 영역으로 반환 주소를 덮는 공격 기법을 고안 ○ 프로세스에 실행 권한이 있는 메모리 영역은 일반적으로 바이너리의 코드영역과 바이너리가 참조하는 라이브러리의 코드영역 ○ RTL은 libc 라이브러리의 함수들로 NX를 우회하고 셸을 획득하는 공격 기법을 개발하였고 이를 Return to Libc라고 명명 ※ Return to PLT 공격 - ASLR이 걸려있어도 PIE가 적용되어 있지 않다면 코드 세그먼트와, 데이터 세그먼트의 주소는 고정되고 그로 인하여 PLT도 주소....... (Publish Date: 2022-08-02)

---
추천0

댓글목록

등록된 댓글이 없습니다.

회원로그인

접속자집계

오늘
2,535
어제
3,645
최대
3,753
전체
761,149

그누보드5
Copyright © tvcommercialsong.com All rights reserved.