오브의 빛나는 별

취약점 분석 본문

해킹

취약점 분석

오브의 별 2021. 11. 21. 18:44
반응형

안녕하세요, 오브입니다.

오늘은 취약점 분석과 CTF에 필요한 개념, 버퍼오버플로우 실습을 위한 리눅스 기본 개념에 대해 알아보겠습니다. 

CTF에 필요한 개념
I/O: input/output
- xinetd: 오픈 소스 슈퍼 서버 데몬. 유닉스 계열. 인터넷 기반. 유닉스와 리눅스 모두에서 명령어와 옵션이 같음. /etc/xinetd.d 디렉터리에 서비스 설정 파일 있음. 
- redirection: 표준 입력의 입력선, 표준 출력의 출력선, 표준 오류 출력선 변경. 보통 입출력선은 단말 장치로 되어 있으나 셸에서 희망하는 것 지시 가능. 보통 네 종류가 있음. "<", "<>"표준 입력선 변경. ">", ">>" 표준 출력선 변경
- pipe: 두 개의 프로그램을 연결해주는 연결통로. "|" 문자 사용. 
- socket: 서로 다른 통신 환경 연결. ex) 전기선과 전구를 전구 소켓이 이어주는 것
- tty: 현재 사용하고 있는 단말기 장치의 경로명과 파일명을 나타냄. 보통 텔넷 등에서 동일한 계정으로 여러개 로그인한 경우 확인 시 유용
- 표준 스트림: 특정한 프로그래밍 언어 인터페이스 뿐만 아니라 윈도우 및 유닉스 계열 운영체제에서 컴퓨터 프로그램과 그 환경 사이에 미리 연결된 입출력 통로를 가리킴. 일반적으로 유닉스에서 동작하는 프로그램은 실행 시 세 개의 스트림이 자동으로 열림. Stdin: 입력을 위한 스트림. Stdout: 출력을 위한 스트림. Stderr: 오류 메시지를 출력하기 위한 스트림.
- named pipe: 이름 파이프. 유닉스 운영 체제에서 한 프로세스의 출력을 다른 프로세스의 입력으로 연결해주는 파이프의 하나로서 파이프 구실을 하는 파일이 명시적으로 존재하여 이 파일을 통해서 ㅔ이터 전달. 프로세스 간 통신의 한 수단인 파이프에 이름을 붙여 각 파이프 구분.
- UDS: Unix Domain Socket. 네트워크 통신이 필요없는 host 내부 프로세스 간 통신에 사용. TCP/UDP는 네트워크 통신을 하는 반면, UDS는 파일 시스템 내부의 파일을 이용해 통신. TCP/UDP system call을 그대로 사용 가능. 
- buffering: 사전적 의미로 완충, 완화장치. 두 개의 매개 사이에서 충돌 완화하는 장치. 컴퓨터 시스템에서의 처리를 어떤 장치로부터 다른 장치로 데이터를 일방통행으로 전송할 때 양쪽의 속도차를 수정하기 위해 중간에 데이터를 일시적으로 기억 장치에 축적하는 방법. 동영상 파일에서 네트워크 상황에 따라 끊김 현상이 발생할 수 있는데 이때 버퍼링을 통해 일시적으로 데이터를 기억해서 다음 데이터와 원활하게 연결시킴. 
Memory Layout
- Page: 주기억 장치의 물리적 용량을 구분하는 단위. 주기억 장치와 보조 기억 장치 사이의 전송 단위
- Segment: 프로그램 실행 시 주기억 장치 상에 적재되는 프로그램의 분할 가능한 기본 단위. 프로그램을 한 번에 내부 기억 장치에 저장할 수 없는 경우 짧은 단위로 분할하고 필요한 세그먼트만 주기억 장치 상에 저장. 그 부분의 실행이 종료하는 시점에서 다음에 실행하는 세그먼트 호출. 이렇게 세그먼트를 치환하여 적제하는 것을 오버레이라고 함
- Kernel/ User split: 커널은 OS 프로그램이 사용. 사용자 모드는 응용프로그램이 사용
- Stack: 후입선출(LIFO). 삽입과 삭제가 리스트의 한쪽 끝에서만 수행되는 조건. 선형 자료 구조. 삽입과 삭제가 일어나는 리스트의 끝을 top, 다른 한쪽 끝을 botton이라고 함. 지역변수, 매개변수, 리턴 값 등 잠시 사용되었다가 사라지는 데이터 저장 영역
- Heap: 트리 구조. 리스트 또는 2진 트리의 일종. 프로그램들이 요구하는 블록의 크기나 요구/횟수 순서가 일정한 규칙이 없음. 기억 장소는 pointer 변수를 통해 동적으로 할당. 메모리 주소 값에 의해서만 참조되고 사용되는 동적 데이터 영역.
- BSS(Block Started by Symbol): 초기화되지 않은 데이터 세그먼트. BSS 세그먼트의 데이터는 프로그램 실행과 함께 커널에 의해 0으로 초기화됨. 초기화되지 않은 데이터는 데이터 세그먼트 공간의 끝에서 시작되며 명시적인 초기화가 없는 모든 전역 변수와 Static 정적 변수 포함
- Code: Text Segment 혹은 Code Segment라고 불림. 실행 가능한 명령어가 포함된 오브젝트 파일 또는 메모리 공간을 할당받은 프로그램 섹션 중 하나. 읽지 전용인 경우가 많음. 일반적으로 힙 또는 스택 메모리 공간 아래에 위치. 프로세스가 종료될 때까지 유지

http://www.it.uu.se/education/course/homepage/os/vt18/module-0/mips-and-mars/mips-memory-layout/

 

취약점 분석 개요
취약점 검사 방식
- 블랙박스 방식: 소프트웨어가 실행중인 환경에서 소프트웨어 소스코드보다는 실행 과정에서의 다양한 입출력 데이터의 변화 및 사용자 상호작용에 따른 변화를 점검
- 화이트박스 방식: 소프트웨어가 실행되지 않는 환경에서 소스코드의 의미를 분석하여 소프트웨어 결함을 찾아냄
리버스 엔지니어링
- 소프트웨어 공학의 한 분야. 이미 만들어진 시스템을 역으로 추적하여 처음의 문서나 설계기법 등의 자료를 얻어내는 일. 소프트웨어 유지보수 과정 일부. 역공학.
- 취약점 분석, 악성코드 분석, 버그 수정, 소프트웨어 사용 제한 기능 제거, 신기술 연구, 디지털 포렌식 등에 사용
- 도구: IDA Pro, OllyDBG, HxD Editor, 자바 디컴파일러
반응형

'해킹' 카테고리의 다른 글

Buffer Overflow와 Return Oriented Programming  (0) 2021.11.28
암호 및 응용2  (0) 2021.11.07
네트워크3, 암호 및 응용1  (0) 2021.10.10
네트워크2  (0) 2021.10.02
네트워크1  (0) 2021.09.19