보안/네트워크 보안

0916 시스템/ 네트워크 해킹(System/Network Security) 2일차

Bordercolli 2022. 9. 17. 09:47
728x90

시스템 네트워크 보안 2일차

네트워크 보안(일정)
네트워크의 이해 → 네트워크 분석취약점(목요일)
종합정리(금요일)

<복습>
★ 인터넷의 시작: 통신 장치들이 호환이 안되는 문제, 네트워크 장비를 만드는 회사들이 각자 독자적인 기술을 가지고 있어서 호환이 안됨. 그래서 만든 것이 ARPA에서 공통의 프로토콜(장비가 달라도 통신익 가능하도록 프로토콜을 개발(ARPAnet: 빈트서프, 로버트칸))
★ milnet와 tcp/ip로 나누이서 tcp/ip는 민간에 개방해서 상업용으로 사용가능하도록 하였다. 그래서 오늘날 사용하고 있는데, 정부 기관이다 보니 돈을 받을 수 없다. license free, isp기업들은 엄청 좋아함
★ ip프로토콜: ip주소를 분배하고 ip끼리 서로를 인식하고 통신할 수 있도록 하는 프로토콜
★ tpc/udp는 포트번호를 사용한다. app을 구분해서 인식할 수 있도록 하는 식별자 역할을 지원한다.

ip뒤에 붙어서 tcp헤더는 사람이 요청하는 데이터를 처리할떄, 꼼꼼하다. 순서대로 왔는지 체크하고 중간에 오지 않으면 안온거 다시 달라고 요청하고 그러한 것을 잘한다.

tcp특징
- Connection oriented: 데이터를 송수신하기 전에 연결을 확보한다.
순차전송: 순서대로 도착해야 한다. 중간에 못받은 것 있으면 그 뒤는 다 버림.(재전송 요청)
수신측에서 받을 수 있는 크기를 계속 확인한다. (수신측에서 다 받을 수 없는데 계속 보내면 받을 수 없는 것은 버린다. ) ex) 애기 이유식 먹는 것 생각 → 윈도우 사이즈
port 번호
시스템 포트: 0~1023, well known port : 용도가 미리 지정되어 있다는 의미 → 서버용 포트
등록된 포트: 1024-49151 → 특정 회사에서 개발한 app
동적 포트: 49152.-65535 → 자유롭게 사용 가능, 주로 클라이언트가 사용 (크롬, 인터넷 익스프로러, 앳지, 파이어폭스)
ex) 웹 브라우저가 50000.번을 사용하려고 한다. 웹 서버에 443포트에 접속을 하려고 한다. 그러면 tcp헤더에 소스 포트는 무엇인가? 50000, 목적지 포트는 443이 들어가게 된다.

sequence number: 순서번호, 일련번호. 순차번호. 순서대로 들어오면 그 번호를 써준다. tcp세그먼트에 번호가 들어간다. 16비트가 할당 되어서 상당히 길다.(65535)
tcp 데이터를 분할하면 각 분할한 조각에 헤더를 붙이는데, 이때 시퀀스 번호를 붙여준다. 그래서 도착지에 도착할떄는 그 번호를 보고 순서대로 붙여준다.

acknowledgement number: 응답번호, 다음에 받을 sequence number를 표시한다. ex) 서버가 클라이언트에게 파일을 주는데 1000번까지 줬다. 그러면 클라이언트는 다음에 1001번 달라고 클라이언트가 서버에게 알려준다. 1001번 주세요 그러면 서버는 1000번까지 잘 받았다고 인식하게 된다. (ack number)
→ 그래서 순차 전송이 가능해진다.

★ tcp flag: tcp의 속성을 의미한다. (6bit)
1비트씩 할당 순서는 UAPRSF
ex) 000010 → syn (연결요청) 010010 → ack/syn 000001 → fin

컬러풀하게 적어놓은 것: 플래그라고 한다. 각각 1bit임, 이를 tcp플래그라고 한다. 이는 tcp의 속성을 의미하는데, 전부 6개의 비트로 되어 있다.
urg: 긴급,
ack: 데이터를 필요로 하거나 데이터를 잘 받았을때(ok)
psh: 묻지도 따지지도 말라, 그냥 보내라 거기서 알아서 할 것이다.
RST: reset, 연결을 해제를 요청한다.(강제로)
ex) 보이스피싱오면 바로 끊어버리는 느낌
syn: 데이터를 보내도 될까요? tcp는 정중한 프로토콜, 보내도 될지 질문을 하고 서버가 ack를 보내면 데이터를 보낼 수 있다. 서버와 클라이언트는 syn/ack 둘 다 할 수 있다.(3way handshaking, 연결 설정 과정)

3way handshaking: 연결을 설정한 다음에 데이터를 보내고 fin을 보내 연결을 끊음.

★ 윈도우 사이즈는 수신자가 수신측에서 얼마를 받을 수 있다는 송신측에서 보고 판단해서 적당량을 보내줌

★ udp헤더 구조
순서체크를 하지 않는다. 경로를 확보 하지 않음. 상대방이 얼마나 받을 수 있는지 확인하지 않는다. 재전송 요청하지 않는다.
→ 아무것도 안하니까 빠른 처리 가능하다. 도착해서 빨리 사용자에게 보여주거나 바로 처리
→ 주로 실시간 음성이나 화면을 처리하는데 사용한다. (화상회의, 온라인 게임)
→ 시스템 간에 정보를 교환할 때(패킷 개수, 시간 동기화, 사용자를 위해서 dns에 대한 정보를 알려준다(도메인 정보를 알려준다.), 네트워크 상태 정보, 통계 등 간단한 그러한 요청)
→ 그래서 대부분 파일 사이즈가 매우 작다. (커봐야 60byte이하로 대부분)
헤더가 8byte, 한 줄이 4바이트, 4바이트씩 두 줄
출발지 포트 번호
목적지 포트 번호
전체 길이
체크섬
★packet유형
1. tcp를 사용하는 경우
2. udp를 사용하는 경우
3. tcp나 udp를 사용하지 않는 경우
4. ip를 사용하지 않는 경우

ip를 사용하지 않는데 왜 tcp/ip
왜 ip를 안사용하는거야? ip를 몰라서 arp를 사용한다. ip를 물어보기 위해서 arp를 주고받은 다음에 ip를 물어보고 알아내면 그 다음 사용할 수 있다.

이 아래 4가지 유형이 tcp/ip유형이다.
실제 패킷을 캡쳐해보면 다른 것들도 있지만, tcp/ip만 동작하는 것은 아니다. cisco장비끼리도 동작하는 것이 있다. 그래서 개별 회사들이 자기네 장비나 통신을 위해서 개별적으로 만드는 프로토콜들도 있음. 하지만 이 4개가 주로 tcp/ip에서 사용하는 유형이다.

★ 데이터 링크 레이어 절차(2계층)
mac주로를 본다. 프레임 헤더에는 목적지 mac주소가 있다. 목적지 주소와 자신의 mac주소가 일치하지 않는다. 케이블에서 랜카드에 도착했따. 랜카드에 mac주소가 있는데, 이 목적지 주소와 자신의 주소가 일치하지 않는다. 그러면 잘못 온거라서 버린다. 그런데 만약에 나한테 맞는게 왔다면 수신해서 3계층으로 간다.
그런데 나한테 온게 아닌데 열어본다면? 이를 스니핑이라고 한다. (데이터를 엿보는 행위) 데이터를 엿보려면 mac주소가 달라도 열어본다 이를 Promiscuous mode
(정리: 자신의 랜 카드에 있는 mac주소와 프레임 목적지 mac주소가 일치하지 않으면 버리는 것이 정상인데, 이를 버리지 않고 수신하도록 설정하는 것을 Promiscuous mode라고 한다., 우리말로는 마구잡이 모드)
ex) 우편함을 봤는데, 나에게 온 것이 아니면 버린다.

체크를 해제하면 목적지가 내&amp;nbsp; mac 주소인 것만 보여준다 .

★더미허브
허브: 트래픽이 들어오면 다른 pc에도 보낸다. 얘는 mac주소를 모른다. (목적지를 모름), 그런데 만약 여기 해커가 있다면 ? 이 트래픽이 들어오면 wrieshark만 키면 보인다. 그래서 대부분은 스위치를 사용한다. 그러나 가상 환경에서는 별도의 설정을 안하면 허브처럼 동작을 한다.그래서 트래픽이 다른 pc에도 간다.
스위치: 해당되는 목적지로만 보내주는 것

★libpcap: 패킷 캡쳐 라이브러리

리눅스에 tcpdump기능이 있는데, 터미널에서 패킷 지나가는게 보이는데, 그런식으로 볼 수 있다. 리눅스에도 wireshark동작

실습3) telenet sniffing
목표: 텔넷으로 접속한 사용자의 id, pw는 무엇인가?
★3way hadnshaking과정

★&amp;nbsp; 빨간색 글자는 클라이언트가 서버에게 보내는 것 ,&amp;nbsp; 파란색은 서버가 클라이언트에게 보내는 것


telnet에서 오른쪽 마우스 > follow > tcp stream
왜 하는가? tcp흐름을 보기 위해서 tcp흐름을 한 번에 보기 위한 방법
→ id가 한 글자씩, 색깔이 번갈아가며 색이 달라진다. 왜? 클라이언트가 입력할때마다 서버에서 echo(확인)로 돌려주고 있어서
이런게 왜 있냐면, 옛날에는 네트워크가 좋지 않았다. 그래서 확인할 필요가 있어서 입력할떄마다 서버에서 알려주게 되었다. 그러나 패스워드는 확인하면 위험하니까 하지 않음.

아이디를 보내는 과정
클라이언트가 보냄
서버가 보냄


이렇게 한 글자씩 보낸 것을 한꺼번에 보기 위해서 tcp stream을 하였다.
cf. telnet은 암호화가 되지 않아서 스니핑(도청)의 위험이 매우 높음 → 사용금지!(윈도우에서 지원이 안된다.)
그래서 ssh(secureshell)을 사용해야 한다.

실습4) ftp-clientside101.pcapng
ftp로 전달된 파일을 추출하라.
ftp와 ftp.data의 차이점은 무엇인ᄀᆞ? tcp헤더에 있는 포트번호
ftp: 21 → 명령어를 송수신하는 포트
ftp-data: 파일을 송수신하는 포트
다운로드는 서버가 클라이언트에게 파일을 주는 것

data에 오른쪽 마우스 클릭 > follow > tcp스트림 선택, ascii를 raw를 바꾸고 save as를 클릭해서 저장한다.
◆ follow > tcp stream을 선택을 하는 이유는: tcp가 사진을 찍으면 1500바이트씩 자른다. 그래서 번호를 붙인다. 그리고 재조립을 한다.

이미지는 바이너리라서 우리는 알아볼 수 없음 .

 

실습5) whoisshe.pcapng
목표: 사진의 주인공은 누구인가?



서버가 클라이언트에게 사진을 보내는데, 1514바이트씩 꽉꽉 채워서 보내고 있는 중이다.

http는 명령어와 데이터를 같이 보내서 명령어를 지워버려야 사진을 볼 수 있다. 그래서 HxD를 사용한다.
FF D8 FF E0 → JPG의 파일 시그니처라서 그 이전 부분은 블록 설정 후 삭제하면 된다.

WIRE SHARK 화면

 

HXD 화면 ( 앞에 것 다 잘라냄 .)
결과



실습6) 네이버 검색캡쳐.pcap
무엇을 검색했는가?
방법1) 검색은 get요청으로 전달이 보내진다. 그래서 get요청을 찾아보면 되는데, http.requests.method==GET (display filter에)


방법2) tcp stream


방법3) info에서 query찾기 또는 string 검색 창에서 query입력해서 find
방법4) frame.matches.search로 찾기(display filter에)

실습6) lemieux.pcap
frame contains party
follow tcp stream > 메일 내용 부분 복사 > bluebell decoder에 넣고 utf8을 하면 내용이 보인다.

★ frame contains 검색어 : 정확히 일치하는 것만 나온다.
★ frame matches 검색어 : 대소문자 구분 없이 더 넓은 범위로 검색, 정규식(PCRE, perl compatible regular expression)을 통한 구체적인 검색 가능해진다. (비스므리한거 다 찾음) 종합정리(금요일)
실습7)회사 내부 스파이를 잡아라 : 1_evidence01.pcap
apple mac: 하드웨어와 os를 같이 판매 → mac주소에 애플이라고 나옴
윈도우: 하드웨어의 mac주소가 네트워크 장비 회사, os는 ttl=128로 응답, 135,139번 포트 열려있음.

열린포트에서 어떻게 응답? ack/syn → 010010 → 18 디스플레이필터: tcp.flags





frame matches recipe
docx파일은 pk로 시작하는 시그니쳐를 가지고 있다.

파일시그니처 pk는 50 4b 03 04

저 문서를 저장해서 hxd에 넣고 50 40b의 앞 부분을 다 지우고 다시 저장한다. 그리고 확장자를 docx로 해서 확인해본다.

해시값 게산 방법
fasthash.exe 또는 bluebelldecoder이용하기

실습8) 2_evidence02.pcap
1번 문제


1번 문제

 




tcp stream eq1을 eml로 저장한 후, 메일 또는 outlook으로 열어본다.

이메일과 웹 메일의 차이점
웹 메일은 웹 브라우저(네이버, 구글, 다음 등)로 열어본다. 이메일은 outlook, outlook express, 메일(win10)으로 열어본다. → 이메일의 확장자는 eml이다.

검색어를 찾는 명령어

 



gif89a → 썸네일

 

 








edit > find packet > packet details > string: preview> 312



영화 이름: hack sneb? sneak Iknowyouwatchingmovie

 

<정답지> → 다시 해보기

 

스캐닝

3way handshaking

클라이언트가 syn를 하면, 서버쪽에서 netcat을 해서 들을준비를 하고 syn에 대한 ack/syn을 보내고 클라이언트가 ack를 보낸다.

syn를 보내고 열려있다는 것을 인지, 열린포트에서는 ack/syn을 보낸다. 하지만 닫힌 포트는 (81,82번포트처럼 잘 안쓰는 포트) ack/rst가 날라와 닫힌 것을 알 수 있다. 이를 공격자가 인지하는데 이를 포트 스캔이라고 한다. 즉 열린포트인지 닫힌 포트인지 (ack/rst)로 공격자는 구별을 한다. → 열린포트를 알 수 있다.
tcp syn scan(half open scan, stealth scan)
syn를 보내서 ack/syn가 오면 ack를 보내준다 →정상연결
syn만 보내서 마지막 ack를 보내지 않음
syn만 보내고 서버의 포트가 열려있는지만 확인하고 마지막 ack를 보내지 않음. → 연결이 이루어지지 않음. 포트만 열려있는지만 확인하고 연결이 실제로 이루어지지 않음.

2. tcp ack scan
ack를 먼저 보내서, 응답이 없으면 열린 포트, 닫힌 포트는 rst가 날라온다.

3. udp scan
실행중인 포트에서 udp응답이 온다. 하지만 handshack가 없어서 닫힌 포트는 아무런 응답을 하지 않음. (icmp destination unreachable)

4. tcp connection scan (연결을 완료하는 것, 정상연결)
* tcp connection scan 와 tcp syn scan차이는 ack를 보내주느냐 안보내주느냐 차이이다.

5. tcp xmas
tcp flag를 모두 1로 만들어서 보내는 공격: 111111 → flag 6개를 모두 활성화(엉터리 로직)
크리스마스가 되면 전등에 모든 불을 켜기 떄문에 111111
열린포트는 응답이 없으나 닫힌 포트는 rst를 보낸다. 그래서 구분이 가능하다.

6. tcp rst
rst를 보내는 기법(잘 사용 안함.)


apple mac: 하드웨어와 운영체제 같이 판매 → mac주소에 애플이라고 나옴
윈도우: 히드웨어의 mac주소가 네트워크 장비 회사, os는 ttl=128로 응답, 135,139번 포트 열려 있음.
tcpflag의 순서: UAPRSF
U:32 A:16 P:8 R:4 S:2 F:1

열린포트에서 어떻게 응답??? ACK/SYN → 010010 → 16+2=18 디스플레이 필터: tcp.flags==18
ACK로 응답하는지 확인하려면? 010000 → 디스플레이 필터에 입력 tcp.flags==16