보안/네트워크 보안

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

Bordercolli 2022. 9. 20. 17:32
728x90

암호화2 920일 화요일

암호화를 하는 이유

기밀성(confidentiality): 내용이 노출되지 않도록 하는 것

무결성(integrity): 내용이 변조되지 않도록 하는 것

가용성은 암호화와 상관이 없다.

인증(authentication): 올바른 사용자임을 증명하는 것

부인봉쇄: 아니라고 하지 못하게 하는 것

 

대칭키(symmentric key)==secret key ==session key

암호화키와 복호화 키가 서로 대칭을 이룬다. 사실상 하나의 키다.

Dr.Feistel, 헝가리의 2차 세계대전 출신으로 IBM의 루시퍼 시스템인데, 이게 다운 그레이드 되어서 DES, 3DES가 되었다.

SPN구조(치환와 전치의 반복): AES(리인델)

대칭키 방식은 크게 두가지인데, SPN구조와 feistel구조이다.

요새는 aes를 많이 사용한다. 치환과 전치를 여러 번 사용하는 것이 aes(리힌델)구조

대칭키의 가장 큰 문제점: 키 전달의 문제, 키 개수의 문제

 

공개키 방식

이를 해결하기 위해서 디피에라는 사람이 공개키(public key)라는 것을 만들어냄. 개인키와 공개키 한 ᄊᆞᆼ으로 이루어져 있다. 개인키(private key)는 자신이 혼자만 보관하고 공유하지 않는다. 공개키는 거래하고 싶은 상대방 누구에게나 제공을 한다. 이런 두가지 공통점이 있다. 개인키로 공개키를 연산해내는 것은 쉬운데 공개키로 개인키를 알아내는 것은 불가능하다.

 

1) 디피엘 헬만

- 대칭키 교환 문제를 해결 : 서로 공개키를 교환한다 자신의 개인키랑 연산해서 대칭키(세션키)를 생성해낸다.

이산대수의 어려움에 근거 : 한쪽 방향으로는 계산이 쉬움(검증), 반대방향으로는 계산하기 어려움.

 

RSA(RC4, RC6, Ron Rivest)암호화 알고리즘임

Rivest가 개발한 것, RSA, 공개키, 해시함수도 만듦.

- 기밀성: 수신자의 공개키로 암호화를 한다.

인증: 송신자의 개인키로 암호화를 해서 보낸다.

소인수분해의 어려움 ex) 13*7=91 역순 계산은 어려움. 이러한 방식을 이용한 것

rsa와 디피에 헬만의 암호화 알고리즘 차이점 잘 기억해두기

 

 

3) ECC(Elliptic curve cryptograph, 타원 곡선 암호화)

이산대수의 어려움에 근거한 방식에서 출발함.

장점: 짧은 키 길이로 강력한 암호화를 제공한다. 키가 길면 연산량이 많아진다. cpu나 메모리/ power를 많이 잡아먹는다. 전기를 많이 먹고 자원 낭비. ecc는 키가 짧으니 이러한 단점을 만회할 수 있음.

ecc는 모바일 환경에 적합하다. 스마트폰 기능이 많아지면 배터리가 ᄈᆞᆯ리 닳는다. 배터리 용량이 커지는 이유는 앱을 많이 깔고 기능이 많은 것을 사용하다 보니 소모량이 ᄈᆞᆯ리 닳는다.

유튜브를 방문하는 사람은 스마트 폰으로 더 유튜브를 많이 보기 떄문에 스마트폰 환경에 적합한 것이 좋다. 인스타그램도 이를 사용한다. 인스타그램, 유튜브, 페이스북

반면에 11번가, 쿠팡은 pc로 구매하는 사람이 많기 때문에 rsa를 사용한다.

 

타원곡선이란 무엇인가?

hash함수의 특징

고정길이 출력: 원문의 길이와 관계없이 고정 길이로 출력된다.

일방향 함수: 원문으로 해시값을 계산하는 것은 매우 쉬우나 해시값으로 원문을 알아내는 것은 불가능하다.

충돌 방지: 해시값이 같은 원문은 거의 존재하지 않음.

 

취약한 해시함수: MD5, SHA-1 더 이상 사용하면 안됨(충돌ᄊᆞᆼ을 막 찾고 그럼...)

안전한 해시함수: SHA256(=SHA2 / 비트코인, 공인인증서 사용)이상을 사용해야 한다. 384, 512, SHA3

 

전자서명

생성: 원문의 해시값에 송신자의 개인키로 암호화(서명)해서 원문에 붙여 보낸다.

검증: 서명된 해시값을 송신자의 공개키로 복호화해서 원문의 해시값과 비교 일치하면 무결성 증명, 일치하지 않으면 변조

 

인증서(Certificate)

생성: 공개키의 해시값에 인증기관의 개인키로 암호화(서명)

검증: 서명된 해시값을 인증기관의 공개키로 복호화해서 공개키의 해시값과 비교한다.

전자서명과 인증서는 거의 같다. 원문 대신에 공개키가 들어간다.라는 차이뿐이다.

 

pki

인증기관(ca): 인증서를 발급하는 곳.

root CA(최상위 인증기관): 인증기관을 관리

등록기관(registration authority): 인증서를 신청한 조직(회사, 기관 등)을 검증하고 접수를 받음.

 

ssl/tls는 저러한 방식을 이용하는 특별한 프로토콜, ssl/tls는 큰 묶음으로 해시함수도 들어가고 대칭키도 사용하고 공개키도 사용하고 등등 그러한 방식을 총칭하는 것이다.

 

NPKI: 우리집에 가족 구조다. 그런데 ROOTCA는 엄마역할.

 

 

RSA의 특징

1) 기밀성 방식

보스와 킬러가 있는데, 보스도 공개키가 있다. 킬러도 개인키, 공개키가 있다. 보스가 닌자를 죽여라 라고 메시지를 보내려고 하는데, 킬러만 받으면 좋겠다. 그러면 킬러의 공개키로 암호화를 해야 한다. (킬러의 개인키로만 복호화를 시키기 위해서) 킬러가 받으면, 자신의 개인키로 복호화를 한다. 그러면 킬러만 볼 수 있음. 킬러는 과연 닌자를 죽이러 갔을까? 킬러가 비밀리에 받기는 했으나, 누구나 킬러의 공개키를 가질 수 있고, 보스가 시켰다는 증거가 없다. 그러한 상황이다,(기밀성)

2) 인증 방식

닌자를 죽여라 라는 메시지를 보스가 보스의 개인키로 암호화를 했다. 분명히 보스가 보낸 것이 맞기 떄문에 보스의 공개키로 복호화가 되기 떄문에(공개키로 복호화가 된다는 것은 개인키를 사용했다는 것이기 때문에) 그런데...킬러가 닌자를 죽일 수 있었을ᄁᆞ? 닌자도 이 내용을 알 수 있었다. 닌자도 보스의 공개키가 있기 떄문이다.그래서 복호화가 가능해서 AHESM 것을 알고 있었음.

 

SSL/ TLS

- 웹에서 암호화 통신을 하기 위해서 사용하는 프로토콜 집합

- 여러 가지 암호화가 쓰인다. 대칭키, 공개키, 해시함수도 사용...이거를 사용하는데, 처음 접속시 웹 브라우저와 웹 서버가 어떤 암호화방식을 사용할 것인지를 협의한다.(우선순위가 있음.키가 더 길고, 안전하고...이러한 것들을 먼저 사용하도록 구성, 웹 서버나 브라우저가 오래되면 옛날방식으로 밖에 안돼서 접속을 거부할 수 있다.)

핵심원리: 웹 서버가 자신의 공개키를 인증서 형식으로 제공한다. 웹 브라우저는 세션키를 생성해서 웹 서버의 공개키로 암호화해서 웹 서버에게 보낸다. 웹 서버는 자신의 개인키로 복호화를 한다.(세션키가 나온다.) 웹 브라우저와 웹 서버는 데이터를 보낼떄 세션키로 암호화해서 보냄 상대방에게 받은 암호문은 세션키로 복호화를 한다.

 

 

<암호화 응용>

SSL/ TLS5계층이다. TCP/IP는 원래 5-6계층에 원래 없다 (뱀의 허리에다가 줄을 묶어라) TCP/IPOSI7로 말하기는 어렵다.APP층과 전송층 사이에 있다. record프로토콜은 실제로 암호화를 한다. handshake=상대방도 tls를 사용하고 있구나 라는 것을 확인하기 위해서 , change cipherspec= 암호하 대칭키는 뭐 쓰시나요? 공개키는 어떤거 쓰시나요? (암호화방식 결정), ALERT= 인증서가 이상해요!!알려줌. SSL3.0을 표준화하기 위해서 TLS1.0이 나왔다.

 

통신 채널을 보호 인정서를 받고 암호화하는 순간, 내 웹 브라우저와 네이버 사이에는 전체를 암호화하는 것이다.

 

전체를 암호화하는게 좋은가? 부분적으로 암호화하는게 좋은가? 윗 사람에 따라서 결정

데이터 암호화, 서버 인증, 무결성 인증

클라이언트 인증은 거의 하지 않음. 자기의 인증서를 사용할때만 사용한다.(금융사이트 접속할때만)

 

 

 

실습1)우분투 자체 서명(ᄈᆞᆯ간색으로 나옴. 자기가 자체적으로 하기 때문에)

 

https://wnw1005.tistory.com/457

 

[Ubuntu 20.04 - Apache2 서버]자체서명 SSL/TLS 인증서를 이용한 https:// 프로토콜 연결 구축

[관련 게시물] 2020/11/10 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버] 가상호스트(VirtualHost) 설정 2020/11/12 - [서버 운영/APM 서버 구축] - [Ubuntu 20.04 - Apache2 서버]자체서명 SSL/T..

wnw1005.tistory.com

자기가 자기를 인증하려면 CA키가 있어야 한다(ROOTCA). 서버의 인증서를 성한다.

 

 

참고) OpenSSL을 이용해서 자가 인증서를 생성하기(RootCA생성 인증서 생성)

 

실습2)공인인증서 로그인

공동인증서 등록 공개키 주세용

원리 강의 다시 듣기(지워짐ㅜㅜ)

 

세션이 만료되었다. 서버에서 session(쿠키대신 사용)의 유효기간이 있음. 이 기간이 끝남.(새로 본인 확인을 하라.)

 

세션이 활성화되어 있는 동안 사용하는 키가 세션키(세션이 만료되면 세션키도 버림)

일반적으로는 브라우저를 닫으면 세션키도 삭제됨.

 

 

전자봉투

생성: 원문의 해시값에 송신자의 개인키로 서명하고 원문 및 송신자의 공개키ᄁᆞ지 첨부해서 세션키로 암호화한다. 세션키는 수신자의 공개키로 암호화해서 첨부한다.

ssl/tls는 온라인에서 실시간으로 연결된 상태에서 암호화되느데, 이는 파일 한 덩어리로 만들어서 usb로 보내도 상관없고, 채팅, 이메일 등으로 보내도 되고, 오프라인으로 전송이 가능하다.

파일은 하나만 나온다.

 

최근의 이슈

AES의 키 길이 문제: 컴퓨터가 너무 발전하다 보니 크래킹 시간이 줄어들고 있다. 크래킹 시간이 몇 조년 이랬는데, AES128bit안정성에 문제가 있다.

RSA2048bit이상을 사용해야 한다.

RSA512bit에서 RSA1024bit로 업그레이드: 2004

RSA1024bit에서 RSA2048bit로 업그레이드: 2012

RSA4096bit????? 키를 계속 늘릴 수 없어서 ECC를 사용한다.

ECC160bitRSA1024bit와 거의 비슷한 암호화 강도를 제공한다. 최근에는 ECC256bit사용중(유튜브, 인스타그램, 페이스북 등 )

 

랜섬웨어들이 대부분 rsa2048bit를 사용해서 암호화를 한다.

랜섬웨어 실행파일에 무엇이 들어있을까? 공격자의 공개키가 들어있어서 파일의 공개키로 암호화를 한다.

암호화했던 공개키에 대한 개인키를 돈 받고 주겠다는 것

대응 방법: 오프라인 백업(회장하드), 온라인 백업(클라우드에 업로드)

랜섬웨어가 대칭키로 암호화를 하면? 악성코드 실행 파일 안에 대칭키가 있을 것이다. 그 키만 찾으면 복호화가 가능하다.

 

가상화폐는 주로 해시의 원리를 이용 ex) SHA

 

 

 

 

 

<시스템 보안>

Exploit

클라우드 환경은 대부분 리눅스

it를 잘하려면 리눅스, 네트워크, 데이터베이스를 알아야 한다.

클라우드도 대부분 다 위 세가지를 알아야 한다.

 

보안 컨설팅을 할떄 가장 만저 하는 것이 자산 분석

자산 무형자산, 유형자산

무형자산: 컴퓨터, 회사건물, 공장, 인력, 고객 등등

유형자산: 브랜드 이미지, 데이터, 저작권,특허, 평판 등등

자산에는 약점이 존재한다.

ex) 정보자산: 공격을 당할 수가 있는데 예를 들어 스크립트, 업로드 관련 약점들이 존재하는데, 정보자산 말고 현금, 보석, 무기명채권, 암호화폐(콜드월렛) 이러한 것들은 도난 및 분실 등 그런데 약점이 없는 것들

 

취약점 분석: 취약점들을 찾아내는 것, 버전이 달라지면 해당 취약점은 존재하지 않는다.

취약점은 특정 버전에만 존재하는 것 왜냐하면 취약점이 존재하면 패치를 적용하면 해결된다. 패치를 적용하는 순간 버전이 달라진다. 그래서 취약점 분석이라는 것은 어떤 버전인지만 알면 된다. + 그 버전에서 가지고 있는 취약점이 무엇인지 이것만 알면 된다. 어떤 버진인지 확인한다.(진단 기능 sw로 해결)

어떤 버전인지 확인만 하고 클라우드에서 해결하기도 한다. 이렇게 하면 취약점 진단 도구를 만들 수 있다. 과거는 sw에다 다 넣어서 업데이트를 매번 해야했었다. 요즘은 클라우드에 넣고 거기 해당하는 취약점이 뭔지말 알아내면 됐기 때문에 편리해짐

그 버전에서 가지고 있는 취약점이 무엇인지(지식) 클라우드에서 해결 가능, 검색

패치개발에 시간이 많이 걸린다. 만약 오늘 취약점을 누가 발견했다고 알려주면 담당자 패치 제작자 테스트 담당자 애플리케이션/ os 등 테스트 이 와중에 전 단계로 돌아갈 수도 있음. 이러한 과정을 다 거치면 패치를 인증을 받아야 한다. 아니면 인증이 깨진다

Zeroday(당일치기) exploit: 패치가 배포되기 전에 exploit code를 먼저 만들어서 공격하는 사례, 24시간 이내에 라는 의미

- 패치가 배포되기 전에 공격을 하면 무방비 상태에서 공격을 당하는것이니 대응할 방법이 없다. (포트를 닫는거 말고는 방법이 없음.)

알려지지 않은 취약점이라는 의미 Darkweb에서 거래가 되기도 한다.

ex) scarcruft는 다크웹에서 adobe flash의 취약점을 사다 공격했다고 한다.

 

oneday exploit

알려진 취약점, 패치가 배포되었지만 아직 설치하지 않은 상태

패치를 설치하지 않은 시스템만 골라서 공격이 가능해진다.

그런데 왜 패치를 설치하지 않았을ᄁᆞ? 호환성, 의존성 문제(os를 업데이트 했더니 app이 안돌아간다. 아니면 jre를 업데이트했는데 자바 프로그램이 안돌아간다. 이것처럼 의존성 문제로 동작에 영향이 있을ᄁᆞ봐 우려되어서)

알려진 취약점 공격방법도 유튜브, 블로그, sns 등에 나와있음.

 

약점 공식 번호: CWE-nnnnn

(CWE: common weakness enumeration, 보편적인 약점 목록화)

yyyy년도 4자리 언제 발견된 것인지 확인

취약점 공식 번호 CVE-YYYY-NNNNnnn(대문자 네 자리는 필수이다. 소문제 세 자리는 선택 )

 

약점을 관리하는 사이트가 있다. 약점을 관리하는 공식 기관.

https://cve.mitre.org/ 약점을 관리하는 공식 기관

 

CVE - CVE

The mission of the CVE® Program is to identify, define, and catalog publicly disclosed cybersecurity vulnerabilities.

cve.mitre.org

https://cwe.mitre.org/ mit research

 

CWE - Common Weakness Enumeration

CWE™ is a community-developed list of software and hardware weakness types. It serves as a common language, a measuring stick for security tools, and as a baseline for weakness identification, mitigation, and prevention efforts. 2022 CWE Top 25 Most Dang

cwe.mitre.org

 

 

실습3)metasploitable2

로그인: msfadmin/msfadmin

metasploitable2

각종 취약한 버전을 골라서 설치한 victim용 실습 이미지 exploit가 가능해진다.

rapid7이라는 회사에서 metasploit(공격용 도구)를 팔고 있는데, 공격을 해볼떄가 없다. 그래서 이를 테스트해보기 위해서 metasploitable2(피해자 도구)를 만들었다.

공격용 도구는 칼리 리눅스 안에 들어있다. 공격용도구는 악성코드로 인식을 해서 공격모듈이 지워진다. 그래서 칼리 리눅스를 이용한다.

 

 

id: ive, password: after

계정을 만든 이유: exploit한 후 계정을 크래킹 할 예정

 

1. 칼리리눅스를 부팅

 

2.

데이터 베이스 만들고 사용자 만들고 이 작업을 하기 떄문에 해야 한다.

 

 

 

 

 

2. 스캐닝

tcp scan

-3way handshaking을 완성하는 스캐닝 로그가 남기 때문에 공격자는 잘 하지 않는 스캐닝임

sudo nmap sT 192.168.5.134

SYN scan

-3way handshaking을 완성하지 않는 스캐닝 (SYN만 보내고 ACK를 보내지 않는 기법)

sudo nmap sS 192.168.5.134

sudo nmap sS 192.168.5.134 p 1-20000 //포트 번호 지정 가능

 

UDP scan

실행중인 udp서비스를 확인하는 스캐닝

sudo nmap sU 192.168.5.134

 

ACK scan

OS scan

엉터리 스캔(stealth scan)

tcp/ip의 논리에 맞지 않는 스캐닝 기법

xmas ,fin, null 세 가지 스캔 방식이 있다.

xmas scan

크리스마스에는 창고에 있던 전구를 꺼내서 켠다.

sudo nmap sX 192.168.5.134

fin scan

종료요청을 보내면 열린 포트는 응답없음, 닫힌 포트는 rst를 보낸다.

sudo nmap sF 192.168.5.134

 

null 스캔

tcp flag를 모두 0으로 만들어서 보내는 스캔

sudo nmap sN 192.168.5.134

 

버전스캔

버전을 알면, 취약점도 알 수 있다.

sudo nmap sV 192.168.5.134

ALL Scan

script스캔 + os 스캔 + traceroute + version스캔

sudo nmap A 192.168.5.134 T4 (숫자가 클수록 속도가 빠르다. (0-6))

 

 

21번 포트는 FTP서비스를 실행하고 있다.

vsftpd 2.3.4라는 버전을 사용하고 있다: 백도어 커맨드가 실행되는 취약점을 가지고 있다.

가능한 이유: ftp를 사용하는 vsftp2.3.4버전에 백도어가 실행되는 취약점이 있었다.

- exploit를 해서 취약점을 공격했더니, shell을 실행할 수 있었음. (root권한으로)

 

 

정리

1단계: namp을 이용해서 target host를 스캐팅

$ sudo nmap A 192.168.5.134

 

2단계: 버전 확인 구글에서 취약점 확인 현재 여기

3단계: 스크립트로 확인 (진ᄍᆞ로 공격 가능한가?)

4단계: Metasploit로 공격이 실제로 가능한가?

 

Script scanning(3단계)

아까 nmap을 사용했던 두 번쨰 탭 클릭

 

 

 

 

 

 

 

 

Metasploit

 

-무어가 perl script로 만든 취약점 공격 도구(에러가 많음)

rapid7이라는 보안 전문회사에 metasploit를 매각. (free배포로 약속(framework), 유료로 판매하는 버전(pro) 칼리리눅스 안에 들어있음.)

 

취약점 사례 분석) 프린트 나이트메어 취약점

https://www.boannews.com/media/view.asp?idx=98833

프린트나이트메어 취약점은 CVE-2021-1675 아니고 제로데이

패치로 해결되지 않았기 때문에

 

MS직원 중에 테스터의 비율은? 50%(패치가 제대로 동작하는지? 또 다른 취약점이 동작하지 않는지?)