
/etc/shadow 파일이나 윈도우의 SAM 파일에는 패스워드가 암호화(해시)되어 저장됩니다.
하지만 해커들은 이 암호화된 문자열을 원래의 비밀번호로 되돌리기 위해 다양한 공격 기법을 사용합니다.
오늘은 해커가 어떻게 패스워드를 알아내는지, 그리고 우리는 어떻게 더 안전하게 패스워드를 저장해야 하는지 알아보겠습니다.$6$xyz...)을 보고 원래의 비밀번호(p@ssword)를 찾아내는 과정입니다.
대표적인 4가지 공격 기법이 있습니다.love, 123456, admin 같은 단순한 패스워드는 순식간에 뚫립니다.a, b, ... z, aa, ab ... 순서로 끝까지 대입합니다. 시간은 오래 걸리지만 이론적으로 100% 성공합니다.password + 123 -> password123)1234라는 비밀번호를 쓴다고 가정해 봅시다.User A (PW: 1234) -> SHA256 -> 03ac674216f3e15c...
User B (PW: 1234) -> SHA256 -> 03ac674216f3e15c...03ac674216f3e15c...가 1234라는 것을 알아내면, A와 B의 계정이 동시에 털리게 됩니다.// [취약] 단순 해시
hash("1234") -> "03ac..."
// [안전] 솔팅 적용
// 사용자마다 고유한 Salt 생성 (랜덤 값)
String salt_A = "R@nd0m_A";
String salt_B = "R@nd0m_B";
// 원본 패스워드는 같아도 결과는 다름
hash("1234" + salt_A) -> "e1f2..."
hash("1234" + salt_B) -> "a9b8..."String digest = "password";
// 해시 함수를 10,000번 반복 실행
for (int i = 0; i < 10000; i++) {
digest = hash(digest + salt);
}/etc/shadow 파일과 /etc/passwd 파일을 결합(unshadow)하여 크래킹을 시도합니다. # john-the-ripper 설치 (Ubuntu 기준)
sudo snap install john-the-ripper
# unshadow 명령으로 패스워드 파일 생성
sudo unshadow /etc/passwd /etc/shadow > passwords.txt
# 크래킹 시작 (확장 버전 사용 및 포맷 지정)
john-the-ripper --format=sha512crypt passwords.txt
# 크래킹 결과 확인
john-the-ripper --show passwords.txt
1.10 [실기] 리눅스 로그 분석 (wtmp, syslog)편에서 시스템에 누가 언제 접속했는지, 공격 흔적은 어디에 남는지 상세히 파헤쳐 보겠습니다.