[linux] 3. NX(with DEP)에 대하여 포스팅 썸네일 이미지

Coding_Algorithm/Operating System

[linux] 3. NX(with DEP)에 대하여

NX(with DEP) Non-Executable / Data Execution Protection Linux Memory Protection - 3 1. What is NX/DEP? NX와 DEP는 둘 다 같은 개념의 보호기법으로 각각 Non executable과 Data Execution Protection의 약자입니다. 각각의 의미를 읽어보면 한 마디로 '실행시키지 않는다'입니다. 좀 더 자세히 말하자면 'heap과 stack과 같이 buffer overflow 공격에 이용되는 메모리 공간에 있는 코드를 실행시키지 않는다'는 것이죠. 즉 쉽게 말해 쉘코드를 버퍼에 삽입해도 실행시키지 않는다는 뜻입니다. NX와 DEP의 차이점은 단순히 DEP는 같은 개념이지만 윈도우 플랫폼에서 사용되는 보안 기술이라..

2020.10.13 게시됨

[linux] 2. Canary에 대하여 포스팅 썸네일 이미지

Coding_Algorithm/Operating System

[linux] 2. Canary에 대하여

Canary Linux Memory Protection - 2 1. What is Canary? **Stack Smashing Detected** 빼앵앵애ㅐㅇ애에에ㅔㅔㄱ Canary기법이란 'buffer와 SFP(Stack Frame Pointer) 사이에 buffer overflow를 탐지하기 위한 임의의 데이터를 삽입하는 기법'입니다. 왜 이런 걸 넣냐구요? 기본적인 스택 구조와 카나리가 활성화된 스택 구조의 차이점을 봅시다. 왼쪽은 Canary가 꺼져있고, 오른쪽은 Canary가 활성화된 스택입니다. buffer와 SFP사이에 Canary라는 것이 생겼죠? 많은 공격기법은 eip 레지스터를 변경하는 것을 목표로 두고 있는데, 그 중 다수의 기법들이 RET를 변경합니다. 그러나 Canary로 Memo..

2020.10.13 게시됨

[linux] 1. ASLR(Adress Space Layout Randomization)에 대하여 포스팅 썸네일 이미지

Coding_Algorithm/Operating System

[linux] 1. ASLR(Adress Space Layout Randomization)에 대하여

ASLR Address Space Layout Randomization Linux Memory Protection - 1 1. What is ASLR? 자 오늘은 리눅스 메모리 보호기법 첫 번째 입니다. ASLR에 대해서 배워 볼 건데요, 일단 ASLR이란 Address Space Layout Randomization의 줄임말입니다. 직역하면 "주소 공간 배열 무작위화" 입니다. 말 그대로 주소를 매번 실행할 때마다 무작위화시켜 공격을 방해합니다. 이때 어떤 주소를 랜덤화시키는지가 중요합니다. ASLR은 데이터영역만 무작위화시킵니다. (참고)같은 방법으로 바이너리 영역을 무작위화시키는 보호기법은 PIE입니다. 참고로 데이터 영역은 대표적으로 스택, 힙, 라이브러리 영역을 포함하고, 다른 영역들도 있긴 한..

2020.10.11 게시됨

[linux] 0. 메모리 보호기법 - abstract 포스팅 썸네일 이미지

Coding_Algorithm/Operating System

[linux] 0. 메모리 보호기법 - abstract

이번주는 메모리 보호기법에 대해서 서술해보려고 합니다. 일단 메모리 보호기법 자체에 대한 정의를 알아봅시다. 메모리 보호는 컴퓨터 메모리의 사용을 제어하는 방법이며 모든 운영 체제에서 중요한 쟁점사항 중 하나이다. 운영 체제에서 실행하고 있는 프로세스가 자신에게 할당되지 않은 영역의 메모리에 접근하는 것을 막는 것이 메모리 보호의 주된 목적이다. 이를 통해 프로세스 내의 버그가 다른 프로세스의 동작에 영향을 미치는 것을 예방하며 악성 소프트웨어가 시스템에서 허가되지 않은 접근권한을 갖고 시스템에 영향을 끼치는 것을 막아준다. -Wikipedia 네. 뭐 위키는 저렇다는데 쉽게 얘기하면 메모리 사용을 제어하는 방법입니다. 시스템 해킹을 배워보신 분이라면 사용하길 원하는 함수/메모리의 주소, 입력해야 하는 ..

2020.10.11 게시됨

[linux] gdb에서 core사용하기 포스팅 썸네일 이미지

Coding_Algorithm/Operating System

[linux] gdb에서 core사용하기

GDB에서 core 사용하기 gdb로 분석을 하다보면, 내가 맞다고 생각했던 payload가 답이 아닐 때가 있습니다. 특히 Segmentation Fault같은 에러가 발생하면 뒷목잡기를 유발하죠. 이는 파일이 직접 실행되면서 실제 동적 프로세서 주소와 차이가 있기 때문입니다. 이럴 때 사용할 수 있는 core파일 이라는 게 있습니다. 간단히 설명하자면, 어떤 프로그램이 각종 crash를 발생하면서 프로그램을 종료했을 때, 종료하기 전 상황을 core라는 파일로 남깁니다. 그럼 이 core파일 기준으로 분석을 해준다면, 이는 동적 프로세서가 직접 할당한 주소이기 때문에, 오차가 발생할 일이 없다는 것이죠. 우선 문제 예시는 LOB wolfman입니다. 우선 파일을 복사해줍니다. 복사를 해주는 이유는 자..

2020.07.17 게시됨

Coding_Algorithm/Operating System

[linux] 디버깅할때 자주 쓰이는 명령어들

F9: 실행(or breakpoint/entrypoint) F2: breakpoint설정 ctrl+F2: 재시작 enter+F4: 함수에 진입하기 F8: 한줄씩 실행 push ebp moc ebp, esp sub esp, c===프롤로그 push(인자) : 스택에 인자를 집어넣음 ㄴpush exc인경우: 똑같이 4바이트 대입(최적화) mov A, B: B에 있는 것을 A에 대입해라 lea A, B: B의 주소값을 A에 대입 sub A, B: B의 값만큼 감산(subtraction) dword ptr: 4byte데이터임을 나타냄 word ptr: 2바이트 데이터임을 나타냄 byte ptr: 1바이트 데이터임을 나타냄 add A, B: B의 값을 A에 더하기 imul A, B: A에다가 B를 곱하기(부호상관..

2019.05.24 게시됨