보호되어 있는 글입니다.
보호되어 있는 글입니다.
SSP(Stack Smashing Protector)는 카나리를 이용해 스택이 망가졌는지 확인한다.카나리는 스택 버퍼와 스택 프레임 포인터 사이에 삽입되는 랜덤 값이다. 이 카나리는 main함수가 호출되기 전에 생성된 값을 스레드마다 전역 변수로 사용되는 TLS(Thread Local Storage)에 저장되는데, 모든 스레드가 하나의 카나리 값을 사용하기 위해서이다. security_init()함수는 _dl_setup_stack_chk_guard()함수에서 반환한 랜덤 카나리 값을 설정한다.Thread_SET_STACK_GUARD는 TLS영역의 header.stack_guard에 카나리 값을 삽입한다.그냥 뭐 이런게 있다고 생각한다. ssp 예제는 드림핵 문제를 풀어보자.https://dreamhack..
RTL이란 Return To Libc 라는 기법으로 libc에 들어있는 함수를 불러와 실행시키는 방법이다.PLT와 GOT에 대해 알아야 하는데 https://watchout31337.tistory.com/152여기서 알아보자. rtl은 libc에 있는 함수의 주소를 이용해서 실행중인 코드에 존재하지 않는 함수를 사용할 수 있다.이 방법으로 스택이나 힙에서 쉘 코드 실행을 막아주는 dep을 우회할 수 있다. 쉘 코드를 실행할 필요 없이 함수 자체를 불러오는 방법으로. 이런 간단하지만 취약점이 있는 코드를 보자.strcpy함수로 argv[1]을 buf로 복사했다.하지만 길이를 체크하지 않기 때문에 취약점이 발생한다. buf의 크기인 128을 넘어 sfp와 ret를 조작할 수 있다. 이렇게 실행하면 이렇게 나..
buf의 크기는 0x40만큼이고, read함수를 이용해 0x400만큼을 buf에 입력한다. buf는 0x40만큼 받을 수 있는데 0x400만큼 입력하니 취약함. write함수로 fd가 1이니 sizeof(buf)만큼 buf를 출력한다. ROP는 현재 수행중인 프로그램 코드 안에 존재하는 함수가 ret에 닿기 전에 우리가 넣어놓은 어셈블리어들을 먼저 실행시키는 방법이다. ROP를 알기 위해서는 먼저 plt와 got의 개념을 알아야한다. https://watchout31337.tistory.com/152?category=906340 간단히 말하면 plt는 got의 위치를 가리키는 주소, got는 라이브러리에 있는 함수의 위치를 가리키는 포인터 주소.라고 생각 할 수 있겠다. plt -> got -> 라이브러..
pwntools를 이용하면 좀 더 편하게 어셈을 분석할 수 있다고 한다.예를 들어 gdb를 이용하면 직접 어셈을 분석해서 어디가 입력값의 시작이고, 변수의 위치를 파악해야 했는데 pwntools를 설치하면 이런 것들이 자동으로 분석된다. 이렇게 말이다. 일단 설치 방법은 1.apt-get install python2.7-dev python-pip -> pwntools는 python2.7버전을 이용한다.2.pip install pwntools3.apt-get install libcapstone-dev이렇게 설치하면 된다. 설치 완료 후 설치가 잘 됐는지 확인하는 방법은 파이썬을 실행해 주고 이렇게 모듈을 임포트해봐서 별 문제 없으면 잘 설치된 것이다. 이제 pwntools를 사용하는 방법을 알아보자. 지금..
출처 : https://bbolmin.tistory.com/33https://g-idler.tistory.com/57https://gdtbgl93.tistory.com/149https://bpsecblog.wordpress.com/2016/03/07/about_got_plt_1/ 먼저 프로시저가 뭔지 알아보자. 프로시저란?프로시저란 매개변수는 존재하지만 반환값이 없는 함수이다.특정 로직만 처리 후 종료한다. PLT와 GOT에 대해 알기전에 동적 링크와 정적 링크에 대해서도 알아야 한다. 정적링크와 동적 링크우리가 코드를 작성한 후 컴파일을 하는 과정에서 링킹이라는 단계가 필요하다. 링킹이란 단계는 printf()함수와 같이 헤더에 포함되어 있는 함수들을 불러와 오브젝트 파일과 연결한다. 여기서 오브젝트 ..
execve 함수에 대해 알아보자. int execve(const char *filename, char *const argv[], char *const envp[]);파일이름 파일인자의 포인터 환경변수의 포인터 execve는 filename이 가리키는 파일을 실행한다. 이 파일은 바이너리 실행파일이거나 스크립트 파일이여야 한다. argv와 envp는 포인터 배열로 filename의 인자로 들어간다. 마지막에 NULL문자열을 저장해야 한다. 위 코드는 /bin/sh를 실행시키는 코드다. 실행하면 이렇게 쉘이 실행되는걸 볼수 있다.
RTL(Return To Libc)란 무엇 일까? 1.개념RTL기법은 리눅스의 메모리 보호 기법 중 하나인 NX bit(Non eXecutable bit)를 우회하기 위해 사용되는 공격 기법이다. NX bit는 stack segment에서 execute(실행)권한을 제한함으로써,stack에 쉘 코드를 저장하고 이를 실행하여 악용되는 방법을 막는 보호 기법이다.(non-executable stack 보호 기법이라고도 한다.) 이 기법은 메모리에 미리 적재되어 있는 공유 라이브러리를 이용해 바이너리에 원하는 함수가 없어도공유 라이브러리에서 원하는 함수를 가져와 사용할 수 있다. 2.이해하기예를 보며 설명을 보자.system()함수를 실행해서 살펴보자.system()함수는 단순히 명령어를 호출만 하는 함수로서..
레이스 컨디션(Race Condition) 기법 프로그램이 임시파일을 만들 때 이미 같은 이름의 파일이 있으면 존재하는 임시파일을 지운 후 임시파일을 만들도록 프로그램을 만들었다. 그러나 파일을 검사하고 삭제하고 다시 임시파일을 만드는 과정에서도 간격이 존재한다. 프로그램을 실행하는 과정이다. 1. 프로그램 실행 2. 같은 이름의 파일 존재하는지 확인 3. 있으면 삭제, 없으면 건너뜀 4. 임시파일 생성 3번과 4번 사이의 간격에서 심볼릭링크 파일을 만든다. 딱 시간에 잡는 것은 불가능하므로 root 권한의 setuid가 걸린 프로그램을 여러 번 반복 실행하도록 하는 프로그램과 심볼릭링크를 여러 번 하는 프로그램 두 개를 만든다. 이 두 프로그램을 동시에 실행하면 실행되는 시간의 차이가 있으므로 3번과 ..
- Total
- Today
- Yesterday
- 단순선형회귀
- many-to-one
- automotive
- SOME/IP
- HTML
- 차량용 이더넷
- SVM
- 이상탐지
- 케라스
- many-to-many
- automotive ethernet
- json2html
- problem statement
- cuckoo
- PCA
- porks
- 로지스틱회귀
- AVB
- Python
- CAN-FD
- Ethernet
- AE
- 차량 네트워크
- AVTP
- 머신러닝
- 회귀
- 딥러닝
- one-to-many
- 논문 잘 쓰는법
- 크로스 엔트로피
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |