스푸핑
- 속이는 것
① IP를 속이는 것 → IP 스푸핑
② Domain을 속이는 것 → 문자 주소, 숫자 주소 (DNS), DNS 스푸핑
③ MAC 주소를 속이는 것 → ARP 스푸핑
ARP 스푸핑
- IP 주소값 → MAC 주소값 요청
ARP 스푸핑 보안 대책 → MAC 주소의 static(고정) 한 설정 컴파일
▶ arp - a로 MAC 테이블을 확인해보면 뒷부분에 PERM(Permanent) 옵션에 붙어 있는 것을 확인할 수 있다.
이렇게 설정된 IP와 MAC 주소 값은 ARP 스푸핑 공격이 들어와도 값이 변하지 않는다
IP 스푸핑
- 시스템 간의 트러스트 관계(믿는 관계)를 이용한 것
IP 스푸핑 막는 방법
→ 트러스트 관계를 쓰지 마라
순간의 편의를 위해서 보안을 포기한 것, 인증 과정을 걸쳐라
DNS 스푸핑
WWW.NAVER.COM → 오류( EX. 쇼핑몰 사이트로 들어가거나 게임 사이트로 들어가질 때) → 도메인을 속임(naver 도메인이 아니라 게임 사이트 도메인으로 연결시켜줌)
스니핑(도청)
sniff - v. 코를 킁킁거리다
→ 코를 킁킁거리듯이 정보를 데이터 속에서 찾는 것
스니핑 공격 → 수동적 공격(Passive 공격)
⇒ 프로미스큐어스(Promiscuous) 모드에서 작동 → 자신의 주소값을 무시하고 모든 패킷을 받아들이는 상태 (모든 포트의 정보를 받아 드릴 때)
⇒ 자신이 가지지 말아야 할 정보까지 모두 받아들이는 것이다
TCP DUMP
- 가장 일반적으로 쓰이는 스니핑 도구
- 해킹이라는 느낌보다는 관리자적인 느낌이 강한 스니퍼 → 연결 설정에서 패킷을 모니터링하는 것
- 스니핑을 위해서 개발된 것 X, 네트워크 관리를 위해 개발된 툴
* 침임 탐지 시스템
허브 → Flooding 스위치 → 처음엔 flooding 하다 running 과정을 거쳐 fourding 한다
세션 → 사용자와 컴퓨터, 또는 두 대의 컴퓨터 간의 활성화된 상태 (연결 설정이 되어 있는 상태)
하이재킹 → 공중 납치
* 세션 하이재킹 공격 → 이미 인증을 받아 세션을 생성하여 유지하고 있는 연결을 여러 가지 방법으로 빼앗는 공격
*TCP 세션 하이재킹 → 연결의 신뢰성을 확보하기 위한 시퀀스 넘버를 이용한 공격
* 시퀀스 넘버 → TCP 같은 데에서 100을 보냈는데 상대방이 102를 주는데 상대방이 잘 받았다는 느낌
방화벽
- 안에서 바깥으로 들어가는 것 ex) 화재 시 셔터가 내려가는 것
프록시(Proxy) 방식 → 들어가서 확인하는 것
* 방화벽의 주된 기능
1) 접근제어 2) 로깅, 감사추적 3) 인증 4) 데이터 암호화
접근제어(Access Control)
⇒ 방화벽의 가장 기본적이고 중요한 기능
→ 이러한 접근제어 방식은 그 구현 방법에 따라 패킷 필터링(Packet filtering) 방식과 프록시(Proxy) 방식으로 나누어진다
로깅(Logging)과 감사추적(Auditing)
⇒ 허가 또는 거부된 접근에 대한 기록을 유지한다
* 로깅 - 인증받은 것
* 베스천 호스트 (Bastion Host) - 모니터링 ⇒ 지켜본다
네트워크에서 베스천 호스트는 철저한 방어 정책이 구현되어 있는 외부로부터의 접속에 대한 일차적인 연결을 받아들이는 시스템을 지칭함
보통 강력한 로깅과 모니터링 정책이 구현되어 있으면 접근을 허용하거나 차단하기도 하는 등의 일반적인 방화벽의 기능을 한다
하지만 베스천 호스트는 꼭 하나가 아니며 방화벽과 동일하지도 않다 베스천 호스트는 꼭 하나가 아니며 방화벽과 동일하지도 않다
베스천 호스트의 위치 중에 한 곳에 방화벽이 놓이는 것이다
* 스크리닝 라우터 ⇒ 아무것도 x 포트만 막아줌
=> 방화벽이라고 하기에는 부족한 점이 많다
3계층인 네트워크 계층과 4계층 트랜스포트(Transport) 계층에서 실행되며, IP 주소와 포트에 대한 접근 제어가 가능
=> 외부 네트워크와 내부 네트워크의 경계선에 놓이며 보통 일반 라우터에 패킷 필터링 규칙을 적용하는 것으로 방화벽의 역할을 수행한다
그러나 세부적인 규칙 적용이 어렵고 많은 규칙을 적용할 경우 라우터에 부하가 걸려 대역폭을 효과적으로 이용할 수 없다
또한 실패한 접속에 대한 로깅이 지원되지 않으며, 패킷 필터링 규칙에 대해 검증이 어렵다
변수 : 하나의 변수에 해당하는 점보가 총 세 겹으로 구성되기 때문이다
EX) 삼겹살
&i : 메모리 주소를 알아내는 것
* 나중에 선언된 변수는 낮은 주소(메모리 주소)를 받게 된다 == 나중에 들어온 군인을 낮은 계급을 받게 된다
gets() : 키보드로부터 문자열을 입력받아 버퍼에 저장
buffer == &buffer => buffer 배열 변수의 시작 주소
* 배열의 이름은 그 배열의 시작 주소와 동일하다
* gets() 함수의 인자로 전달된 것 -> 메모리 주소
* gets()는 어느 시점까지 입력받는가? => "엔터"가 입력될 때까지
gets() 함수를 요약하자면 사용자가 엔터를 치기 전까지 입력한 값들을 인자로 주어진 메모리 주소에 저장한다
함수 : 특정한 기능을 하는 소스코드를 따로 빼내어 묶어 놓은 것
main() 함수 : C언어로 만든 프로그램의 시작점/ 될 수 있는 데로 간략하게 만듦
void : 결과를 돌려주지 않는 함수
return 함수 : 결과(값)을 돌려주는 함수
결과를 돌려주지 않는 함수 -> 바로 출력
프로시저(Procedure) : return을 하지 않는 함수
* 함수와 프로시저의 비교
|
사전적 의미
|
결과 return
|
함수 (function)
|
(사람과 사물의) 기능
|
있음
|
프로시저(procedure)
|
(어떤 일을 하는) 절차
|
없음
|
Return address : 복귀할 때 참조할 위치(주소)
-> 버퍼 오버플로우 공격의 핵심인 "리턴 어드레스"가 스택 영역에 저장됨
* 프로그램의 내부 작동을 이해하는 가장 좋은 방법 -> 어셈블리어 코드를 분석하는 것
컴파일러 : C언어 소스코드를 기계어로 바꾸는 것(= 기계가 알아보게 바꿔주는 것)
cpu가 메모리에 데이터를 저장할 때 : 어느 순서로 저장하는 가?
Big Endian => 왼쪽에서 오른쪽 순서로 저장하는 것
Little Endian => 오른쪽에서 왼쪽으로 저장하는 것
커널 : 운영체제에서 가장 중요함
메모리 지도 : 메모리의 어느 부분에 어떤 용도의 데이터들이 위치하게 되는지 그 기본 규칙을 이해하기 위한 간단한 구조의 그림
가상 메모리 : 텅 비어있는 상태로 존재
* 비어있는 영역 -> 미활당 메모리 주소에 접근할 경우엔 프로그램 오류가 발생함
스택 영역 : 버퍼 오버플로우 공격에 있어서 매우 중요한 부분
-> 함수 호출과 관련된 정보들 그중에서도 특히 리턴 어드레스가 저장됨
* 데이터 구조 -> 메모리의 데이터들을 효율적으로 다루기 위해 고안된 데이터 참조 방식 중 하나
스택(Stack) : 차곡차곡 쌓인 더미
⇒ 가장 먼저 입력된 데이터가 가장 아래쪽에 쌓이고 나중에 입력된 데이터는 그 위에 쌓이게 된다는 구조상의 특징이 마치 더미를 쌓아 올린 모습과 흡사하기 때문 (ex. 동전 정리통 프링글스)
⇒ 가장 먼저 처리해야 할 것을 가장 가까운 곳에 둔다
⇒ LIFO (Last - in, First - out) : 가장 나중에 들어온 자료가 가장 먼저 나가는 것(=후입 선출형 구조)
⇒ PUSH : 스택에 새로운 자료를 추가하는 것 → PUSH 하면 할수록 기존 데이터 위에 새로운 데이터가 순서대로 쌓여 올려지게 됨
POP : PUSH에 의해 스택에 저장된 값을 다시 빼내어 내는 것
* 스택은 기본적으로 PUSH와 POP이라는 두 개의 명령으로만 데이터를 추가하거나 제거할 수 있음
⇒ PUSH 혹은 POP 되는 데이터 크기는 스택을 구현하는 프로그래머가 마음대로 정할 수 있다
* OS에 기본으로 구현되어 있는 스택 ⇒ 시스템 스택(메모리맵에서 본 그 스택)
시스템 스택의 기본 데이터 크기는 프로그램의 레지스터 크기와 일치하다
시스템 스택 데이터 기본 크기 → 32바이트 (4바이트)
TOP과 BOTTOM : 스택의 특정 위치를 가리키는 용어들
TOP : 단어 자체에서 나타나는 바대로 현재 스택에 쌓인 데이터들의 위치 중 가장 높은 위치의 메모리 주소 값 (즉, 실제로는 가장 낮은 주소 값)
→ 이처럼 스택에 쌓이는 데이터양의 변화에 따라 TOP의 위치는 계속해서 변하게 된다
새 데이터가 추가되면 스택 내의 TOP의 위치는 높아지고 반대로 데이터가 제거되면 TOP의 위치는 다시 낮아집니다
TOP의 용도는 스택에 데이터가 추가되거나 제거될 때에 기준이 되는 위치를 정하는 것
→ 스택에 PUSH가 이루어질 때엔 현재 TOP에 해당하는 위치를 기준으로 새로운 데이터가 추가되고, TOP의 위치는 4바이트만큼 높아진다
반대로 POP이 이루어질 때엔 현재 TOP에서 4바이트 크기의 데이터를 빼내어 오며, TOP의 위치는 다시 4바이트만큼 낮아집니다
* TOP은 스택에서 데이터가 추가되거나 제거되는 위치를 "가리키고"있기 때문에 stack Pointer라고 불리기도 한다
* BOTTOM → 스택에서 가장 아랫 부분에 해당하는 메모리 주소값 (즉, 실제로는 가장 높은 주소값)
→ BOTTOM은 TOP 과는 달리 스택의 가장 아랫부분만을 가리키기 때문에 항상 동일한 값이 유지됨
만약, TOP 값이 BOTTOM 값과 같아지면, 스택의 가장 아랫부분에 도달했기 때문에 더이상의 저장된 자료가 없음을 의미 이 때엔 더 이상의 POP 명령을 수행할 수 없다
큐 : 스택(STACK)에 대응되는 자료구조
→ 스택과는 달리 먼저 들어오는 자료가 먼저 나가는 구조로 되어 있다
ex) 양쪽이 뚫린 파이프, 일렬로 줄을 선 사람들
→ FIFO(First-In, First-Out, 선입선출형구조)
해킹과정
1단계 : 정보 수집
: 해킹 대상에 대한 기본적인 정보를 수집하는 단계
→ 정보수집을 하는 이유 = 공격 대상의 가장 취약한 부분을 찾아내는 과정
2단계 : 리모트 어택
: "원격 공격"
→ 위와 같은 계정이 있지도 않은 상태에서 마치 계정이 있는 것 마냥 서버의 접근 권한을 얻어내는 과정
즉, 서버를 뚫고 들어가는 과정
서버로의 정상적인 접근 계정이 없는 상태에서 서버 혹은 관리자(또는 일반 사용자)의 취약점을 이용하여 서버의 안으로 들어 갈 수 있는 접근 권한을 획득해내는 과정
→ 리모트 어택 과정에서 버퍼 오버플로우 해킹 기술이 사용된다면 이것을 리모트 버퍼 오버플로우(Remote Buffer Overflow)
리모트 버퍼 오버플로우(Remote Buffer Overflow) : 과도한 사용자의 입력으로부터 발생
3단계 : 웹 해킹
: 웹 서버에서 돌아가는 프로그램의 취약점을 찾아 공격하는 것
(= 공격한다 = 프로그램의 취약점을 발견하여 내부로 접속할 수 있는 통로를 마련함)
4단계 흔적 삭제 : 도둑질한 흔적 지우는 것(흔적파일 다 지움)
5단계 : 백도어 생성
백도어 : 공격에 성공한 해커가 서버로의 재침투를 쉽게 하기 위해 만들어 놓는 비밀 통로
* 시스템 해킹 : 파일 서비스 (FTP), 메일 서비스 (SMTP, POP)등 웹 이외의 다른 서비스들을 공격하는 것
로컬어택 : 리모트 어택을 통해 얻어낸 권한은 경우에 따라 최고 관리자 (root) 권한일 수도 있고 낮은 권한인 일반 사용자 권한 일 수도 있다
→ 리모트 어택의 대상이 된 서비스가 어떤 권한으로 작동되고 있었느냐에 따라 결정
요약) 리모트 어택을 통해 얻은 권한이 최고 관리자가 아닐 경우엔 로컬어택이란 과정이 필요해지는데 로컬 어택이란 현재 자신이 가지고 있는 일반 사용자 권한을 최고 관리자 권한으로 상승시키는 공격
메커니즘 : SetUID bit라는 것으로 구현 → 실행파일에 설정하는 "속성" 중 하나 → 이 속성이 부여된 파일은 실행 도중 일시적으로 다른 권한을 가지게 되는 것
-rwxrwxrwx 나
- → 파일
rwx : 나의 권한(나), d : 디렉토리 (7)
rwx : 그룹의 권한 (1-A) (7)
rwx : 다른 사람들(Others) (7)
읽기 권한 : r (Read)
쓰기 권한 : w (Write)
실행 권한 : x (Exection)
-rwx(7)r-x(5)r-x(5)
r(1)w(1)x(1)r(1)-(0)x(1)r(1)-(0)x(1)
755 권한 : 읽고 쓰고 실행
SetUID : 나에게 패스워드를 바꿀 때 최고의 관리자의 권한을 주는 것 끝나면 다시 일반 사람한테 주는 것
SetUID : rwsrwxrwx 4000 → 4777
rwxrwsrwx 2000 → 2777
G:GROUP
sticky bit : 임시 인터넷 파일처럼 내 것이나 여러 사람들이 생성한 파일이 있는데 비록 권한(다른 사람것을 지워버릴 수 있는 라이트 권한이 있더라도)있더라도 SetUID가 세팅이 되면 이것을 생성한 사람이 내가 생성한 것을 내것만 지울 수 있다 다른 사람 것은 손을 못된다 (지우지 못함)
SYNflooding : 서버별 한정되어 있는 동시 사용자 수를 존재하지 않는 클라이언트가 접속한 것 처럼 속여 다른 사용자가 서버에서 제공하는 서비스를 받지 못하게 하는 것
BONK : 처음 패킷을 1번으로 보낸 후 두번째, 세번째 패킷을 모두 시퀀스 넘버를 1번으로 조작해서 보낸다
BOINK : 처음 패킷을 모두 시퀀스 넘버를 1번으로 보낸 후 두번째 패킷은 101번, 세번째 패킷은 201번으로 정상적으로 보내다가 중간에서 일정한 시퀀스 넘버로 보낸다
Tear Drop : 패킷을 겹치게 또는 일정한 간격의 데이터가 빠지게 전송한다
LAND : 패킷을 전송할 때 출발지 IP주소와 목적지 IP 주소값으로 똑같이 만들어서 공격 대상에게 보낸다
오용탐지 : Signature Base나 Knowledge Base로 불린다
탐지 오판율이 낮음
알고 있는 것을 정확히 잡아 냄
이미 발견되고 정립된 공격 패턴을 미리 입력해두고 거기에 해당하는 패턴을 탐지하게 되었을 때 이를 알려주는 것이다
이상탐지 : Behavior나 statsticla Detection라고 함
행동이 이상한 애를 잡음
정상적이고 평균적인 상태를 기준으로 하여 이에 상대적으로 급격한 변화를 일으키거나 확률이 낮은 일을 발생할 경우 침입 탐지를 알리는 것
인공지능 시스템 -> 판단의 근거가 확실하지 않음
오판율이 높음
'STUDY > IT' 카테고리의 다른 글
SQL (0) | 2023.03.03 |
---|---|
GIT (0) | 2022.06.21 |
디지털 포렌식 실습서 [컴퓨터 과학수사 (CSI)] (0) | 2022.04.24 |
디지털 포렌식의 5대 원칙 (0) | 2022.04.24 |