Bash 스크립트로 크랙 자동화하기

Kali LinuxBeginner
지금 연습하기

소개

침투 테스트 및 보안 감사에서는 해시 세트에 대해 여러 비밀번호 크래킹 기법을 시도하는 것이 일반적입니다. 각 명령을 수동으로 실행하는 것은 시간이 많이 걸리고 비효율적일 수 있습니다. Bash 스크립팅은 이 프로세스를 자동화하는 강력한 방법을 제공하여 비밀번호를 찾을 때까지 순차적으로 실행되는 공격 체인을 생성합니다.

이 실습에서는 인기 있고 강력한 비밀번호 복구 도구인 hashcat을 사용하여 일련의 공격을 자동화하는 Bash 스크립트를 작성합니다. 사전 공격을 먼저 시도하고, 규칙 기반 공격을 시도한 다음, 마스크 공격을 시도하도록 스크립트를 구성하는 방법을 배우게 됩니다. 이 실습 경험을 통해 사이버 보안 맥락에서 자동화의 기본 사항을 익힐 수 있습니다.

이 실습을 완료하면 다음을 수행할 수 있습니다.

  • Bash 스크립트를 생성하고 실행 가능하게 만들기
  • hashcat 명령 시퀀스를 스크립트에 추가하기
  • 다양한 hashcat 공격 모드를 이해하고 구현하기
  • 워크플로우를 자동화하는 스크립트 실행하기

새 Bash 스크립트 파일 생성

이 단계에서는 빈 Bash 스크립트 파일을 생성하고 필요한 shebang 줄을 추가한 다음 실행 가능하게 만들 것입니다. Bash 스크립트는 일련의 명령을 포함하는 일반 텍스트 파일입니다. 스크립트 시작 부분의 shebang (#!/bin/bash) 은 시스템에 파일 내의 명령을 실행하는 데 사용할 인터프리터를 알려줍니다.

먼저 touch 명령을 사용하여 ~/project 디렉터리에 attack.sh라는 새 파일을 생성합니다.

touch attack.sh

다음으로 nano 텍스트 편집기로 파일을 열어 shebang 줄을 추가합니다.

nano attack.sh

nano 편집기 내에서 파일 상단에 다음 줄을 추가합니다. 이것은 파일을 Bash 스크립트로 선언합니다.

#!/bin/bash

Ctrl+X, Y, Enter를 눌러 파일을 저장하고 nano를 종료합니다.

마지막으로 스크립트를 프로그램으로 실행할 수 있도록 실행 권한을 부여해야 합니다. 이를 위해 +x 플래그와 함께 chmod 명령을 사용합니다.

chmod +x attack.sh

ls -l을 사용하여 권한을 확인할 수 있습니다. attack.sh에 대한 권한 블록에 'x'가 표시되어야 합니다.

ls -l attack.sh

예상 출력:

-rwxr-xr-x 1 labex labex 12 May 20 10:00 attack.sh

사전 공격을 위한 Hashcat 명령 추가

이 단계에서는 스크립트에 첫 번째 명령인 사전 공격을 추가합니다. 이것은 가장 일반적이고 효과적인 비밀번호 크래킹 방법 중 하나입니다. 주어진 목록 (사전) 의 모든 단어를 잠재적인 비밀번호로 시도하여 작동합니다.

이 공격을 수행하기 위해 hashcat을 사용할 것입니다. 실습 환경에는 해시 파일 hashes.txt와 단어 목록 wordlist.txt가 미리 구성되어 있습니다.

nano를 사용하여 attack.sh 스크립트를 다시 엽니다.

nano attack.sh

#!/bin/bash 줄 아래에 다음 hashcat 명령을 추가합니다.

hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist.txt

이 명령을 분석해 보겠습니다.

  • hashcat: 실행하는 프로그램입니다.
  • -m 0: 해시 유형을 지정합니다. 0은 MD5 에 해당합니다.
  • -a 0: 공격 모드를 지정합니다. 0은 직접 사전 공격에 해당합니다.
  • /home/labex/project/hashes.txt: 크랙할 해시가 포함된 파일입니다.
  • /home/labex/project/wordlist.txt: 공격에 사용할 사전 파일입니다.

이제 attack.sh 파일은 다음과 같이 보여야 합니다.

#!/bin/bash
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist.txt

Ctrl+X, Y, Enter를 눌러 저장하고 종료합니다. 지금은 스크립트를 구축하는 중이며 마지막 단계까지 실행하지 않을 것입니다.

규칙 기반 공격을 위한 두 번째 명령 추가

이 단계에서는 스크립트에 두 번째 공격을 추가합니다. 사전 공격이 실패하면 규칙 기반 공격이 다음 논리적인 단계가 되는 경우가 많습니다. 이 공격은 단어 목록을 가져와 각 단어에 규칙 집합을 적용하여 새로운 비밀번호 후보를 생성합니다. 예를 들어, 규칙은 모든 단어에 "123"을 추가하거나 첫 글자를 대문자로 만들 수 있습니다.

이 시연을 위해 별도의 단어 목록 wordlist_for_rule.txt와 간단한 규칙 파일 rules.txt를 준비했습니다.

nano를 사용하여 attack.sh를 다시 엽니다.

nano attack.sh

사전 공격 명령 뒤에 새 줄에 다음 명령을 추가합니다.

hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist_for_rule.txt -r /home/labex/project/rules.txt

이 명령의 새로운 부분은 다음과 같습니다.

  • -r /home/labex/project/rules.txt: 이 플래그는 지정된 파일에 정의된 규칙을 적용하도록 hashcat에 지시합니다.

이제 attack.sh 스크립트에는 두 개의 hashcat 명령이 포함됩니다.

#!/bin/bash
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist.txt
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist_for_rule.txt -r /home/labex/project/rules.txt

Ctrl+X, Y, Enter를 눌러 변경 사항을 저장합니다. 이제 스크립트를 실행하면 이러한 명령이 순차적으로 실행됩니다.

마스크 공격을 위한 세 번째 명령 추가

이 단계에서는 스크립트에 마지막 공격 방법인 마스크 공격을 추가합니다. 이 방법은 무차별 대입 공격 (brute-force attack) 으로도 알려져 있으며, 비밀번호의 길이 또는 포함된 문자 유형과 같이 비밀번호 구조에 대해 알고 있는 경우 유용합니다.

마스크는 구조를 정의합니다. 예를 들어, ?l은 소문자, ?u는 대문자, ?d는 숫자, ?s는 특수 문자를 나타냅니다.

nano를 사용하여 attack.sh를 마지막으로 엽니다.

nano attack.sh

스크립트 끝의 새 줄에 다음 마스크 공격 명령을 추가합니다. 이 마스크 ?l?l?l?l?l?l?l?l은 8 자리 소문자 비밀번호의 모든 조합을 시도합니다.

hashcat -m 0 -a 3 /home/labex/project/hashes.txt ?l?l?l?l?l?l?l?l

이 명령의 주요 부분은 다음과 같습니다.

  • -a 3: 공격 모드를 3(마스크 공격) 으로 설정합니다.
  • ?l?l?l?l?l?l?l?l: 테스트할 비밀번호 구조를 정의하는 마스크 자체입니다.

이제 완성된 attack.sh 스크립트는 다음과 같이 보여야 합니다.

#!/bin/bash
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist.txt
hashcat -m 0 -a 0 /home/labex/project/hashes.txt /home/labex/project/wordlist_for_rule.txt -r /home/labex/project/rules.txt
hashcat -m 0 -a 3 /home/labex/project/hashes.txt ?l?l?l?l?l?l?l?l

Ctrl+X, Y, Enter를 눌러 파일을 저장하고 nano를 종료합니다. 이제 자동화된 공격 스크립트가 완성되었습니다.

스크립트 실행하여 공격 체인 자동화하기

마지막 단계에서는 구축한 스크립트를 실행합니다. ./attack.sh를 실행하면 쉘은 내부의 명령들을 하나씩 실행합니다. hashcat은 똑똑해서, 해시를 크랙하면 결과를 "potfile" (~/.local/share/hashcat/hashcat.potfile) 에 저장하고 다시 크랙하려고 시도하지 않습니다.

이제 터미널에서 스크립트를 실행합니다.

./attack.sh

스크립트는 첫 번째 hashcat 명령을 시작합니다. wordlist.txt에 올바른 비밀번호 ("password") 가 포함되어 있으므로 첫 번째 공격이 성공할 것입니다. hashcat이 초기화되고 실행될 때의 출력을 볼 수 있습니다.

성공적인 실행은 Cracked 상태를 보여줍니다. 비밀번호가 첫 번째 단계에서 발견되었기 때문에 hashcat은 이를 potfile 에 추가합니다. 스크립트의 후속 명령들이 실행되겠지만, hashcat은 해당 해시가 이미 크랙되었음을 확인하고 건너뛸 것입니다.

크랙된 비밀번호를 보려면 hashcat--show 옵션을 사용할 수 있습니다.

hashcat -m 0 --show /home/labex/project/hashes.txt

이 명령은 입력 파일에 해당하는 크랙된 해시가 있는지 potfile 을 확인하고 표시합니다.

예상 출력:

5f4dcc3b5aa765d61d8327deb882cf99:password

축하합니다! 비밀번호 크랙 공격 체인을 자동화하는 Bash 스크립트를 성공적으로 생성하고 실행했습니다.

요약

이 실습에서는 Bash 스크립팅을 사용하여 보안 작업을 자동화하는 기본 사항을 배웠습니다. 여러 hashcat 비밀번호 크랙 기법을 연결하는 스크립트를 성공적으로 만들었습니다.

새로운 Bash 스크립트 파일을 생성하고 실행 가능하게 만드는 것부터 시작했습니다. 그런 다음 사전 공격, 규칙 기반 공격 및 마스크 공격을 위한 명령을 점진적으로 추가했습니다. 마지막으로 스크립트를 실행하여 작동 방식을 확인하고, hashcat이 첫 번째 단계에서 효율적으로 비밀번호를 찾고 결과를 기록하는 것을 관찰했습니다.

연습한 주요 기술은 다음과 같습니다.

  • 기본 Bash 스크립트 생성 (touch, chmod, shebang).
  • 다양한 공격 모드 (-a 0, -a 3) 에 hashcat 사용.
  • 사전 공격, 규칙 기반 공격 및 마스크 공격 구현.
  • 효율적인 워크플로우를 만들기 위한 명령 시퀀스 자동화.

스크립팅 및 자동화 접근 방식은 사이버 보안, 시스템 관리 및 기타 여러 IT 분야의 핵심 기술로, 복잡하고 반복적인 작업을 단일 명령으로 수행할 수 있게 해줍니다.