본문 바로가기
unmanaged/Information Security

패스워드 크랙의 11가지 방법론 (이론편)

by hyeyoo 2018. 1. 10.
※ 이 블로그의 글은 글쓴이가 공부하면서 정리하여 쓴 글입니다.
※ 최대한 내용을 검토하면서 글을 쓰지만 틀린 내용이 있을 수 있습니다.
※ 만약 틀린 부분이 있다면 댓글로 알려주세요.

이 글은 패스워드 크랙을 하는 방법에 관한 이론을 다룬 글입니다.

이 글의 작성자는 이 글의 내용을 악용하는 것에 대해 책임을 지지 않으며, 이에 대한 책임은 모두 독자 본인에게 있습니다.



// 이 글은 아직 작성 중입니다. 못 쓴 부분은 시간 날 때 다시 채워 넣을게요!



패스워드 크랙이란?

패스워드를 모르는 사람은 없겠지만 크랙이란 말은 모를 수 있는데, 여기서 말하는 크랙은 어떤 프로그램을 돈을 내지 않고 사용할 수 있게 하는 그런 크랙이 아닌, 암호화된 패스워드가 원래 무엇이었는지 찾아재는 것을 말한다.


한 번 예를 들어보자. 누군가가 구글에 회원가입을 할 때 아이디/비밀번호를 password/cracking으로 정했다고 하면 구글 서버에는


아이디 : password

비밀번호 : 31fd3a1a741970c81e373cad371b2e3a57c0c5d0ea0d147aef7863d1574b9a89


이렇게 저장이 되는데, 아이디는 사용자가 입력한 그대로 (이를 평문이라고 한다.) 저장되지만

패스워드는 어떤 알고리즘에 의해 안전하게 보호된다. (여기서는 'cracking'을 sha256 알고리즘으로 암호화하였다.'


패스워드 크래킹은 이 예제에서  31fd3a1a741970c81e373cad371b2e3a57c0c5d0ea0d147aef7863d1574b9a89

라는 문자열로부터 cracking이라는 원래의 비밀번호를 알아내는 것을 의미한다.


참고로 패스워드 크랙을 하려면 어떤 암호화 알고리즘이 사용되었는지 알아낸 후

여러가지 문자열을 암호화 해서 암호화된 비밀번호와 비교를 해야 한다.

위의 예시에서 이를 설명하자면, 암호화 알고리즘이 sha256 이라는 것을 알아낸 후


sha256("hacking")==31fd3a1a741970c81e373cad371b2e3a57c0c5d0ea0d147aef7863d1574b9a89


sha256("game")==31fd3a1a741970c81e373cad371b2e3a57c0c5d0ea0d147aef7863d1574b9a89


이런 식으로 여러 문자열을 암호화 해보고, 암호화 된 문자열과 비교를 하여 일치하는 것을 찾으면 된다.




패스워드 크래킹에는 다음과 같은 11가지 방법이 있다.[각주:1]


* 여기서는 크래킹 방법의 이름을 괜히 한글로 바꿔서 어색하게 하는 것 보다는

영어 그대로 사용을 하겠다.


1. Brute-Force attack

2. Dictionary attack

3. Combinator attack

4. Fingerprint attack

5. Hybrid attack

6. Mask attack

7. Permutation attack

8. PRINCE attack

9. Rule-based attack

10. Table-Lookup attack

11. Toggle-Case attack


1. Brute-Force attack :

Brute Force attack은 쉽게 말하면 가능한 모든 경우의 수를 대입하는 것을 말한다. 예를 들자면

"모든 알파벳 소문자, 숫자로 가능한 10자리 이내의 패스워드를 모두 대입해보자!" 라고 한다면

a부터 z까지가 24자이고, 0부터 9까지가 10자이므로


첫 번째 글자의 경우의 수 : 34

두 번째 글자의 경우의 수 : 34


...


열 번째 글자의 경우의 수 : 34


이렇게 해서 34^10 이라는 모든 경우의 수를 대입해보는 것이 바로 Brute Force attack이다.


장점과 단점 : 이론적으로는 모든 패스워드를 크랙할 수 있지만 글자 수가 늘어날 수록 또는 한 글자에

특수문자, 대문자 등 여러 가지 글자를 사용할 수록 시간이 미친듯이 늘어난다.


위의 예제에서 단순하게 생각해보아도 한 글자가 늘어날 때 마다 경우의 수가 34배 늘어나는 만큼

시간도 34배 늘어난다. 알파벳 소문자, 숫자 패스워드를 Brute Force attack으로 크랙하면

7자 까지는 어찌저찌 해볼만 한데 8자 부터는 정말로 힘들다.


2. Dictionary attack :

Dictionary attack은 말 그대로 사전에 있는 단어를 모두 대입해보는 것을 말하는데, 여기서 말하는 사전은 우리가 평소에 보는 "한국어 사전" 같은게 아니라, 패스워드로 사용할만한 문자열을 모두 저장해놓은 것을 말한다. 


예를 들어보면


password.txt 라는 파일 안에


admin

my_password

123456

1234678

ilovechicken


이런 식으로 패스워드 리스트를 만들고 하나씩 대입해 보는 것이다.


장점과 단점 : Brute Force Attack 보다는 속도 면에서는 훨씬 빠르지만, 패스워드 사전에 없는 것은 크랙할 수 없다. 사전이 클 수록 더 많은 패스워드를 크랙할 수 있다. 그리고 당연한 얘기지만 아무 의미가 없는 패스워드 (e.g. #$#jfjewo%#) 는 크랙할 가능성이 희박하다.


(의미 없는 패스워드를  computer generated, 의미가 있는 패스워드를 human generated라고 표현하기도 한다.)




3. Combinator attack :

Combinator attack은 사전 파일을 두 개 정해놓고 사전의 단어를 서로 조합하여 패스워드 크랙을 하는 것이다.


a.txt :


123

master


b.txt :

love

you


이렇게 사전이 두 개 있다고 하면


123love

masterlove

123you 이런 식으로 사전의 단어를 조합하는 것을 의미한다.


장점과 단점 : Combinator attack은 Dictionary attack에서 좀 더 발전된 형태로, 단어를 서로 조합하기 때문에 더 다양한 시도를 할 수 있는 장점이 있지만, 그만큼 Dictionary attack보다 시간이 많이 걸리고 Dictionary Attack과 마찬가지로 의미가 없는 패스워드는 크랙하기 어렵다.


4. Fingerprint attack :

//보류, 아직 이해 제대로 못함.


5. Hybrid attack :

Hybrid는 두개의 심장이라는 의미로 Brute-Force attack과 Dictionary attack을 함께 사용한 것을 말하는데,  pw1, pw2, pw3, ... 또는 1pw, 2pw, 3pw, .... 이런 식으로 패스워드 사전 앞뒤에 무작위 문자열을 붙이는 방법이다.


장점과 단점 : 특정 단어가 포함된 패스워드를 더 빠르게 찾을 수 있지만 이와 동시에 해당 단어가 포함되지 않은 패스워드는 크랙할 수 없다. 패스워드의 일부분을 알고 있을 때 사용하면 매우 효과적이다.

(Brute-Force에서 글자 수가 늘어날 수록 경우의 수가 미친듯이 불어나는 것을 보완한 방법이다.)


6. Mask attack

패스워드의 일부분을 알거나, 패스워드 일부분이 어떤 형태의(숫자, 특수문자, 알파벳 대/소문자 등)

글자인지 알 때 사용할 수 있는 방법이다.

패스우드 첫 글자가 대문자인 것을 알 때, 뒤 네 글자가 생일, 폰 번호 뒷자리 같은 4자리 숫자로 끝나는 것을 알 때와 같은 상황에 사용할 수 있다.


7. Permutation attack

//보류, 아직 제대로 이해 못함



8. PRINICE attack

PRINCE는 PRobability INfinite Chained Elements 의 약자인데, 사실 무슨 뜻인지는 필자도 잘 모르겠지만 PRINCE attack은 사용자가 비밀번호에 사용할 것 같은 단어를 한 사전에 모두 저장해 놓은 후, 단어와 단어 사이에서 가능한 모든 조합을 시도해보는 것을 말한다.


1월 1일에 태어났고, 이름이 '김철수'이며 휴대폰 뒷 네 자리가 1234이라고 하면


0101

cjftn (= 철수)

rlacjftn(=김철수)

1234


라는 패스워드 사전을 만들고

cjftn0101, rlacjftn0101, cjftn1234, 01011234 등 가능한 조합을 모두 찾아보는 것이다.

PRINCE attack은 combinator attack의 좀 더 고급(?) 버전이라고 할 수 있다.


9. Rule-based attack :

//보류, 아직 제대로 이해하지 못함.


10. Table-Lookup attack :

LEET라는 것을 알면 이 것을 좀 더 쉽게 이해할 수 있는데, LEET이란 알파벳을 비슷하게 생긴 다른 문자로 쓰는 것인데 자세한 것은 리트(인터넷) 이 링크를 참고하자.


Table-Lookup attack은 LEET가 사용된 패스워드를 크랙하기에 좋다.


LEET에서 a는 4, e는 3으로 바꿔 쓰는데 


passage는 p4ss4g3, passag3 등으로 바꿔 쓸 수 있

// 이 부분은 이해는 가는데



11. Toggle-Case attack :

Toggle-Case attack은 사전 안에 있는 단어에서 가능한 대소문자 조합을 모두 시도해 보는 것이다.

그런데 이 Toggle-Case attack은 단어가 많은 사전에 쓰는 것은 별로 좋지 못한 것 같다.


password 라는 한 단어에서도 2^8 = 256 가지의 경우의 수가 생기는데, 이를 모든 단어에 적용해 본다고 생각하면.. 어마무시하게 경우의 수가 많아진다.
















  1. https://datarecovery.com/rd/cracking-passwords-11-password-attack-methods-work/ [본문으로]

댓글