Download presentation
Presentation is loading. Please wait.
1
SPARCS Wheel Seminar 20160726 Mango X Sugoi
Security SPARCS Wheel Seminar Mango X Sugoi
2
시작하기에 앞서 Goals of Security Confidentiality : 비밀 정보는 비밀로 간직해야 한다
Integrity : 정보는 신뢰할 수 있어야 한다 Availability : 서비스는 항상 접근이 가능해야 한다 Authenticate : 인증과 관련한 내용
3
index Cryptography Cipher Hash Transmission Layer Security ETC …
4
Cryptography _ cipher 데이터를 (원하는 사람만 볼 수 있도록) 변환할 때 사용하는 알고리즘 이다.
방식 : 1) 키를 생성한다 -> 2) 암호화한다 -> 3) 복호화한다 간단한 예시들 : 카이사르 암호, RSA 등등…
5
Cryptography _ cipher 용어들에 대하여 알아봅시다! Plaintext (평문) : 암호화하고 싶은 것
Ciphertext (암호문) : 암호화한 것 Key : 암호화할 때 필요한 것 Encrypt Function (암호화 함수) Decrypt Function (복호화 함수)
6
Cryptography _ cipher 대칭키 암호화 알고리즘 : Encryption Key == Decryption Key
공개키와 비밀키가 있다. 암호화할 때 공개키를 사용하고, 복호화할 때 비밀키를 사용한다! e=1 라는 좋은 자료가 있어요 이 자료에 따르면 사용자들의 공유 관계가 완전 그래프라 하면… 대칭키 암호화 알고리즘의 경우 : N * (N-1) / 2 = O(N^2) 비대칭키 암호화 알고리즘의 경우 : N * 2 = O(N) 어느 것이 더 효율적인지 알겠죠?
7
Symmetric-Key Cipher
8
Stream cipher 만든 Key로부터 난수를 연속적으로 생성하여 Plaintext와 XOR한다.
E(p, k) = p ^ G(k) G(k)를 알아도 k를 추측할 수 없어야 한다. 부적절한 Stream Cipher의 사용은 심각한 암호학적 문제를 발생시킬 수 있다! (Stream Cipher Attack이라는 것이 있는데 설명은 생략할게요)
9
BLOCK cipher 만든 Key로부터 난수를 연속적으로 생성하여 Plaintext와 XOR한다.
E(p, k) = p ^ G(k) G(k)를 알아도 k를 추측할 수 없어야 한다. 부적절한 Stream Cipher의 사용은 심각한 암호학적 문제를 발생시킬 수 있다! (Stream Cipher Attack이라는 것이 있는데 설명은 생략할게요)
10
Block cipher Block 단위로 암호화 AES, DES, 3-DES 등이 있다. 𝐶 𝑖 = 𝐸 𝑘 𝑃 𝑖
𝐶 𝑖 = 𝐸 𝑘 𝑃 𝑖 𝑃 𝑖 = 𝐷 𝑘 ( 𝐶 𝑖 ) 여러 개의 Block을 암호화하는 규칙 : Block cipher mode
11
Block cipher mode – ECB 단순한 block cipher는 문제가 뭘까?
두 block 이 같다면, Cipher text도 같다!
12
Block cipher mode : ECB and CBC
ECB mode 𝐶 𝑖 =𝐸 𝑃 𝑖 CBC mode 𝐶 𝑖 =𝐸 𝑃 𝑖 ⊕ 𝐶 𝑖−1 𝑃 𝑖 =𝐷 𝐶 𝑖 ⊕ 𝐶 𝑖−1 그럼 𝐶 0 은?? IV (initial vector)
14
CBC : bit flip attack CBC mode
𝐶 𝑖 =𝐸 𝑃 𝑖 ^ 𝐶 𝑖−1 𝑃 𝑖 =𝐷 𝐶 𝑖 ^ 𝐶 𝑖−1 One bit flip in 𝐶 𝑖 Whole change in 𝑃 𝑖 and one bit flip in 𝑃 𝑖+1 We can change the plaintext by bit flipping!
15
ASymmetric-Key Cipher
16
Public key crypto - RSA 𝑁=𝑝𝑞 (𝑝,𝑞 𝑖𝑠 𝑝𝑟𝑖𝑚𝑒) 𝑐ℎ𝑜𝑜𝑠𝑒 𝑒 𝑤𝑖𝑡ℎ gcd 𝑒,𝜑 𝑁 =1
Really Secure Algorithm Rivest-Shamir-Adleman 소인수분해의 어려움을 기반으로 하는 암호화 방법이다. public key : 𝑁, 𝑒 secret key : 𝑑,𝜑(𝑁) 𝑁=𝑝𝑞 (𝑝,𝑞 𝑖𝑠 𝑝𝑟𝑖𝑚𝑒) 𝑐ℎ𝑜𝑜𝑠𝑒 𝑒 𝑤𝑖𝑡ℎ gcd 𝑒,𝜑 𝑁 =1 𝑓𝑖𝑛𝑑 𝑑≡ 𝑒 −1 𝑚𝑜𝑑 𝜑 𝑁 𝑐≡ 𝑚 𝑒 (𝑚𝑜𝑑 𝑁) (암호화) 𝑚≡ 𝑐 𝑑 𝑚𝑜𝑑 𝑁 (복호화)
17
Public key crypto – RSA 𝑁=𝑝𝑞 (𝑝,𝑞 𝑖𝑠 𝑝𝑟𝑖𝑚𝑒) 𝑐ℎ𝑜𝑜𝑠𝑒 𝑒 𝑤𝑖𝑡ℎ gcd 𝑒,𝜑 𝑁 =1
𝑓𝑖𝑛𝑑 𝑑≡ 𝑒 −1 𝑚𝑜𝑑 𝜑 𝑁 𝑐≡ 𝑚 𝑒 (𝑚𝑜𝑑 𝑁) (암호화) 𝑚≡ 𝑐 𝑑 𝑚𝑜𝑑 𝑁 (복호화) 왜? 𝑚 𝑒𝑑 = 𝑚 𝑘𝜑 𝑁 +1 ≡1∗𝑚 public key : (𝑁, 𝑒) secret key : 𝑑
18
Public key crypto – RSA RSA는 전자 서명도 가능합니다 전자서명 : “내가 전에 당신과 거래했던 A야”
B가 A에게 서명을 요구 B가 A에게 서명 메시지 𝑚을 전송 A는 자신의 비밀키로 𝑚 𝑑 를 계산해서 B에게 전송 B는 과거에 거래한 A의 공개 키를 이용해서 𝑚 𝑑𝑒 를 계산 𝑚 𝑑𝑒 =𝑚이라면 서명에 성공
20
Public key crypto – ECC Elliptic curve cryptosystem (타원곡선암호)
𝑇= 𝑥,𝑦 𝑦 2 = 𝑥 3 +𝑎𝑥+𝑏}+∞ 타원 곡선 위의 점을 정수처럼 쓸 수 있게 연산을 정의한다 어렵지만 더욱 안전하기에 이것을 쓰는 추세이다
21
Example _ HTTPS 로그인시, 도청이 불가능하도록 암호화 하기 위함 또한 상대방이 진짜 그 상대방인지 확인 (서명!)
22
HASH Hash가 뭔지는 데이타구조(CS206)에서 다들 배우셨죠?
비밀번호 보관, 파일, 데이터 위/변조 검증(md5 checksum) , 파일, 데이터 식별자 등에 사용 예시 MD5 : 128byte hash, 현재는 Collision Attack이 발견되었다 SHA1 : 160byte hash, 현재는 SHA-256, SHA-512, SHA-3등을 사용한다.
23
HASH Hash Decode는 Rainbow Table을 이용한다.
결국 Hash를 Decode하는 방법은 Brute-Force 밖에 없어요 ㅠㅠ
24
HASH _ SALT 예를 들어 사용자가 password라는 비밀번호를 만들었다고 합시다. 그 러면 SHA1 Hash 결과는 5baa61e4c9b93f3f b6cf8331b7ee68fd8 가 됩니다. 그런데 이건 너무 흔하니까 금방 뚫려버리겠죠? 그래서 salt라는 것이 만들어졌어요.(그냥 hash하고 싶은 문자열에 붙이 는 임의의 문자열을 말해요) Salt를 ‘|||s4ltbymango’이라 하고, password 뒤에 붙여봅시다. password|||s4ltbymango를 SHA1으로 Hash해봅시다. 이제는 찾기 힘 들거예요. 물론 salt의 길이는 길면 길수록 좋습니다.
25
HASH _ PBKDF2 가장 많이 사용되는 key derivation function(심지어 미국 정부에서도)
PBKDF2(Password-Based Key Derivation Function) 솔트를 적용한 후 해시 함수의 반복 횟수를 임의로 선택할 수 있다. PBKDF2는 아주 가볍고 구현하기 쉬우며, SHA와 같이 검증된 해시 함수만을 사용한다. PBKDF2의 기본 파라미터는 다음과 같은 5개 파라미터다. DIGEST = PBKDF2(PRF, Password, Salt, c, DLen) PRF: 난수(예: HMAC) Password: 패스워드 Salt: 암호학 솔트 C: 원하는 iteration 반복 수 DLen: 원하는 다이제스트 길이
26
HASH _ bcrypt password 저장을 목적으로 설계되었다.
현재까지 사용되는 가장 강력한 해시 메커니즘 중 하나이다. 보안에 집 착하기로 유명한 OpenBSD에서 기본 암호 인증 메커니즘으로 사용되 고 있다. (또한 미래에 PBKDF2보다 더 경쟁력이 있다고 여겨진다.) "work factor" 인자는 하나의 Hash Digest를 생성하는 데 얼마만큼의 처리 과정을 수행할지 결정한다. "work factor"를 조정하는 것만으로 간 단하게 시스템의 보안성을 높일 수 있다. 다만 PBKDF2와는 달리 bcrypt는 입력 값으로 72 bytes character를 사 용해야 하는 제약이 있다.
27
HASH _ SCRYPT PBKDF2와 유사하다.
scrypt는 다이제스트를 생성할 때 메모리 오버헤드를 갖도록 설계되어, brute-force attack을 시도할 때 병렬화 처리가 매우 어렵다. scrypt의 파라미터는 다음과 같은 6개 파라미터다. DIGEST = scrypt(Password, Salt, N, r, p, DLen) Password: 패스워드 Salt: 암호학 솔트 N: CPU 비용 r: 메모리 비용 p: 병렬화(parallelization) DLen: 원하는 다이제스트 길이
28
Transport layer security
인터넷에서의 정보를 암호화해서 송수신하는 프로토콜이다. Netscape 가 개발한 SSL(Secure Sockets Layer)에서 기반한 기술로, 국제 인터넷 표준화 기구에서 표준으로 인정받은 프로토콜이다. OSI의 다섯 번째 Layer에 위치한다. (Session Layer) 현재 최신 버전은 TLS 1.2
29
SSL _ History SSL 1.0 : 만들어졌으나 치명적인 보안 결함 때문에 공개된 적은 없다.
SSL 3.0 : POODLE, DROWN 등의 취약점이 발견되어 암호화 프로토콜 로의 기능을 잃은 상태이다. 현재 지원이 중단되었다. IE6이 SSL 3.0까 지만 지원했었다.
30
TLS _ history TLS 1.0 : 1999년도에 SSL 3.0의 업그레이드 버전으로 공개되었다. SSL 3.0이 가지고 있는 대부분의 취약점이 해결되었다. IE8이 TLS 1.0까지만 지원했었다. TLS 1.1 : 암호 블록 체인 공격에 대한 방어와 IANA 등록 파라메터의 지 원이 추가되었다. 2006년 4월에 공개되었다. TLS 1.2 : 2008년도 8월에 공개된 TLS의 최신 버전이다. 취약한 SHA1 이 SHA-256으로 교체되었다.
31
TLS _ Overview Client와 server는 같은 키를 생성하고 생성된 대칭키를 이용하여 주고 받는다.
1. Client Hello Client에서는 사용 가능한 암호화 알고리즘 및 설정 등을 server에게 보낸다. 2. Server Hello Server는 자신의 인증서와 사용 가능한 알고리즘 등을 client에게 보낸다. 3. Client Key Exchange 받은 인증서를 검증한 뒤, 대칭 키를 생성하고 이를 인증서의 공개키로 암호화해서 서버에게 보낸다.
32
TLS _ Certificate “an electronic document used to prove ownership of a public key. (X.509)” = public key with owner and issuer information 주로 RSA Certificate를 이용한다. 인증서의 유효성을 보장해주는 Owner 정보가 있다. RSA signing, CA 등을 사용한다. CA는 Self-signed certificate(issuer가 자신인 인증서)를 가지고 인증서 를 발급해주는 기관을 의미한다. CA의 Self-signed certificate들은 브라 우저 및 OS에 내장되어 있기 때문에 Validate가 가능하다!
33
Validate certificate Python Pseudocode로 알아보자!
cert = certificate_information while True: if cert == CA in Web Browser / OS pass elif cert is self-signed fail cert = cert’s issuer-cert
34
Certificate File structure
.crt: base64 encoding of certificate .cer: same as .crt, used by Microsoft .key: base64 encoding of private key .pem: base64 encoding of private key and key’s info Public key를 저장하는데 사용할 수도 있다. .pfx: certificate와 private key를 암호화 .pem 또는 .key 파일이 유출되면 절대 안된다.(비밀키 정보이므로) 유출되었을 경우에는 인증서를 즉시 해지하고 재발급 받아야 한다.
35
HTTP(over)S(sl) HTTP + S 데이터를 암호화하여 통신하여 공격자가 데이터를 볼 수 없다. Port : 443
느리다
36
ManInTheMiddle ATtack
공격자가 중간에서 client와 연결 / server와 연결하여 서로에게 상대방 인 것처럼 보이게 하는 공격 방법이다. 모든 데이터를 볼 수 있으며, 적절하게 위/변조하여 보낼 수 있다. 이 공격이 수행되는 동안 attacker와 client는 서버의 인증서가 아닌 공 격자의 인증서로 https 연결을 맺게 된다. 하지만 Validate 과정에서 차단되겠죠? (Pseudocode를 다시 보세요)
37
SSL Strip 어, 인증서가 HTTPS에서 Validate가 안되잖아 ->
그냥 클라이언트랑 정보를 주고받을 때 HTTP를 쓰는 걸로 바꿔버리자! 어, 그럼 허점이 생긴 거 아닌가요? HSTS : HTTP Strict Transport Security Response header에 Strict-Transport-Security 정보를 보낸다. 지정된 시간 동안 웹 브라우저는 해당 사이트에 무조건 https로 접속 시도한다. MITM SSL Strip으로 인해 자동으로 http로 접속될 경우 페이지 로드를 중지함
38
OPENSSL SSL and TLS을 open sourc로 구현함
OpenSSL Library: 많은 암호 관련 함수들이 구현되어 있음 )AES, DES, RSA, ECC, Camellia, IDEA, MD5, SHA1, SHA2, DHKES …) 여러 open source 프로그램에서 이 library를 사용함 (apache2 등) OpenSSL Toolkit: 암호화/복호화, 해시 구하기, 인증서 발급/검증 등 여 러 작업을 할 수 있음
39
Heartbleed attack 2014년 IT와 금융 업계 등 사회 각지에 갑작스레 닥친 대재앙급 보안 이슈!
4월 1일에 핀란드의 보안 회사 "코데노미콘"에서 상당수의 웹사이트에서 사용되는 OpenSSL의 보안 결함을 발견하고 이를 발표하면서 세간에 널리 알 려진 사태 이 사태의 원인은 Heartbeat라고 불리는 OpenSSL 통신 신호의 취약점을 이용하는 것이기 때문에 Heartbleed로 명명됐다.
40
Heartbleed attack 사용자측에서 하트비트 패킷을 웹서버에 보낼 때, 이 패킷이 얼마만큼 의 데이터를 보내는 것인지 명시한다. 서버는 패킷을 전송받은 후 정확 히 같은 양의 데이터를 돌려보내면서 연결이 되어있음을 확인하는 방 식이다. 사용자의 컴퓨터가 얼마만큼의 데이터를 보냈는지 거짓으로 명시할 경 우, 예를 들어 1바이트의 정보를 보내면서 서버에는 64킬로바이트를 보 냈다고 한다. 그럼 서버는 같은 양의 64킬로바이트를 다시 보내줘야 하 는데 … 그래서 서버는 메모리에 저장된 다른 정보까지 끌어와 패킷을 채운 후 사용자에게 재전송해준다. 여기엔 웹서버에 특정한 정보를 보여달라는 요청에 대한 쿼리가 포함되며, 유저 아이디나 암호, 심지어는 암호키까 지 온갖 정보가 포함될 수 있다. 이걸 Buffer Overflow가…
41
Heartbleed attack 아직도 문제가 있는 버전의 OpenSSL을 사용하는 휴대폰 제조사가 있 으며 지원 종료로 bugfix되지 않은 기종도 여전히 사용되고 있다! 하트블리드 검출 툴을 이용하여 OpenSSL 버전을 확인해 보세요. 특히 여러분의 핸드폰이 Android Jellybean 이하 버전이라면…
42
SSH, ftps, sftp SSH (Secure SHell): shell을 안전하게 띄울 수 있도록 하는 protocol
여러분들이 bit에 들어갈 때마다 쓰는 것 Port는 기본적으로 22입니다 FTPS(FTP on SSL): SSL연결을 맺고, 그 위에서 FTP 통신을 한다. SFTP(Secure FTP): SSH에서 터미널 접속 뿐만 아니라 파일 관련 작업을 할 수 있도록 만들어 놓 은 일종의 extensio이다. FTP와 protocol 자체 가 다르므로, 명령어 형식도 다름
43
ETC _ Bruteforce (시간을 무시한다면) 이 세상에서 가장 강력한 해킹 방법
거의 모든 것을 다 뚫을 수 있다… 만 시간이 오래 걸릴 수도 있다. 방어법 : 시간이 오래 걸리게 하면 된다. 암호 길이를 길게 한다, 가능한 key space를 늘린다(특수문자 사용 등) 또는 시간 당 대입 횟수를 제한한다 등의 방어법을 주로 사용한다.
44
ETC _ dictionary attack
대부분의 사용자들은 단어, 본인 이름, 생일 등을 조합하여 암호 생성한 다는 점을 이용한다. Ex) mad1234stein, taegyunsugoi 방어법 : 비밀번호 잘 설정하세요
45
ETC _ FAIL2BAN Linux 사용자 로그인에서, 비밀번호를 n번 이상 틀리면 m초 동안 로그 인할 수 없게 만드는 프로그램이다. 설치 및 적용법 : # apt-get install fail2ban # cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # vi /etc/fail2ban/jail.local
46
ETC _ log system 기본적으로 /var/log/ 에 들어있다. (Debian/Ubuntu 기준)
시스템 로그: syslog 보안 로그: auth.log 크론 로그: cron 부팅 로그: boot.log 웹 로그: apache2/
47
ETC _ file permission _ setuid, setgid
Set User / Group ID upon execution setuid가 설정되어 있는 파일은 실행 시 소유자의 권한으로 실행된다. setgid가 설정되어 있는 파일은 실행 시 소유 그룹의 권한으로 실행된다. Ex) /etc/passwd
48
ETC _ file permission _ sticky bit
/tmp, /var/tmp은 기본적으로 permission 777이다. (뭔 의미인지는 지난 세미나들에서 충분히 설명되었으니 다들 잘 알겠죠?) 그래서 다른 사람이 사용중인 파일을 지워버리면 서비스에 장애가 발생할 수 있다. Sticky Bit: 이 bit가 설정된 directory 안에서는 파일의 소유자만이 삭제 가 능 & directory의 소유자만이 삭제 가능
49
ETC _ Firewall (iptables)
방화벽이다. INPUT: 들어오는 패킷 / OUTPUT: 나가는 패킷 / FORWARD: 통과하는 패킷 라는 정해진 3가지 chain이 존재하여 규칙들을 수행한다. 여러 조건들을 사용하여 packet을 filtering할 수 있다. 패킷에 대하여 다양한 동작을 할 수 있다. 네트워크 연결 상태 NEW: 새로운 연결을 요청하는 패킷(ex: http) ESTABLISHED: 기존 연결의 일부인 패킷 RELATED: 기존 연결에 속하지만 새로운 연결을 요청하는 패킷 ex) 접속 포트가 20 인 FTP가 65535를 이용하여 전송하고 싶어한다. INVALID: 나머지
50
ETC _ Firewall (규칙 관련 rule)
-A: 규칙 추가, -D: 규칙 삭제, -L: 규칙 출력, -P: 기본 정책 변경 Ex) 모든 곳에서 eth0으로 들어오는 ssh 연결을 허용한다 iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED –j ACCEPT
51
ETC _ Ufw(Uncompilicated firewall)
설치: # apt-get install ufw 켜고 끄기: # ufw [enable | disable] 상태 보기: # ufw status Rule 추가하기: ufw [allow | deny | reject] <rule syntax> <rule syntax> : <port no>, <port no>/<protocol>, service_name from <from_ip_range> to <to_ip_range> Rule 삭제하기: ufw delete [allow | deny | reject] <rule syntax>
52
ETC _ Dos / ddos attack DoS (Denial of Service)
DDoS (Distributed Denial of Service) 한정된 네트워크 자원을 모두 소모시켜 정상적인 사용자가 서비스에 접근하지 못하도록 하는 공격이다. 대표적인 공격 방법인 SYN Flooding : TCP 연결을 맺을 때, server는 SYN-ACK 패킷을 보내고 client에게 ACK 패킷이 오기를 기다린다. Client가 수많은 SYN 패킷만 보내고 ACK 패킷을 보내지 않으면, 서버는 연결을 계속 기다리게 되고 다른 SYN 패킷을 accept하지 못할 수 있다.
53
ETC _ Web based Attack 웹 페이지의 입력 공간에 공격 문자열을 삽입한다.
GET / POST 등을 사용하여 통신되는 데이터를 변조한다. 주요 사용 툴 : Burpsuite 등 ex) SQL Injection, XSS, CSRF
54
ETC _ Sql injection 서버에서 본인이 원하는 SQL 구문을 실행하는 공격 방법
ex) SELECT id FROM user WHERE id=‘{id}’ AND pw=‘{pw}’ 여기서 pw에 ‘OR 1=1# 이라는 것을 넣어버리면? 방어: 기본적으로 입력을 필터링해야 함 Django의 경우 대부분 raw SQL을 프로그래머가 작성하지 않으므로 안전(제가 Database 설명할 때 간략히 언급했어요) PHP의 경우 각별한 주의가 필요하다. 처리하는 방법은 찾아보면 잘 나온다. 개인적인 의견으로는 PHP 그냥 쓰지 마세요 맘에 안 들어요 Variation으로는 BlindSQLi, Time-based BlindSQLi 등이 있다.
55
ETC _ XSS 사용자가 특정 페이지를 신뢰하여 이에 접속하면 공격자가 원하는 script를 사용자가 실행하도록 하는 공격 방법이다. 1. 공격자는 악의적인 script (ex: 쿠키 훔치기)를 만든다. 2. 공격 대상이 될 웹사이트에 본인이 만든 악의적인 script를 삽입한다. (ex) iframe, object, div, script 태그 등을 게시글로 작성한다) 3. 사용자가 해당 페이지를 열어보면 script가 실행된다 방어법: 특정 문자를 필터링하면 된다. Ex) <는 <, >는 > 로 escape한다. Django를 쓰면 공격을 막을 수 있다. (escape_safe Option을 사용하지 않는다면…)
56
ETC _ CSRF Cross Site Request Forgery를 줄인 것을 의미한다.
해당 웹 사이트가 사용자의 웹 브라우저를 신뢰하여, 사용자가 요청 하 지 않은 명령을 공격자가 보내도록 하는 공격 방법이다. Ex) 방어법: 서버 쪽에서 random한 token이 포함된 페이지를 사용자에게 보내고, 사용자에게서 요청을 받을 때는 token이 올바른지 확인한다. Ex) django에서 views.py를 보다 보면 많이 볼 수 (csrfmiddlewaretoken)
57
REference SPARCS 2015 Wheel Seminar – Security by samjo
GoN 2016 Spring 신입생 교육자료 2 – Modern Cryptography
Similar presentations