반응형

1. 서비스 거부 공격 (DoS, Denial Of Service)

컴퓨터의 자원을 고갈시키기 위한 공격으로, 특정 서비스를 계속 호출하여 CPU, Memory, Network 등의 자원을 고갈시키는 공격이다.

DDoS(Distributed DoS)는 여러대의 공격자 서버가 분산되어 있고 특정 시스템을 집중적으로 공격하는 방법이다.

 

1) TCP SYN Flooding

- TCP SYN을 이용한 공격 방법으로, 대상 시스템이 Flooding하게 만들어 대상 시스템의 서비스를 중단시키는 공격

- 다른 사용자가 서비스를 받지 못하도록 하는 공격

 

Cf) DRDoS(Distributed Reflection Denial os Service)

- IP Header에 들어가는 Src IP를 공격자의 IP가 아닌 피해자의 IP 주소를 기재하여 Request 전송

- Dst 서버는 피해자의 IP로 응답을 하게되는데, 이 작업을 반복하려 피해자에게 DoS 공격을 수행

 

2) ICMP Flooding(Smurfing Attack)

- 다수의 호스트가 존재하는 네트워크상에서 ICMP Echo 패킷을 Broadcast로 전송

- Src IP는 피해자의 IP주소를 기재하여 전송

- 다량의 응답 패킷이 피해자 서버로 집중되게하여 서비스 장애 유발

 

3) Tear Drop(Ping of Death)

- 네트워크 패킷은 MTU보다 큰 패킷이 오면 분할하고, 분할된 정보를 flags와 offset이 가지게 됨

- offset을 임의로 조작하여 다시 조립될 수 없도록 하는 공격

- Fragment를 조작하여 패킷 필터링 장비나 IDS를 우회하여 서비스 거부 유발

 

4) Land Attack

- IP Header를 변조하여 인위적으로 Src IP를 Dst IP 주소와 Port로 설정하여 트래픽을 전송

- 송신자와 수신자의 IP, Port가 동일하기 때문에 네트워크 장비의 부하 유발

- 대응 방법: 송신자와 수신자의 IP가 동일한 패킷을 삭제

 

5) HTTP Get Flooding

- 3 way handshaking 이후 HTTP Get을 지속적으로 요청하여 HTTP 연결 및 HTTP 처리 로직까지 과부하 유발

- TCP 3 way handshaking 이후 공격을 수행하기 때문에 IP를 변조하지 않음

 

Cf) slow HTTP Get Flooding

- HTTP Header를 변조하여 Content Length 값을 50,000으로 변경 후 1바이트씩 천천히 전송

- 웹 서버는 50,000 값이 수신되기를 대기하게되고 더 많은 부하가 발생

- 'slow'가 붙은 공격들은 위처럼 무언가를 천천히 전송해서 웹 서버에 더 많은 부하를 유발하는 공격

 

6) Cache Control Attack

- 자주 변경되는 데이터에 대해서 새롭게 HTTP 요청과 응답을 요구하는 옵션인 'no-cache'를 설정

- Cache-Control을 'no-cache'로 설정하고 웹 서버를 호출하면 항상 최신 페이지를 전송해주어야 하기 때문에 서버는 더 많은 부하가 발생

 

7) Slow HTTP Get/Post Attack

[Slow HTTP Get]

- TCP 및 UDP 기반 공격: 변조 IP가 아닌 정상 IP 기반 공격이며, 탐지가 어려움

- 소량의 트래픽을 사용한 공격: 소량의 트래픽과 세션 연결을 통해서 공격

- 애플리케이션 대상: 서비스의 취약점을 이용한 공격

 

[Slow HTTP Post]

- HTTP의 Post를 사용하여 서버에게 전달할 대량의 데이터를 장시간에 걸쳐 분할 전송

- Post 데이터가 모두 수신되지 않으면 연결을 장시간 유지하게 됨

Slow HTTP Get/Post 공격 방법

[Slow HTTP Read DoS]

- TCP 윈도우 크기 및 데이터 처리율을 감소시킨 뒤 데이터 전송하여 웹서버가 정상적으로 응답하지 못하도록 하는 공격 (ex. TCP 윈도우 크기를 0byte로 만들어 전송)

- TCP 윈도우 크기 및 데이터 처리율을 감소시키면 서버는 정상 상태로 회복될 때까지 대기상태에 빠지게 됨

- 서버는 윈도우 크기가 0byte인 것을 확인하면 데이터를 전송하지 않고 Pending 상태로 전환됨

- 공격자는 윈도우 크기를 점검하는 Probe 패킷에 대해 ACK로 전송하면 서버는 대기 상태로 빠지게 됨

Slow HTTP Read DoS 공격 방법

[Slow HTTP Header DoS(Slowloris)]

- HTTP Header를 비정상적으로 조작해서 웹 서버가 HTTP Header 정보가 모두 전달되지 않은 것으로 판단하게 함

- 웹 서버는 클라이언트로부터 요청이 끝나지 않은 것으로 판단하여 연결을 장시간 유지

- HTTP Header와 Body는 개행문자(\r\n\r\n)로 구분되는데, \r\n만 전송하여 불완전한 Header를 전송

 


2. Port Scanning

포트 스캐닝은 서버에 열려있는 포트를 확인하기 위한 방법이며, 공격자는 이를 악용하여 확인된 포트의 취약점을 이용하여 공격할 수 있다.

- NMAP Port Scanning

NMAP Port Scan 설명
TCP connect() Scan - 3-Way Handshaking을 수립하고, Target System에서 쉽게 탐지 가능
TCP SYN Scan - SYN을 전송하여 SYN/ACK 패킷을 수신하면 Open 상태
- SYN을 전송하여 RST/ACK 패킷을 수신하면 Close 상태
- Half Open 또는 Stealth Scanning 이라고 함 (로그가 남지 않음)
TCP FIN Scan - FIN 패킷을 전송했을 때, 닫혀있는 포트는 RST를 전송
- 열려있는 포트는 패킷을 무시
TCP Null - 모든 플래그를 지움
- 대상 포트가 닫혀있으면 RST를 전송하고, 개방 상태이면 패킷을 무시
TCP X-MAS Tree Scan - FIN, URG, PSH 패킷을 전송
- 대상 포트가 닫혀있으면 RST를 전송하고, 개방 상태이면 패킷을 무시
TCP Open Scan - TCP 3-way-handshaking 과정을 진행하여 오픈된 포트 확인
- 서버에 로그가 기록되고 스캔 속도가 느림
UDP Scan - UDP Packet을 전송하여 스캐닝하며, UDP의 특성상 신뢰성이 떨어짐
- 대상 포트가 닫혀있으면 ICMP Unreachable, 개방 상태이면 패킷을 무시

3. Sniffing Attack

네트워크로 전송되는 패킷을 훔쳐보는 도구로, 송신자와 수신자의 IP, Port, Message 등 확인이 가능하다.

스니핑 도구를 실행시키면 기본적으로 Normal Mode로 실행되며, Normal Mode는 자신의 컴퓨터에 전송되는 패킷만 수신받고 관계없는 패킷은 삭제한다. 네트워크에 흘러다니는 모든 패킷을 모니터링 할 때는 Promiscuous Mode로 설정해야 한다.

 

Cf) Session Hijacking

- 세션값을 훔쳐(세션값을 획득하여) 로그인 과정 없이 홈페이지에 접근할 수 있음

- 이미 인증을 받아 세션을 생성, 유지하고 있는 연결을 빼앗는 공격

- 인증을 위한 모든 검증을 우회: TCP를 이용해서 통신하고 있을 때 RST 패킷을 보내 일시적으로 TCP 세션을 끊고 Sequence Number를 새로 생성하여 세션을 빼앗고 인증을 회피

- 원인: 암호화되지 않은 프로토콜에서 정보를 평문으로 전송, 길이가 짧은 Session ID, Session Timeout 부재


4. Spoofing Attack

1) IP Spoofing

- 자신의 IP를 속이는 행위로, 공격자가 자신의 IP주소를 숨기거나 피해자의 IP로 가장하여 접속하는 방법

IP Spoofing

 

2) ARP Spoofing

- 로컬 통신 과정에서 서버와 클라이언트가 IP와 MAC 주소로 통신하는 것을 이용

- 클라이언트의 MAC Addr를 중간에 공격자가 자신의 MAC Addr로 변조하여 마치 서버와 클라이언트가 통신하는 것처럼 속이는 공격

출처: 한국인터넷진흥원(KISA)

 


# 참고

해당 글은 '이기적 정보보안기사 필기 1권 이론서'을 읽으며 필요한 부분만 정리한 내용입니다.

 

반응형
반응형

1. OSI 7 Layer

네트워크의 효율적 이용을 위해 계층을 분할하고, 각 계층 간의 필요한 프로토콜을 규정한 것

* 각 계층은 독립적이라 상위/하위 계층에 처리를 의뢰하지 않는다.

OSI 7계층 주요 내용 주요 프로토콜 (매체)
7, Application - 사용자 소프트웨어를 네트워크에 접근 가능하도록 함
- 사용자에게 최종 서비스 제공
- FTP, SNMP, HTTP, Mail, Telnet 등
6, Presentation - 포맷, 압축, 암호화
- 텍스트, 그래픽 정보를 컴퓨터가 이해할 수 있는 16진수로 변환
- 압축, 암호, 코드 변환
- GIF, ASCII, EBCDIC
5, Session - 세션 연결 및 동기화 수행, 통신 방식 결정
- 가상 연결을 제공하여 login/logout 수행
- 반이중, 전이중, 완전이중 결정
4, Transport - 가상 연결, 에러 제어, Data 흐름 제어, Segment 단위
- End-to-End 데이터 흐름이 가능하도록 논리적 주소 연결
- 신뢰도, 품질보증, 오류탐지 및 교정 기능 제공
- TCP, UDP
3, Network - 경로 선택, 라우팅 수행, 논리적 주소 연결(IP)
- 데이터 흐름 조절, 주소 지정 메커니즘 구현, Packet 단위
- IP, ICMP, IGMP, ARP,RIP, OSPF 등
2, Data Link - 물리주소 결정, 에러 제어, 흐름 제어, 데이터 전송
- Frame 단위, 전송 오류를 처리하는 최초의 계층
- 흐름 제어, 오류 제어(ARQ)
- Bridge, PPTP, L2TP, HDLC 등
1, Physical - 전기적, 기계적 연결 정의, 실제 Data Bit 전송
- Bit 단위, 전기적 신호, 전압 구성, 케이블, 인터페이스 등 구성
- 동축케이블, 광섬유 등

 

Cf) TCP/IP 프로토콜

이 기종 간 네트워크 환경에 대한 표준으로, OSI보다 먼저 만들어졌으며 TCP, UDP, IP, ICMP, ARP, RARP로 구성된다.


2. 네트워크 활용(TCP/IP 구조)

1) Applicaion Layer

일반 사용자들이 사용하는 프로그램이 있는 계층으로, 서비스는 동영상 학습 프로그램, VoIP전화, 카톡 등의 형태가 있다.

 

Cf) Application 관련 서비스

- FTP, DNS, HTTP, Telnet, SMTP, SNMP

 

Cf) HTTP(Hyper Text Transfer Protocol)

- TCP 프로토콜의 80번 Port를 사용하고 Request/Response 구조를 가짐

- HTTP Header와 Body로 이루어져 송/수신 됨

- HTTP Request 시 Header 구조

구조 설명
Request Method 호출되는 메소드로 GET, POST, OPTIONS, PUT, DELETE, TRACE, CONNECT를 나타냄
Accept 웹 브라우저에서 사용 가능한 미디어 타입을 의미
Accept-Language 웹 브라우저가 인식할 수 있는 언어를 의미
User-Agent 웹 브라우저 정보를 의미
Accept-Encoding 웹 브라우저에서 제공되는 인코딩 방식을 의미
Host 웹 서버의 기본 URL을 의미
Connection 연결 지속 및 연결 끊기를 나타내며, Keel Alive 혹은 close

- HTTP Response 시 Header 구조

구조 설명
Status Code HTTP 응답 코드를 의미하며, 200은 성공적으로 처리한 것을 의미
Server 서버 프로그램 이름과 버전 전송을 의미
ex. Apache/2.2.22 (Debian) -> Apache 웹서버 2.2.22 버전에 Debian 리눅스 OS
Expires 자원의 만기 일자를 의미
Cache Control 캐시 사용 여부를 나타내며, no-cache는 캐시를 사용하지 않음
Pragma 캐시 사용 여부를 나타내며, HTTP/1.0에서 쓰임
Content-Encoding 응답되는 메시지의 인코딩 방식을 의미
Content-Length 바이트 단위로 응답되는 리소스의 크기
Keep-Alive 연결 유지 시간을 의미
Connection Keep-Alive 사용 여부를 의미
Content-Type 응답되는 미디어 타입

 

Cf) Cookie와 Session

방식 Cookie Session
저장 위치 - Client - Server
저장 형태 - Text 형식 -Object 형식
종료 시점 - 쿠키 저장 시 종료 시점 설정
- 설정하지 않으면 브라우저 종료 시 종료
- 정확한 시점 알 수 없음
자원 - 클라이언트 자원 - 서버 자원
용량 - 한 도메인당 20개
- 쿠키 하나에 4KB, 총 300개
- 용량 제한 없음

 

Cf) SMTP(Simple Mail Transfer Protocol)

- 인터넷 전자우편 표준 프로토콜로, Store-and-Forward 방식으로 메시지를 전달

- 송신자가 보낸 전자우편은 메일 서버에 전달

- 메일 서버는 수신자의 전자우편 주소를 분석하고 최단 경로를 찾아 근접한 메일 서버에게 전달

- 최종 수신자 측 메일 서버에 도착하기까지 연속적으로 전달하는 중계 작업을 수행

참고: 이기적 정보보안기사 필기 1권 이론서

구성요소 내용
MTA(Mail Transfer Agent) 메일을 전송하는 서버
MDA(Mail Delivery Agent) 수신측에 고용된 우체부 역할, MTA에게 받은 메일을 사용자에게 전달
MUA(Mail User Agent) 사용자들이 사용하는 클라이언트 Application

- POP3와 IMAP 및 IMAP3

POP3 IMAP 및 IMAP3
- TCP 110번으로 메일서버에 접속하여 저장된 메일을 내려받는 MDA 프로그램
- 메시지를 읽은 후 메일 서버에서 해당 메일을 삭제
- POP과 달리 메일을 내려받아도 서버에 원본을 계속 저장
- IMAP 143 PORT

 

Cf) FTP(File Transfer Protocol)

- 인터넷 표준으로 파일 전송을 위한 프로토콜

- 해당 컴퓨터에 등록된 사용자만 파일 전송이 가능하며, 그 외에는 익명(Anonymous)으로 사용

- ftpusers에 등록된 사용자는 FTP 접근이 허용되지 않으며, 제어 접속과 데이터 접속 포트가 분리되어 있음

* Active Mode와 Passive Mode

- Active Mode: 서버가 클라이언트의 Port(20)로 접속해 데이터를 전송

- Passive Mode: 클라이언트가 서버에서 알려준 Port(2024)에 접속해 데이터를 내려받음

출처: https://slideplayer.com/slide/5933080/

 

Cf) SNMP(Simple Network Management Protocol), NMS(Network Management System)

- SNMP: 네트워크의 안정성 효율성을 높이기 위해 상태 정보를 실시간으로 수집 및 분석하는 네트워크 관리 시스템

- NMS: SNMP를 사용하여 네트워크 정보를 수집

 

 

2) Transport Layer

송신자와 수신자 간에 논리적 연결을 수행하는 것으로, TCP와 UDP가 있으며, TCP는 연결지향 방식을 사용하고 UDP는 비연결성 방식을 사용한다.

 

Cf) TCP(Transmission Control Protocol)

- UDP에 비해 크기가 크로, 신뢰성 있는 데이터 전송을 위해 가상 연결을 수행하며 Sequence 번호를 통해 메시지 순서를 파악할 수 있음

- 수신자가 동일한 ACK 번호를 반복적으로 전송 시, GO-BACK-N 방법으로 되돌아온 ACK 번호 이후의 모든것을 속도를 낮춰 전부 재전송(*혼잡제어)

- TCP의 송수신 가능 여부를 확인하는 것은 ICMP 프로토콜

- netstat 명령어를 사용하여 연결 상태를 확인 할 수 있음

- Client와 Server의 연결을 수행할 때 Client가 SYN 신호를 보내고 서버는 SYN/ACK로 응답 후 Client가 ACK를 전송하여 연결을 확립

3-way handshaking(참고: https://itwiki.kr/w/TCP)

- 연결 종료는 Client에서 FIN+ACK를 보내고 Server는 Flag에 대한 응답 ACK와 종료 Flag FIN을 보내고 Client가 ACK 를 전송하여 연결 종료

4-way handshaking(참고: https://itwiki.kr/w/TCP)

 

Cf) UDP

- 데이터를 빠르게 전송할 용도로 사용되며, 재전송 기능이 없어 네트워크에서 패킷이 손상될 수 있음

- UDP의 특징

특징 내용
비신뢰성(Unreliable) - Packet을 목적지에 성공적으로 전송하는 것을 보장하지 않음
비접속형(Connectionless) - 전달되는 Packet에 대한 상태 정보를 유지하지 않음
간단한 Header 구조 - TCP에 비해 헤더 구조가 간단하여 처리가 단순함
빠른 전송 - TCP에 비해 전송 속도가 빠름

 

Cf) Segment: Application Layer의 메시지에 TCP 혹은 UDP의 Header를 붙인 것

참고: 이기적 정보보안기사 필기 1권 이론서

 

 

3) Internet Layer

송/수신자의 IP 주소를 읽어 경로를 결정하거나 전송하는 역할을 수행한다.

 

Cf) Routing

- IP Header에 있는 목적지 IP의 주소를 읽어 경로를 결정하는 작업

- 사전에 고정한 정적 경로와 네트워크 상태에 따라 최적의 경로를 결정하는 동적 경로 방법이 있음

Routing 방법 내용
정적 경로
(Static Routing)
- 관리자가 직접 라우팅 테이블의 경로를 설정, 경로가 고정적이며 수동 갱신하는 방식
동적 경로
(Dynamic Routing)
- 관리자의 개입 없이 네트워크 상황 변화에 따라 인접 라우터 간에 자동으로 경로 정보를 교환
- 경로정보를 교환하여 최적의 경로를 결정 및 상황에 따른 능동 대처 가능

- Routing Protocol 중 Distance Vector는 통과하는 Router의 수가 적은 쪽으로 경로를 결정

- Routing Protocol 중 Link State는 대역폭, 지연 정보 등을 종합적으로 고려해 Cost 산정 후 Cost에 따라 경로 결정

구분 Distance Vector Link State
알고리즘 - 최단경로를 구하는 Bellman-Ford 알고리즘 기반 - 최소 신장 트리를 구하는 Dijkstra 알고리즘 기반
동작 원리 - 네트워크 변화 발생 시 인접 라우터에 전달
- 인접 라우터에서는 라우팅 테이블 갱신
- 라우터와 라우터를 연결하는 Link 상태에 따라 경로 설정
- 라우터가 Network 변화 감지 시 인접 라우터에게 즉각 전달하고 저장
라우팅 정보 - 모든 라우터까지의 거리 정보 보관 - 인접 라우터까지의 Link Cosr 계산
정보전송 시점 - 일정 주기 - 변화 발생 시에만
대표 프로토콜 - RIP, IGRP, EIGRP, BGP - OSPF, IS-IS
단점 - 변화되는 라우팅 정보를 모든 라우터에 주기적으로 갱신하므로 망 자체의 트래픽 유발
- 라우팅 정보를 변경하는 문제 발생 시 Routing Loop가 발생할 수 있음
- 네트워크 전체 정보 유지를 위한 많은 메모리 소요
- 라우터의 CPU 사용량이 많아짐
- 라우터간 회선의 대역 차이로 동기화 실패 가능성

 

Cf) MTU(Maximum Transmission Unit)

- 한 번에 통과할 수 있는 패킷의 최대 크기

- MTU 값보다 패킷의 크기가 크면 패킷은 분할되고 그 정보를 Flag와 Offset이 가짐

 

Cf) 데이터 전송 방식

전송 방식 내용
Unicast 1:1 전송 방식
Broadcast 1:N 전송 방식 (동일한 서브넷 상 모든 수신자에게 전송)
Multicast M:N 전송 방식 (하나 이상의 송신자들이 특정 그룹의 수신자에게 전송)
Anycast IPv6에 등장, 그룹에 등록된 노드 중 최단경로 노드 한개에만 전송

 

Cf) ARP(Address Resolution Protocol)와 RARP(Reverse ARP)

- ARP Protocol은 IP 주소를 물리적 하드웨어 주소인 MAC 주소로 변경함

- ARP Protocol은 ARP Request/Response를 통해 ARP Cache Table을 유지하고 인접 컴퓨터의 IP, MAC 주소를 가짐

- RARP Protocol은 물리적인 주소 MAC을 기반으로 논리적인 주소 IP를 알아냄

 

Cf) Datagram: 기존 Packet에 IP Header를 붙인 것

참고: 이기적 정보보안기사 필기 1권 이론서

 

4) Network Access Layer

논리적인 IP 주소를 물리적 MAC 주소로 변환하고 에러 제어와 흐름 제어같은 기능을 제공한다.

통신기기 사이의 연결 및 데이터 전송 기능을 하며, OSI 7계층의 Data Link, Physical 계층에 해당한다.

 

 


# 참고

해당 글은 '이기적 정보보안기사 필기 1권 이론서'을 읽으며 필요한 부분만 정리한 내용입니다.

반응형
반응형

1. 윈도우 시스템

1) 윈도우 인증 시스템

winlogon은 내부적으로 magina.dll 이라는 GINA 프로그램을 구동시키며 검증을 위해 아이디를 LSA에 전달한다.

구성 내용 세부 내용
Winlogon - 윈도우 로그인 프로세스
GINA(msgina.dll) - Winlogon은 msgina.dll을 로딩하여 사용자가 입력한 계정과 암호를 LSA에게 전달
LSA(lsas.exe) - 계정과 암호를 검증하기 위해서 NTLM(암호화)모듈을 로딩하고 계정을 검증
- SRM이 작성한 감사 로그를 기록
SAM - 사용자 계정 정보에 저장
- 리눅스의 /etc/shadow 파일과 같은 역할을 수행
SRM - 사용자에게 고유 SID를 부여하고 SID에 권한을 부여

 

2) 윈도우 실행 프로세스

윈도우 운영체제 관련 프로세스는 아래와 같이 존재하며, c:\windows\system32 폴더에 위치한다.

프로세스 설명
wininit.exe - 윈도우 시작 프로그램
services.exe - 윈도우 서비스를 관리
lsm.exe - Local Session Manager
- 시스템 관리 작업, 주요 함수 실행, 호스트 컴퓨터와 서버의 연결을 관리
lsass.exe - LSASS(Local Security Authority Subsystem Service)
- 사용자 로그인 검사, 비밀번호 변경 관리, 액세스 토큰 생성
svchost.exe - 서비스를 관리하기 위한 프로세스
conhost.exe - 키보드, 마우스 입력 허용, 문자 출력, 콘솔 API 등 Shell의 기본 기능을 수행

2. 바이러스와 악성코드

컴퓨터 바이러스는 컴퓨터 프로그램의 한 종류로, 사용자 몰래 은닉하여 정상적인 프로그램이나 사용자의 데이터를 파괴하며 자기 스스로 복제해서 증식하는 자기 복제 특성을 지닌 악성 프로그램이다.

 

1) 세대별 컴퓨터 바이러스

바이러스 유형 내용
1세대 원시형 바이러스 - 프로그램 구조가 간단하고 분석이 쉬움
- Jerusalem, Stoned 바이러스
2세대 암호화 바이러스 - 바이러스를 암호화 시킴
- Cascade, Slow 바이러스
3세대 은폐형 바이러스 - 기억장치에 있으면서 감염된 파일의 길이가 증가하지 않는 것처럼 보이게 함
- 감염된 부분을 읽으면 감염되기 전의 내용을 보여주어 은폐
- MacGyver, Brain, 512 바이러스
4세대 갑옷형 바이러스 - 암호화 및 다양한 기법을 사용
- Maltese_Ameoba, Blue Sky, Whale 바이러스
5세대 매크로 바이러스 - 운영체제와 관계없이 응용 프로그램에서 동작하는 바이러스
- Melisa, Laroux, Nimda 바이러스

 

2) 윈도우 DDE취약점을 이용한 공격

DDE는 윈도우에서 Application 간 데이터를 전송하기 위한 프로토콜로, 윈도우 Application 간에 공유 메모리를 사용하여 데이터를 공유한다. (DDE 취약점은 DDE의 정상적인 기능을 악용한 것이다.)

- MS Word 문서 사용 시 자동으로 프로그램 실행 등

 

3) Shell Code와 Heap Spray

Shell Code는 작은 크기의 코드로 소프트웨어 취약점을 이용하는 짧은 기계어 코드로, 일반적으로 Instruction Shell을 실행시켜서 피해자의 컴퓨터를 공격자가 컨트롤한다.

Heap Spray는 짧은 기계어 코드인 Shell Code를 Heap 영역에 뿌리는 것으로, Heap 영역에 임의적으로 Shell Code를 삽입하여 실행시키는 공격 기법이다.

 

Cf) ASLR(Address Space Layout Randomization)

- 실행 파일이 메모리에 Load될 때 기본주소는 항상 동일한 주소 사용

- 동일한 메모리 주소를 가지면 공격자가 악용하기 쉬움

- 위 문제를 해결하기 위해 메모리 주소를 항상 동적으로 할당

 

4) Buffer Overflow

Process가 사용 가능한 메모리 공간을 초과해서 발생되는 공격으로, 메모리 공간에 제한을 두지 않는 API를 사용해서 발생하는 공격이다.

 

Cf) Buffer Overflow가 취약한 코드

아래 코드는 strcpy() 함수를 사용할 때 길이 제한을 두지 않기때문에 취약하다.

- 대응책: 길이제한을 두는 기능이 있는 함수를 사용, ASLR, DEP

void main(int argc, char* argv[]){
char buffer[10];
strcpy(buffer, argv[1]);
printf("test\n", buffer);
}

 

Cf) Stack, Heap, Data 영역

- Stack: 지역 변수가 저장되며, 함수를 호출하는 경우 되돌아오는 주소인 복귀주소를 가지고 있음

- Heap: 프로그램 실행 중 메모리를 동적으로 할당하는 경우, Heap 영역에 할당

- Data: 전역 변수를 선언하면 전역변수 저장, 정적변수를 선언하면 정적변수 저장, 변수가 선언되면 자동으로 초기화

 

Cf) Buffer Overrun

- 메모리 공간에 할당된 공간보다 더 큰 데이터를 입력하면 프로그램의 오류를 유발할 수 있음

- 공격자는 프로그램의 오류를 유발하여 시스템 Control 또는 Shell Code 복사하여 악성코드 실행 가능

 

5) Race Condition

다중 프로세스 환경에서 두개 이상의 프로세스가 동시에 수행될 때 발생되는 비정상적인 상태를 의미한다.

임의의 공유 자원을 여러개의 프로세스가 경쟁하기 때문에 발생한다.

 

6) APT(Advanced Persistent Threat) 공격

특정 기법 및 조작을 대상으로 다양한 공격 기법을 사용하여 지속적으로 공격을 수행하는 행위를 말한다.

참고: 이기적 정보보안기사 필기 1권 이론서

Cf) Binary Diffing

Zeroday Attack 취약점을 찾을 수 있는 기법으로, 자동으로 Malware를 탐지하고 오픈소스 라이선스 준수 여부를 확인

 

 


# 참고

해당 글은 '이기적 정보보안기사 필기 1권 이론서'을 읽으며 필요한 부분만 정리한 내용입니다.

 

반응형
반응형

리눅스 관련 일부 내용 정리

1. 핵심 구성요소

구성요소 내용
Kernel - 주기억장치에 상주하면서 사용자 프로그램을 관리하는 운영체제의 핵심 역할
Shell - 명령어 해석기/번역기로, 사용자 명령의 입출력을 수행하며 프로그램을 수행
- 사용자가 시스템에 로그인했을 때 각 사용자에게 설정된 Shell이 부여됨
- Kernel에 포함된 프로그램이 아니라 독립된 프로그램으로, 커널을 호출하여 작업을 처리
File System - 여러가지 정보를 저장하는 기본적인 구조

 

Cf) Shell Shork

- GNU Bash Shell에서 발견된 취약점으로 악의적 명령 실행, 관리자 권한을 획득할 수 있음

- 해당 공격 기법은 아래 예시처럼 Linux 환경변수에 빈 함수를 넣으면 그 뒤에 오는 코드는 무조건 실행되는 버그를 악용

$ env x='() { :;}; echo vulnerable' bash -c "echo test"
vulnerable
test

2. 패스워드 파일

1) /etc/passwd 파일 구조

root : x : 0 : 0 : root : /root : /bin/bash

- root : 사용자 계정
- x : 사용자 암호, 'x'는 /etc/shadow 파일에 저장되어 있다는 뜻
- 0 : User ID, '0'은 root
- 0 : User Group ID, '0'은 root
- root : Comments
- /root : User의 Home Directory
- /bin/bash : User가 기본으로 사용하는 Shell 종류

 

2) /etc/shadow 파일 구조

root : $1$FzsfsSFGd$wsS/ : 14806 : 0 : 99999 : 7 :   :   :

- root : 사용자 계정
- $1$FzsfsSFGd$wsS/ : Encrypted Password
- 14806 : 1970/1/1부터 비밀번호가 수정된 날짜의 일 수
- 0 : 비밀번호 변경 전 최소 사용기간(일 수)
- 99999 : 비밀번호 변경 전 최대 사용기간(일 수)
- 7 : 비밀번호 만기일 전, 경고 메시지를 제공하는 일 수
- (공란1) : 로그인 접속 차단 일 수 
- (공란2) : 로그인 사용을 금지하는 일 수 (월/일/연도)
- (공란3) : 사용되지 않음

3. 권한 관리

1) 디폴트 권한 umask

기본적으로 File 생성 시 권한은 666, Directory 생성 시 권한은 777이다. ( File: r(4) w(2) x(0), Directory: r(4) w(2) x(1) )

File 또는 Directory 생성 시 기본 권한을 설정할 수 있는 명령어가 'umask'이다.

umask = 0022 일 경우,
1) File 생성 시 권한: 644 (666-022)
2) Directory 생성 시 권한: 755 (777-022)

 

2) 권한 부여 및 변경 chmod

리눅스에서 권한을 부여하는 명령은 'chmod' 이며, 아래와 같이 사용 가능하다.

1) 'aaa' 파일에 'user: rwx, group: rw-, other: r--' 권한을 부여하는 방법
- chmod 764 aaa
2) 'aaa' 파일에 'other'의 'read' 권한을 빼는 방법
- chmod o-r aaa

 

3) 특수 권한 관리

- SetUID : 실행될 때 대상 파일의 소유자 권한으로 실행되도록 함 (4000 또는 u+s를 사용하여 설정)

- SetGID : 실행될 때 대상 파일의 그룹 권한으로 실행되도록 함 (2000 사용하여 설정)

- Sticky bit : 공용 Directory를 만들어 누구나 자유롭게 사용할 수 있도록 함 (1000 사용하여 설정, 삭제는 소유자만 가능)

 

cf) 특수 권한 파일 검색

- SetUID: # find / -perm 4000 -print

- SetGID: # find / -perm 2000 -print

- Sticky bit: # find / -perm 1000 -print

 

cf) 권한이 777인 Directory에 각 특수 권한 부여 시 표시 방법

- SetUID: drwsrwxrwx

- SetGID: drwxrwsrwx

- Sticky bit: drwxrwxrwt

 

cf) 실행 파일이 아닌데 SetUID를 설정하면 대문자 'S'가 되고 실행할 수 없음

 


4. 로그 파일

리눅스의 로그 파일은 기본적으로 '/var/log' directory에 존재한다.

파일 내용
/var/run/utmp 현재 로그인한 사용자 정보 (사용자 이름 확인 명령어 : users)
/var/log/wtmp 사용자의 로그인/로그아웃 정보 (확인 명령어: last)
/var/log/btmp 로그인 실패 정보 (확인 명령어: lastb)

5. 작업 스케줄 관리

1) cron

cron 데몬 프로세스는 '/etc/crontab' 파일을 읽고 작업을 수행하며, crontab 설정은 아래와 같이 진행한다.

52  6  1  *  *  root  /usr/sbin/test

- 52: 분
- 6 : 시
- 1 : 일
- * : 월
- * : 요일 (0: 일요일 ~ 6: 토요일)
- root : 사용자
- /usr/sbin/test : 실행할 명령어

cf) crontab 옵션

옵션 설명
-l 현재 로그인 된 계정에 잡혀있는 작업 스케줄 확인
-e 현재 로그인 중인 계정에 작업을 등록
-r 현재 crontab에 등록된 작업을 삭제
-u [user명] 작업을 실행시킬 유저명 설정

 

2) at

cron과 달리 예약한 명령어를 정해진 시간에 한 번만 실행할 때 사용하는 명령어이다.

# at 18:00

at> hping --rand-source 127.0.0.1 -p 80 -S -flood > test.txt

cf) at 옵션

옵션 설명
-l 현재 실행 대기중인 명령의 목록을 출력
-r 실행 대기중인 명령에서 해당 작업번호를 삭제
-f 표준 입력 대신 실행할 명령을 파일로 지정

6. 리눅스 방화벽

리눅스에서 방화벽 정책을 수립할 수 있는 도구로 iptables가 있다.

 

cf) iptables Chain 종류

- INPUT : 리눅스로 들어오는 패킷

- FORWARD : INPUT과 OUTPUT 역할로, 라우터에 방화벽을 적용할 때 사용

- OUTPUT : 외부로 나가는 패킷

 

cf) iptables 사용 예시

- DNS 서비스를 사용하는 서비스를 모두 차단하는 명령어는 아래와 같이 작성할 수 있다.

iptables - A FORWARD -p udp -m udp --dport 53 -j DROP

 

 


# 참고

해당 글은 '이기적 정보보안기사 필기 1권 이론서'을 읽으며 필요한 부분만 정리한 내용입니다.

반응형
반응형

1. 운영체제(Operating System)

운영체제는 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임이다.

 

Cf) 운영체제의 목적

- 처리 능력의 향상: 시간당 작업 처리량(Throughput), 평균 처리시간 개선

- 신뢰성 향상: 실패 없이 주어진 기능을 수행할 수 있는 능력

- 응답 시간의 단축: 사용자가 시스템에 의뢰한 작업의 반응 시간 단축

- 자원 활용률 향상: 자원의 공유, 상호배제를 통해 자원 효율적 활용

- 가용성 향상: 고장과 오류가 발생해도 운영 영향 최소화


2. Process와 Thread

Process란, 레지스터, 스택, 포인터, 실행중인 프로그램, 데이터 등의 집합체로, 프로세에 의해 수행되는 프로그램 단위로 현재 실행 중이거나 곧 실행 가능한 PCB를 가진 프로그램이다.

Thread란, 프로세스에서 실행의 개념만을 분리한 것으로, 프로세스 실행의 기본 단위가 된다.

 

Cf) Process와 Thread 비교

구분 Process Thread
상호 통신 - System Call
- Call 종료 시까지 전체 자원 Blocking
- Library Call
- 요청 Thread만 Blocking
처리 방식 - 자원 할당을 위한 기본 구분 단위 - CPU를 이용하는 기본 작업
부하 - Context Switching으로 인한 부하 발생
- 프로세스 자원 할당 시 부하 발생
- Process보다 상대적으로 부하 발생이 적음

- System Call: OS Kernel 자원을 User가 사용할 수 있도록 미리 함수로 만들어 놓은 것을 호출하는 것
- Library Call: User들이 자주 사용할만한 기능을 미리 함수로 만들어 놓은 것을 호출하는 것

- Context Switching: 현재 진행중인 Process 상태를 PCB에 저장하고 다른 Process의 상태 값을 PCB에서 읽어 레지스터에 적재하는 과정

※ 빠른 응답을 위해 CPU가 Task를 바꿔 가며 실행하는데, 이를 위해 Context Switching이 필요하다.
Context Switching이란, 작업중인 Task(Process, Thread)의 상태를 저장 후 다음 Task의 상태 값을 읽어와서 작업하는 것을 말한다.

 

Cf) Process 상태 변환

상태 상태 변환 내용
Admit 생성 -> 준비 - 준비 큐가 비어있을 때
Dispatch 준비 -> 실행 - 준비 큐에 있는 하나의 Process를 선택하여 CPU 할당
Timer Run out 실행 -> 준비 - CPU를 할당받은 Process가 CPU의 제한된 시간을 모두 사용한 경우
Blocked 실행 -> 슬립 - CPU를 할당받은 Process가 I/O, 다른 자원 요구 등 CPU 외 서비스 작업을 요청한 경우
Wake Up 슬립 -> 준비 - 대기중이던 Request의 처리가 끝난 경우
Release 실행 -> 종료 - Process의 정상/비정상 종료 시 발생

3. CPU Scheduling

컴퓨터의 자원을 효율적으로 사용하기 위해 특정 자원을 요청하는 Process들에게 CPU 자원을 할당해주는 순서를 정하는 일이다.

 

Cf) CPU Sheduling 기법

1) FCFS(First Come First Service), 비선점형

- 대기 큐에 도착한 순서대로 CPU 할당하며, CPU를 차지한 Process는 작업을 완료할 때까지 수행

- 중요하지 않은 작업이 중요한 작업을 기다리게 할 가능성이 존재

 

2) SJF(Shortest Job First), 비선점형

- 수행 시간이 가장 짧은 Process에게 먼저 할당

- FCFS보다 평균 대기시간은 적으나, 큰 작업에 대해서는 대기 시간 예측이 어려움

 

3) Round Robin, 선점형

- FCFS에 의해 CPU가 할당되며, 각 Process에 같은 크기의 CPU 시간을 할당

- CPU 시간이 만료되면 대기중인 다른 Process에게 할당되며, 실행중이던(완료되지 않은) Process는 list의 가장 뒤로 보내짐

 

4) SRT(Shortest Remaining Time), 선점형

- SJF처럼 처리 완료 시간이 가장 짧은 Process에게 먼저 할당

- 실행중인 Process라도 남은 시간이 더 짧은 Process가 생기면 언제라도 실행중인 프로세스가 선점된다.

 

5) Multi Level Queue

- 여러 종류의 그룹으로 나누어 여러 개의 큐를 이용

- 그룹화된 작업들은 각각의 큐에 넣어두고 각 큐의 독자적인 알고리즘에 따라 CPU를 할당 받음

 

6) Multi Level Feedback Queue

- 우선순위 Queue와 Round Robin을 모두 사용

- 먼저 들어온 Process에게 높은 우선순위를 부여하고, n개 이상이 생성되면 작업이 완료될 때까지 Round Robin으로 순환

- 입출력 위주와 CPU 위주인 Process의 특성에 따라 서로 다른 CPU 시간 할당


4. 병행성 제어(Concurrency Control)

1) 상호배제(Mutual Exclusion Techniques)

- 다수의 Process가 동일 자원에 접근 시 무결성을 보장(동시에 Read/Write 작업을 못하게 함)

 

2) 임계영역(Critical Section)

- 한 순간에 하나의 Process만 진입하기위해 공유 자원의 독점을 보장하는 코드 영역

- Thread가 공유 자원의 배타적인 사용을 보장받기 위해 임계영역에 들어가거나 나올 때에는 세마포어 같은 동기화 매커니즘을 사용

 

3) 교착상태(Dead Lock)

- Process가 더이상 계속할 수 없는 아래와 같은 특정 사건을 기다리고 있는 상태

- 둘 이상의 Process가 서로 자신이 요구한 자원을 할당받아 점유하고 있는 상태에서 상호 간에 상대방 프로세스에 할당되어 있는 자원을 요구하는 경우


5. 장치 관리 방법

Disk Sheduling

1) FCFS(First Come First Serviced)

- 가장 먼저 도착한 요청을 우선적으로 처리

 

2) SSTF(Shortest Seek Time First)

- 탐색 거리가 가장 짧은 트랙에 대한 요청을 먼저 서비스

- 현재 Head 위치에서 가까운 요청을 우선적으로 처리

 

3) SCAN(엘리베이터 알고리즘)

- SSTF가 갖는 탐색시간의 편차를 해소하기 위한 기법

- Head가 이동하는 방향의 모든 요청을 서비스하고 끝까지 이동한 후 역방향의 요청을 서비스

 

4) C-SCAN(Circular-SCAN)

- Head가 항상 한 쪽 끝에서 반대쪽 끝으로 이동하며 서비스하고, 반대쪽 끝에 도달하면 그 반대쪽 끝으로 되돌아간 후 다시 서비스

 

5) C-LOOK(Circular-Look)

- C-SCAN의 보완으로, Head 이동 방향의 마지막 요청을 처리한 뒤, Head를 처음 위치로 이동하여 다음 요청을 서비스

- 진행 방향에 더이상 요청이 없으면 Head는 진행 방향을 바꿈 

 

RAID(Redundant Array of Independent Disk)

Disk 장애 발생 시, 그대로 복구할 수 있도록 2개 이상의 Disk에 데이터를 저장하는 기술

이미지 출처: https://en.wikipedia.org/wiki/Standard_RAID_levels

1) RAID 0(Stripe, Concatenate)

- 최소 2개의 Disk로 구성되며, 데이터를 나누어 저장하지만 중복 저장하지 않기 때문에 장애 발생 시 복구 불가

 

2) RAID 1(Mirroring)

- 여러 Disk에 데이터를 완전 이중화하여 저장하는 방식으로 RAID에서 가장 좋은 방식이지만 비용이 많이 발생

 

3) RAID 2(Hamming Code ECC)

- ECC(Error Correction Code) 기능이 없는 Disk의 오류 복구를 위해 개발되었으며, Hamming Code를이용하여 오류를 복구

- 최소 3개의 Disk로 구성 가능하며, 별도의 Disk에 복구를 위한 ECC를 저장하여 1개의 Disk 에러 시 복구 가능 (2개 이상 불가능)

 

4) RAID 3(Parity ECC, Byte 단위 I/O)

- Byte 단위로 striping을 하고 Error Correction을 위해 Parity 정보를 별도 Disk에 저장

- 최소 3개의 Disk로 구성 가능하며, 별도의 Disk에 복구를 위한 ECC를 저장하여 1개의 Disk 에러 시 복구 가능 (2개 이상 불가능)

 

5) RAID 4(Parity ECC, Block 단위 I/O)

- Block 단위로 striping을 하고 Error Correction을 위해 Parity 정보를 별도 Disk에 저장

- 최소 3개의 Disk로 구성 가능하며, 별도의 Disk에 복구를 위한 ECC를 저장하여 1개의 Disk 에러 시 복구 가능 (2개 이상 불가능)

 

6) RAID 5(Parity ECC, Parity 분산 저장)

- Block 단위로 striping을 하고 Error Correction을 위해 Parity 정보를 별도 Disk에 저장하는데, Parity 저장 Disk를 고정하지 않고 매번 다른 Disk에 저장

- 최소 3개의 Disk로 구성 가능하며, 별도의 Disk에 복구를 위한 ECC를 저장하여 1개의 Disk 에러 시 복구 가능 (2개 이상 불가능)

 

7) RAID 6(Parity ECC, Parity 분산 복수 저장)

- RAID 5에서 성능, 용량을 줄이고 안정성을 높인 RAID
- Block 단위로 striping을 하고 Error Correction을 위해 Parity 정보를 2개 Disk에 저장

- 최소 4개의 Disk로 구성 가능하며, 별도의 Disk에 복구를 위한 ECC를 저장하여 2개의 Disk 에러 시 복구 가능 (3개 이상 불가능)

 

 

 


# 참고

해당 글은 '이기적 정보보안기사 필기 1권 이론서'을 읽으며 필요한 부분만 정리한 내용입니다.

반응형
반응형

1. CPU

CPU는 ALU, Register, Control Unit, 내부 PCU 버스로 구성되어 있다.

- ALU(연산장치): 각종 산술 연산, 논리 연산을 수행하는 회로 (+, -, AND, OR ...)

- Register: CPU 내부의 소규모 데이터를 일시적으로 기억해두는 영역 (기억 장치 중 가장 빠른 Access 속도)

- Control Unit: 명령어를 해석하고 실행하기 위한 제어 신호들을 발생

- 내부 CPU 버스: ALU와 Register 간의 데이터 이동을 위한 경로

 

cf) Register의 종류

- PC: Program Count, 다음에 수행할 명령어가 저장된 주기억장치의 위치 지정

- MAR: Memory Address Register, 주기억장치에 접근하기 위한 주기억장치의 위치 기억

- MBR: Memory Buffer Register, 주기억장치에 I/O할 data 기억

- IR: Instruction Register, 주기억장치에서 인출한 명령코드 기억

 

cf) Bus - 시스템에 많은 장치를 공유하여 데이터, 주소, 제어 정보를 전달하는 전송 라인

 

CPU의 Instruction Cycle은 fetch, indirect, execution, interrupt로 구성되어 있다.

- Intstruction Cycle: 하나의 명령어 실행이 끝난 후, 다음 명령어의 수행이 끝날때까지 걸리는 시간

- 인출(Instruction Fetch): memory에서 data를 load하여 CPU에 있는 register에 적재하는 과정

- 간접(Indirect): memory를 참조할 떄 간접주소 방식을 사용하는 경우에 실행

- 실행(Execution): 명령과 데이터로 CPU가 산술, 논리 연산을 수행

- Interrupt: 예상치 못한 문제가 발생하더라도 업무 처리가 계속될 수 있도록 하는 기능 (H/W Interrupt, S/W Interrupt로 나뉨)

 

 

2. Memory

Memory Hierarchy란 계층적 구성으로 Access 속도는 높이고 가성비를 유지하는 아키텍처를 말한다.

고속의 CPU와 저속의 Hard Disk 사이에 캐시와 주기억장치 배치

Cache Memory: CPU와 Main Memory의 속도 차이를 극복하기 위해 사이에 존재하는 고속의 버퍼 메모리

 

cf) Cache Memory Mapping

- 직접 사상(Direct Mapping)

- 연관 사상(Associate Mapping)

- 집합 연관 사상(Set Associate Mapping)

 

cf) Cache Memory Replacement Algorithm

- Random: 교체될 page를 임의 선정

- FIFO: First In First Out, Cache 내 오래된 page 교체
- LFU: Least Frequently Used, 사용 횟수가 가장 적은 page 교체

- LRU: Least Recently Used, 가장 오랫동안 사용되지 않은 page 교체

- Optimal: 향후 가장 참조되지 않을 page 교체

- NUR: Not Used Recently, 참조 비트와 수정비트를 이용하여 미사용 page 교체(최근 사용되지 않은 page 교체)

- SCR: Second Chance Replacement, 최초 참조 비트를 1로 세팅하여 1인경우 0으로 세팅, 0인 경우 교체

 

Virtual Memory: Main Memory의 용량 문제를 해결하기 위해 보조기억장치(Hard Disk 등)를 Main Memory처럼 사용

 

cf) page / segment

- page: 가상 기억 장치 상에서 동일한 크기의 최소 논리 분할 단위로 나눈 것

- segment: 사용자 주소 공간을 용도별로 논리적 단위로 나눈 것

 

 

DMA: CPU의 개입 없이 I/O 장치와 기억장치 사이의 데이터를 전송하는 접근 방식

 

 

 

 


# 참고

해당 글은 '이기적 정보보안기사 필기 1권 이론서'을 읽으며 필요한 부분만 정리한 내용입니다.

 

반응형

+ Recent posts