취약점 검사 방식?
-블랙박스 방식 : only binary (소스코드 X)
-화이트박스 방식 : 소스코드를 가진 상태에서 테스트 수행
리버스 엔지니어링 : 리버싱, 역공학
바이너리에서 소스코드를 복원하는 과정
[소스코드] - [어셈블리어] - [바이너리]
사용 분야 : 취약점 분석 / 악성코드 분석/ 버그 수정 / 소프트웨어 사용 제한 기능 제거 / 신기술 연구 / 디지털 포렌식
도구 : IDA ( 정적 분석 ) / OllyDbg(동적 분석) / hex editor / 자바 디컴파일러 ; jd-gui
1. 버퍼 오버플로우
: 버퍼에 지정된 크기보다 더 큰 데이터를 입력 -> 버퍼의 한계를 넘어서는 현상 (문자 배열의 경계 값 검사를 하지 않아 발생하는 취약점)
=> 공격자를 이를 이용하여 일부러 컴퓨터 시스템 내에서 프로그램이 사용하는 메모리 영역을 정해진 범위 밖까지 메모리가 넘치게 하여 프로그램의 실행 흐름을 바꾸거나 특정 데이터를 변조한다.
https://isc9511.tistory.com/119?category=990276
버퍼 오버 플로우 (BOF - Buffer OverFlow) 공격
* BOF 공격 : 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메모리 범위를 넘어선 위치에 자료를 읽거나 쓸 때 발생하며, 오작동 또는 악의적 코드를 실행할 수 있게 됨 BOF 종류 설명 Stack B
isc9511.tistory.com
쉘코드 = 쉘을 실행시키는 기계어 코드
버퍼 오버플로우 취약점을 이용하여 메모리에 쉘코드를 올려 return address에 쉘코드가 저장된 메모리의 주소로 덮어 씌워서 쉘을 실행시키는 공격
https://d4m0n.tistory.com/10
#프로세스 메모리 구조

- Code 영역 (= Text영역)
실행할 프로그램의 코드가 저장되는 영역. CPU는 이 영역에서 명령어를 하나씩 가져와 처리 - Data 영역
전역 변수와 정적 변수가 저장되는 영역. 이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸 - Stack 영역
지역변수, 매개변수, 리턴값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역.
함수 호출 시 할당되고 함수 반환 시 소멸, 로드할 때(컴파일 타임) 크기가 결정된다.
-> 위 세 영역은 컴파일할 때 data, stack 영역의 크기를 계산하여 메모리 영역이 결정된다.
- Heap 영역
동적 데이터 영역 - 메모리 주소 값에 의해서만 참조되고 사용되는 영역.
-> 프로그램 동작 시(런타임)에 크기가 결정된다.
[운영체제] 프로세스 메모리 구조
시스템은 프로그램을 실행할 때 해당 프로그램을 메모리에 로드합니다. 그 메모리 구조에 대해 알아보겠습니다!실행되고 있는 프로그램으로, 프로세스는 각 메모리 공간을 시스템으로부터 할
velog.io
#스택프레임
: 스택 영역에 차례대로 저장되는 함수의 호출 정보
함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소 값(return address), 함수에서 선언된 지역 변수 등이 저장됨 + 이전 프레임 포인터 ( saved frame pointer / old frame pointer ) ; 최상단 스택 프레임에서 바로 이전 단계의 스택 프레임의 시작점으로 이동할 때 필요한 주소 값
-> 스택 프레임 덕분에 함수의 호출이 모두 끝난 뒤에, 해당 함수가 호출되기 이전 상태로 되돌아갈 수 있다.


http://tcpschool.com/c/c_memory_stackframe
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
2. CTF를 위한 Linux basics
2-1. I/O
#what is xineted?
: xinetd(extended Internet daemon) : 오픈 소스 슈퍼 서버 데몬(많은 유닉스 계열 시스템에서 돌아감) - 인터넷 기반 연결을 관리한다.
기본 설정 파일 : /etc/xinetd.conf
서비스들의 설정 : /etc/xinetd.d 디렉터리에 저장됨
슈퍼 데몬 ??
네트워크 서버/클라이언트 구조에서 다양한 서비스( FTP, Telnet, SSH 등등 )의 서버 프로세스(데몬) 동작 방식의 공통점 : 실제 서비스를 제공하는 서비스 프로세스를 제외하고는 클라이언트의 접속 요청이 있을 때까지 대기하다가,
요청이 들어오면 해당 요청을 처리할 서비스 프로세스(자식 프로세스)를 실행하는 형태
==> 따라서 효율적인 서버 자원의 활용이라는 측면에서 공통적인 부분을 처리하는 슈퍼 데몬을 만듦 -> 개별 서비스를 등록 -> 클라이언트 요청은 슈퍼 데몬이 모두 처리 && 개별 서비스를 호출해주는 방식 등장
https://nevertrustbrutus.tistory.com/86
[Linux] 슈퍼데몬(xinetd) 이란? , 설치 방법
1. 슈퍼 데몬? standalone 방식 vs xinetd 방식 - 네트워크 서버/클라이언트 구조에서 다양한 서비스( FTP, Telnet, SSH 등등 ) 서버 프로세스(데몬) 동작 방식은 공통점이 있습니다. 실제 서비스를 제공하는
nevertrustbrutus.tistory.com
#redirection?
리눅스에서 프로그램은 보통 세 개의 파일 서술사를 열게 된다.
[표준 입력(standard input, STDIN), 표준 출력(standard output, STDOUT), 표준 에러(standard error, STDERR) ]
순서대로 파일 디스크립터(fild descriptor)는 0, 1, 2
-> 리다이렉션은(Redirection) 이러한 파일 서술자 중 하나 이상을 파일로 다시 지정하는 수단
> file
표준 출력(1)을 파일로 재지향
파일이 없으면 새로 만들고, 파일이 있으면 덮어쓴다.
>> file
표준 출력(1)을 파일로 재지향
파일이 없으면 새로 만들고, 파일이 있으면 파일의 끝에 덧붙인다.
2>&1
표준 에러(2)를 표준 출력으로 재지향
표준 에러도 표준 출력의 자격으로 보내진다.
< file
파일로부터 표준 입력(0)을 받도록 재지향
[ex]
ls -l aaa.txt > list_aaa는 ls -l aaa.txt 1> list_aaa와 같이 동작합니다. 여기서 숫자 1은 표줄 출력(stdout)을 의미함!!
# ls -l aaa.txt 2> list_aaa //2(표준 에러)가 리다이렉션 되어 list_aaa 파일의 내용으로 전달
# ls < aaa.txt //ls에 aaa.txt의 내용을 표준 입력으로 받기
https://gracefulprograming.tistory.com/100
[Linux] 재지향(Redirection)에 대한 이해
안녕하세요 피터입니다. 오늘은 리눅스의 I/O 재지향(redirection)에 대해서 설명드리겠습니다. 재지향은 파이프(pipe)와 더불어 리눅스의 명령어들을 훨씬 강력하게 무장시켜주는 역할을 하는 핵심
gracefulprograming.tistory.com
https://reakwon.tistory.com/115
[리눅스] 재지정, 리다이렉션(redirection: >, <)과 파이프(|) 개념과 쉬운 설명
재지정(Redirection) 리눅스에서 프로그램은 보통 세 개의 파일 서술사를 열게 됩니다. 바로 표준 입력(standard input, STDIN), 표준 출력(standard output, STDOUT), 그리고 표준 에러(standard error, STDERR)..
reakwon.tistory.com
#pipe, socket, tty
-pipe
[명령어의 입력 - 실행 - 결과]의 과정에서 첫 번째 명령어 파이프의 결과를 화면으로 출력하는 대신 다른 명령어 파이프로 흘러가도록 연결하는 역할
#cat /etc/passwd | grep mail //현재 시스템의 계정 정보를 표준 출력 + mail이라는 문자열이 들어간 라인만 필터링하여 출력
-> 파이프( | )를 사용하여 cat 명령어의 결과를 grep 명령어로 전달할 수 있습니다.
+) 쉘 프롬프트(Shell prompt)에서 한 번에 사용 가능한 파이프의 개수 제한 없음!!
https://gracefulprograming.tistory.com/92
[Linux] 파이프(pipe)에 대한 이해
개요 안녕하세요 피터입니다. 오늘은 리눅스의 파이프(pipe)에 대해서 설명드리겠습니다. 파이프는 재지향(redirection)과 더불어 리눅스의 명령어들을 훨씬 강력하게 무장시켜주는 역할을 하는
gracefulprograming.tistory.com
-socket
네트워크 통신을 하는 표준 방법으로 프로세스 간 연결의 종점

+) 소켓 통신에 필요한 주요 함수는 아래 링크 참조!
https://reakwon.tistory.com/81
[리눅스] 소켓(socket) 개념과 예제(connect, bind, listen, accept,send,recv 사용)
소켓(socket) 네트워크 통신을 하는 표준 방법으로 프로세스간 연결의 종점이라고 볼 수 있습니다. 기본적인 개념은 아래의 그림과 같습니다. 위의 그림은 TCP/IP에서의 인터넷 통신을 보여줍니다.
reakwon.tistory.com
-tty
콘솔 : 컴퓨터를 조작할 때 사용하는 입출력 장치 (명령 조작에 사용하는 애플리케이션이나 OS 자체)
-> 터미널 : 콘솔의 한 종류로 UI(Ctrl+Alt+T)로 사용할 수 있게 해주는 GUI(Graphic user interface) 프로그램이다. 일반적으로 키보드와 디스플레이로 구성됨
->TTY : 콘솔의 한 종류로 [Ctrl]-[Alt]-[F1 ~ F6] 키조합으로 사용 가능한 (OS에서 제공하는) 가상 콘솔.
실제 물리적인 장치가 연결된 것이 아니기 때문에 커널에서 터미널을 emulation 함.
백그라운드 getty 프로세스에 의해 login prompt 가 제공된다. /dev/tty[번호] 파일이 사용된다.

https://booolean.tistory.com/666
Linux - 콘솔, 터미널, TTY 이해하기
Linux - 콘솔, 터미널, TTY 이해하기 콘솔, 터미널, tty는 서로 깊은 연관을 갖고 있는데 본래 이것들은 컴퓨터와 상호작용을 위한 장비를 뜻한다. unix시스템의 기본적인 이용방법은 unix가 인스톨된
booolean.tistory.com
https://mug896.github.io/bash-shell/tty.html
TTY | Introduction
TTY 컴퓨터는 기본적으로 연산을 위한 입력장치와 출력장치를 가집니다. 지금은 기술이 좋아져서 노트북같은 경우 연산장치, 디스플레이 출력장치, 키보드 입력장치가 모두 같이 있지만 초기에
mug896.github.io
#stdin, stdout, stderr
- 표준 입력(stdin) = 0
- 표준 출력(stdout) = 1
- 표준 에러(stderr) = 2
#named pipe, domain socket
-named pipe
파이프( | )를 이용해 명령들을 연결하여 사용하거나 명령, 프로세스 치환을 사용하면, 명령 실행 중에 자동으로 pipe 가 생성되어 사용된 후 사라짐
-> 이때 생성되는 파이프를 이름이 없다고 해서 unnamed pipe 또는 anonymous pipe라고 한다.
이에 반해 named pipe는 직접 파이프를 파일로 만들어 사용!
shell에서 IPC (Inter Process Communication) 이 필요할 때 활용 가능하다.
named pipe는 파일과 동일하게 사용될 수 있는데, 파일과 다른 점??
▣ redirection을 이용해 데이터를 출력했을 때 - 파일은 데이터를 저장하는 반면,pipe는 저장하지 않는다.
=> 만약에 디스크 용량이 부족한 상태에서 용량이 큰 파일을 다루고자 할 때??
pipe를 이용하면 프로세스 중간에 임시파일을 만들지 않아도 되므로 디스크 사용을 피할 수 있다.
▣ pipe는 데이터를 저장하지 않기 때문에 파일 내용을 random access 불가능.
--> 파일을 open 한 후에는 처음부터 끝까지 한 번에 읽거나 써야 한다.
$ mkfifo /tmp/mypipe # 또는 mknod /tmp/mypipe p $ gzip --stdout -d dbfile.gz > /tmp/mypipe
다음은 mysql 프롬프트 상에서 실행하는 명령
#mysql> LOAD DATA INFILE '/tmp/mypipe' INTO TABLE tableName;
// gzip으로 압축돼 있는 mysql 데이터 파일을 압축 해제하여 mypipe로 출력하고 mysql 프롬프트 상에서 named pipe를 이용해 테이블에 로드하는 예
-domain socket
named pipe의 경우 프로세스 A 가 파이프에 값을 쓰면 프로세스 B 가 값을 읽을 수 있고, 프로세스 B 가 파이프에 값을 쓰면 프로세스 A 가 값을 읽을 수 있다.
-> 이것은 양방향 통신이 가능한 것처럼 보이지만, 프로세스 A 가 값을 쓴 후에 다시 자신이 파이프를 읽으면??
값이 읽힌 이후에는 프로세스 B는 값을 읽을 수 없다.
unix domain socket 은 named pipe와 같이 디렉터리에 socket 파일을 만들어서 시스템 내의 프로세스와 통신을 한다.
-> 이때 생성되는 socket 파일은 다른 프로세스가 접속할 때 사용하는 ip 주소와 같은 역할 !!
커널이 교통정리를 해주므로 socket에 연결된 하나의 FD 만으로도 양방향 통신 가능!!

==> UNIX domain socket은 일반적으로 named pipe 보다 유연하다!
- 둘 이상의 프로세스 통신 가능
(예: 여러 클라이언트 프로세스가 연결될 가능성이 있는 서버 프로세스) - 양방향
- 프로세스 간에 커널 확인 UID/GID 자격 증명 전달 지원
- 프로세스 간에 파일 설명자 전달 지원
- 패킷 및 순차 패킷 모드를 지원
이러한 많은 기능을 사용하려면, 당신은 사용할 필요가 send()/의 recv() 시스템 호출보다는 가족 write()/을 read().
https://mug896.github.io/bash-shell/named_pipe.html
Named Pipe | Introduction
Named Pipe | 파이프를 이용해 명령들을 연결하여 사용하거나 명령, 프로세스 치환을 사용하면 명령 실행 중에 자동으로 pipe 가 생성되어 사용된 후 사라지게 되는데요. 이때 생성되는 파이프를 이
mug896.github.io
#buffering
입/출력에 사용되는 read, write 시스템 콜은 기본적으로 버퍼를 사용하지 않는다( unbuffered ).
->매번 read, write 이 발생할 때마다 시스템 콜을 사용하는 것X
-> 데이터를 메모리(버퍼)에 읽어 두었다가 read가 발생하면 메모리에서 전달함
쓰기를 할 때는 버퍼가 찰 때까지 저장했다가 한 번에 쓰기를 하는 것 O (->효율적임)
데이터를 입력받고 연산 결과를 출력하는데 stream을 이용하는 명령들은 내부적으로 버퍼를 이용 ( grep, sed, awk...).
명령 실행이 바로 종료되면 버퍼에 있던 내용도 모두 출력되므로 문제가 없지만,
프로세스가 종료되지 않은 상태에서 출력을 지속한다면?? 버퍼와 관련해서 문제가 생길 수 있다.

프로세스 A 가 logfile에 로그를 append 하면 tail 명령으로 실시간으로 데이터를 추출해서 프린트하는 명령
-> 실행해보면 정상적으로 동작 X
프로세스 A 가 ERR 로그를 logfile에 append 했으므로 파일에는 로그가 존재함에도 불구하고,
grep, awk 명령을 거치면서 출력이 되지 않음. 나중에 로그가 쌓여서 출력할 데이터가 4096 bytes(page 크기)가 되면, 그때 한 번에 출력됨!!
https://mug896.github.io/bash-shell/buffering.html
Buffering | Introduction
Buffering 입, 출력에 사용되는 read, write 시스템 콜은 기본적으로 버퍼를 사용하지 않습니다 ( unbuffered ). 따라서 매번 read, write 이 발생할 때마다 시스템 콜을 사용하기보다는 데이터를 메모리( 버
mug896.github.io
2-2. Memory Layout
#page, segment
페이징(Paging)
- 논리(가상) 메모리는 페이지(Page)이라 불리는 고정 크기의 블록으로 나누어짐
물리 메모리는 프레임(Frame)이라 불리는 블록으로 나누어짐 ; 페이지과 같은 크기의 블록
(보조 메모리 역시 프레임과 같은 크기의 블록들로 나누어짐) - 사용자는 하나의 주소를 지정(하드웨어의 의해 페이지 번호와 변위로 분할)
- 페이지 테이블 - 각 페이지 번호 + 그에 해당하는 프레임의 시작 물리 주소를 저장
- 항상 프레임의 정수 배로 할당되는데, 이때 프로세스가 페이지 경계와 일치하지 않는 크기의 메모리를 요구하게 되면,
마지막 페이지 프레임은 전부 사용되지 않고 남아버리는 문제가 발생한다.(내부 단편화)
세그먼테이션(Segmentation)
- 페이징에서처럼 논리 메모리와 물리 메모리를 같은 크기의 블록이 아닌, 서로 다른 크기의 논리적 단위인 세그먼트(Segment)로 분할
- 사용자가 두 개의 주소로 지정(세그먼트 번호 + 변위)
- 세그먼트 테이블 - 각 세그먼트의 기준(세그먼트의 시작 물리 주소) + 한계(세그먼트의 길이)를 저장
- 서로 다른 크기의 세그먼트들이 메모리에 적재되고 제거되는 일이 반복되다 보면,
자유 공간들이 많은 수의 작은 조각들로 나누어져 못 쓰게 될 수도 있다.(외부 단편화)
https://jupiny.com/2017/03/28/paging-segmentation/
페이징(Paging)과 세그멘테이션(Segmentation)비교
페이징(Paging) 논리(가상) 메모리는 페이지(Page)이라 불리는 고정 크기의 블록으로 나누어지고, 물리 메모리는 프레임(Frame)라 불리는 페이지과 같은 크기의 블록들로 나누어짐. 보조 메모리 역시
jupiny.com
+) 보충 자료 - 참고!!
https://spacefordeveloper.tistory.com/174
페이징과 세그멘테이션
Paging vs Segmentation 가상 메모리를 관리하는 기법 가상 메모리 는 메모리에 로드된 즉, 실행중인 프로세스가 가상의 공간을 참조하여 마치 커다란 물리 메모리를 갖고 있는 것처럼 사용할 수 있도
spacefordeveloper.tistory.com
#kernel/user split

- 유저 영역(user space) : 프로그램이 동작하기 위해 사용되는 메모리 공간(stack, heap, bss, data, text 영역)
- 커널 영역(kernel space) : 운영체제를 실행시키기 위해 필요한 메모리 공간
https://jiravvit.tistory.com/entry/linux-kernel-1-%EC%BB%A4%EB%84%90kernel%EC%9D%B4%EB%9E%80-1
[linux kernel] (1) - 커널(kernel)이란?
1. 커널의 특징 및 개념, 이론, 부트로더 등 1-1. 커널이란? 운영체제를 사용자의 관점 혹은 시스템의 관점에서 살펴보자. 사용자의 관점에서 운영체제는, 컴퓨터를 사람이 사용하게 쉽게 여러가
jiravvit.tistory.com
#stack, heap, BSS, code segments(VMA)
스택 세그먼트 : 프로그램을 임시로 저장할 필요가 있거나, 사용자의 피호출 서브루틴(called subroutine)이 사용할 데이터와 주소를 포함한다.
힙 세그먼트 : 동적으로 할당된 메모리를 포함하고 있다. (일반적으로 BSS 세그먼트의 끝에서 시작한다)
BSS 세그먼트 : 초기화되지 않은 정적 데이터, 변수와 상수를 모두 포함한다.
전역 변수, 0으로 초기화되거나 소스 코드에서 명시적으로 초기화되지 않은 지역 정적 변수.
코드 세그먼트 : 텍스트 세그먼트라고도 한다. 실행될 기계 명령어 포함한다.
보통 첫 번째로 실행 가능한 명령어는 이 세그먼트의 맨 처음에 위치함. -> 운영체제가 프로그램 실행 시작을 위해 그 위치를 알고 있다.
일반적으로 읽기 전용이고 크기가 고정되어 있다. !!
데이터 세그먼트 : 프로그램에서 정의된 데이터, 상수, 작업 영역을 포함한다.
https://en.wikipedia.org/wiki/Data_segment
Data segment - Wikipedia
In computing, a data segment (often denoted .data) is a portion of an object file or the corresponding address space of a program that contains initialized static variables, that is, global variables and static local variables. The size of this segment is
en.wikipedia.org
https://karfn84.tistory.com/18
[어셈블리] 세그먼트(segment)란?
세그먼트(segment) - 세그먼트는 프로그램에 정의된 특정 영역으로, 코드, 데이터, 그리고 스택(stack)으로 알려져 있는 것을 포함한다. 한 세그먼트는 패러그래프 경계(paragraph boundary), 즉 16또는 hex
karfn84.tistory.com
#VDSO, vsyscall
vsyscall 또는 virtual system call :
특정 시스템 호출의 실행을 가속화하도록 설계된 메커니즘 - Linux 커널에서 최초이자 가장 오래된 메커니즘
->vsyscall 개념의 작동 원리?
Linux 커널은 일부 변수와 일부 시스템 호출 구현이 포함된 페이지를 사용자 공간에 매핑한다.
vsyscall은 vDSO 또는 virtual dynamic shared object로 대체 :
vsyscall과 vDSO 메커니즘의 주된 차이점??
vDSO는 메모리 페이지를 공유 객체 form의 각 프로세스에 매핑
vsyscall은 메모리에서 정적이며 매번 같은 주소를 가짐
(glibc에 동적으로 연결되는 모든 사용자 공간 응용 프로그램은 vDSO를 자동으로 사용 )
https://junsoolee.gitbook.io/linux-insides-ko/summary/syscall/linux-syscall-3
vsyscall and vDSO - linux-insides-ko
vdso_image 구조체의 이름에서 알 수 있듯이 시스템 콜 엔트리의 특정 모드에 대한 vDSO 이미지를 나타냅니다. 이 구조체는 항상 PAGE_SIZE (4096 바이트)의 배수인 vDSO 영역의 바이트 사이즈에 대한 정보
junsoolee.gitbook.io
#Libc 등 기타 라이브러리
libc == C 표준 라이브러리
위치 - 우분투 : /lib
libc.so.6 : libc의 중심이 되는 파일
GNU lib : 리눅스에서 보통 사용되는 libc , 약칭 glibc
https://athena7.tistory.com/entry/linux-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-libc%EB%9E%80
linux 프로그래밍 - libc란?
C 표준 라이브러리 ( C standard library ) 약칭 libc 위치 우분투 : /lib CentOS : /lib64 libc.so.6 : libc의 중심이 되는 파일 GNU lib : 리눅스에서 보통 사용되는 libc , 약칭 glibc 만드는 사람 리눅스 커널..
athena7.tistory.com
+) 보충 자료 - 참고!!
https://ko.wikipedia.org/wiki/C_%ED%91%9C%EC%A4%80_%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC
C 표준 라이브러리 - 위키백과, 우리 모두의 백과사전
C 표준 라이브러리(C standard library)는 C 언어를 위한 표준 라이브러리로서, ANSI C 표준에 의해 명시되었다.[1] 이것은 상위 집합인 C POSIX 라이브러리와 동시에 개발되었다.[2][3] ANSI C가 국제 표준화
ko.wikipedia.org
[Linux] 다른 버전의 Libc로 바이너리 실행 (run a program with another libc)
CTF에서 Pwnable 문제(remote)를 풀 때 간혹 libc도 같이 주어지는데, 이는 문제 서버에서 사용하는 libc version과 참가자들이 사용하는 libc의 버전이 다르기 때문에 문제 풀이에 참고하라고 주어지는 것
d4m0n.tistory.com
2-3. Dynamic Linking
#dll, so
#PLT, GOT
#PIE, relro
#ld-linux.so
#linkmap
#ret2dl?
2-4. Kernel
#ring0
#System call
#Addr_limit
#return 2 User
#Kptr_restrict
#SMEP/SMAP
'스터디 > 해킹실습2' 카테고리의 다른 글
| [취약점분석]buffer overflow, return oriented programming (0) | 2021.11.28 |
|---|---|
| [운영체제 보안] 컴퓨터 아키텍처 및 운영체제, 커널 아키텍처, 인터럽트, 시스템 콜, 프로세스, 보안 아키텍처, 리눅스 보안 (0) | 2021.11.01 |
| [암호 및 응용] 암호 알고리즘, 아스키코드, XOR, DES, AES, RSA, Diffi - Hellman 키 교환, 링크 암호화 vs 종단간 암호화 (0) | 2021.11.01 |
| [네트워크 보안] Dos 공격, Spoofing 공격 (0) | 2021.10.10 |
| [네트워크보안] HTTP, cookie, caching, DNS, soket programming (0) | 2021.10.03 |