Hashcat
Hashcat은 실무에서 가장 많이 사용되는 해쉬 크랙 도구로 단순하게 워드리스트 기반의 크래킹부터
룰, 패턴, 모든 조합 등을 사용하는 빠른 속도의 도구입니다.
-a
공격 모드
-m
해쉬 타입
-o
결과를 저장할 파일
-1
사용자 정의 문자 집합
-2
사용자 정의 문자 집합
-3
사용자 정의 문자 집합
-4
사용자 정의 문자 집합
--increment-min
최소 시도 길이
--increment-max
최대 시도 길이
--session
세션 지정
-i
증가 모드
Attack Mode
0
워드리스트 기반 공격
1
두개의 워드리스트를 결합
3
마스크 기반 브루트포스
6
워드리스트 뒤에 마스크 조합
7
마스크 앞에 워드리스트 조합
HTB 등의 모의침투 환경이나 CTF 등에서는 워드리스트 기반의 해쉬 크래킹이 많기 때문에
위에 나온 것과 같은 옵션들을 자주 사용하는 일은 없지만, 실무일 수록 워드리스트 기반보다는
패스워드 정책, 노출된 예전 패스워드 규칙 등을 토대로 마스크 공격을 하는 경우가 많습니다.
예를 들어 도메인 내 사용자들의 패스워드가 특수문자 1개, 대문자 1개, 최소 길이 9자라는 정책을 따를 때
단순하게 8자 이상의 모든 조합을 시도한다면 000000000부터 &&&&&&&&& 등에 이르러 모든 경우의 수를
시도하기 때문에 62^9(13,537,086,546,263,552) 가지 조합이 필요하고, 이는 불필요합니다.
한국인 뿐 아니라 해외에서도 패스워드는 첫 글자는 대문자, 중간은 소문자 그리고 마지막은 특수문자를
사용하는 것이 보편적인 규칙이기 때문에, 특정 패턴을 정해두고 공격한다면 효율적으로 공격이 가능합니다.
Hash Type
해쉬캣에 사용할 파일의 해쉬 타입을 알아낸 후 -m
플래그에 대한 인자로 사용해야 크랙이 가능합니다.
해쉬 타입의 경우 hashid
명령어의 -m
플래그를 사용하면 해당 해쉬가 어떤 알고리즘을 사용했는지
패턴을 통해 유추하고, 유추한 알고리즘에 대한 hashcat
의 모드 번호를 알려줍니다.
Custom Charset
Custom Charset 플래그는 Hashcat에서 마스크 모드 사용 시 필수적으로 필요한 옵션입니다.
예를 들어 사용자의 패스워드에 대한 패턴이 [대문자] [소문자*5] [특수문자] 규칙을 갖는다고 하면
Attack!, Passwd@ 등의 패턴만 시도하면 크랙이 될 수 있습니다.
이때 -1, -2, -3, -4
플래그를 활용하여 특정 패턴을 만들어둔 후에 전체 규칙을 작성하면 됩니다.
?l
abcdefghijklmnopqrstuvwxyz
소문자 (lowercase)
?u
ABCDEFGHIJKLMNOPQRSTUVWXYZ
대문자 (uppercase)
?d
0123456789
숫자 (digits)
?s
!@#$%^&*()_+-=[]{};':",.<>/?|~
(플랫폼에 따라 다름)
특수문자 (special)
?a
?l?u?d?s
전체 포함
모든 인쇄 가능한 ASCII
?b
0x00
~0xff
모든 바이트 (바이너리 포함)
위 표를 참고하여 언급한 규칙 패턴을 만든다고 하면 아래와 같이 지정합니다.
Increment mode
단순하게 위와 같이 규칙을 가지고 해쉬 크랙을 시도한다면, 1글자부터 모든 글자를 조합하기 때문에
일반적으로 잘 사용되지 않는 짧은 길이까지 시도하게 됩니다.
도메인 내에 존재하는 패스워드 정책보다 빨리 설정된 패스워드(기본 도메인 패스워드 등)의 경우
정책을 준수하지 않더라도 문제가 발생하지 않지만, 확률상 정책을 준수한다는 가정 하에 패스워드 정책에서
언급하는 최소 길이부터 해쉬 크랙을 시도하는 것이 시간을 줄이는 방법이기도 합니다.
--increment-min
과 --increment-max
옵션은 시도할 최소/최대 길이를 설정할 수 있고
해당 플래그를 사용할 때는 반드시 앞에 -i
를 명시해줘야 합니다.
Practice
SHA-256 Generator을 통해서 간단하고 짧은 실습용 해쉬를 생성합니다.
이후 Kali에 내장된 hashid 도구를 사용하여 해쉬 알고리즘과 알고리즘에 대한 해쉬캣 타입을 식별합니다.
실무라면 더 짧은 길이부터 다양한 규칙을 시도하겠지만, 실습을 위해 패턴과 길이를 모두 맞춘 상태로
Hashcat을 사용하여 크랙이 가능한지 테스트합니다.
크랙이 된 이후 --show 옵션을 통해 확인하면 해쉬가 크랙되어 평문 패스워드가 나온 것이 확인됩니다.
Last updated
Was this helpful?