보안 비밀번호 무차별 대입 공격(Brute Force / Dictionary Attack)의 실습 메커니즘과, 질문하신 두 가지 공…
페이지 정보

본문
비밀번호 무차별 대입 공격(Brute Force / Dictionary Attack)의 실습 메커니즘과, 질문하신 두 가지 공격(인증 우회, 무차별 대입)을 역으로 방어하는 핵심 보안 대책을 나누어 설명해 드립니다.
1. 무차별 대입(사전) 공격 실습 메커니즘 (Hydra 활용)
사전 공격은 무작위 대입 대신 사용자들이 자주 쓰는 비밀번호 목록(Wordlist)을 파일로 만들어 하나씩 초고속으로 대입하는 방식입니다. 칼리 리눅스의 대표적인 도구인 Hydra(히드라)를 사용합니다.
실습 시나리오 (가상 타겟: SSH 서비스)
타겟 서버(192.168.56.101)의 SSH(22번 포트) 관리자 계정(root) 비밀번호를 알아내는 상황입니다.
- 준비물:칼리 리눅스에 내장된 기본 비밀번호 사전 파일 (/usr/share/wordlists/rockyou.txt)
- 터미널 명령어:
bash
hydra -l root -P /usr/share/wordlists/rockyou.txt 192.168.56.101 ssh -vV
코드를 사용할 때는 주의가 필요합니다.
- -l root: 공격할 사용자 아이디 지정 (root)
- -P [경로]: 대입할 비밀번호 리스트 파일 지정
- ssh: 공격 대상 프로토콜(서비스) 지정
- -vV: 대입 과정을 화면에 상세히 출력 (Verbose)
- 결과:일치하는 암호를 찾으면 터미널에 [22][ssh] host: 192.168.56.101 login: root password: [찾은암호] 형태로 초록색 메시지가 출력됩니다.
2. 개발자 관점에서의 역방어 대책 (Secure Coding)
공격의 원리를 알면 방어는 명확해집니다. 시스템과 코드를 어떻게 수정해야 하는지 알려드립니다.
방어 1: SQL 인젝션(무조건 True 인증 우회) 방어법
공격자가 ' OR '1'='1을 입력했을 때 이게 데이터베이스 명령어로 해석되기 때문에 문제가 발생합니다. 이를 명령어가 아닌 단순 글자(Literal String)로 처리해야 합니다.
- 해결책: 준비된 선언문(Parameterized Query /
Precompiled Statement) 사용
- SQL 쿼리 틀을 미리 만들어 두고, 사용자 입력값은 나중에 따로 끼워 넣는 방식입니다.
- 안전한 코드 예시 (Java/MyBatis 기준):
xml
<!-- 안전함: #{}을 사용하면 입력값이 자동으로 따옴표 처리되어 안전한 문자로 바뀜 -->
SELECT * FROM users WHERE username = #{username} AND password = #{password}
코드를 사용할 때는 주의가 필요합니다.
- 위험한 코드 예시:
xml
<!-- 위험함: ${}은 입력값을 그대로 문자열로 이어 붙여 공격 코드가 실행됨 -->
SELECT * FROM users WHERE username = '${username}' AND password = '${password}'
코드를 사용할 때는 주의가 필요합니다.
방어 2: 무차별 대입(Brute Force) 공격 방어법
시스템이 제한 없이 수만 번의 로그인을 허용하기 때문에 뚫리는 것입니다. 이를 차단하는 메커니즘을 적용해야 합니다.
- 계정
잠금 정책 (Account Lockout)
- 연속으로 5회 이상 로그인 실패 시, 해당 계정을 30분간 잠금 처리합니다.
- 레이트
리미팅 (Rate Limiting) 및 Fail2ban 설정
- 서버 측에서 동일한 IP가 짧은 시간(예: 1초) 동안 수십 번의 요청을 보내면 IP 자체를 일정 시간 차단합니다.
- 리눅스 서버의 경우 Fail2ban 도구를 설치하면 SSH 공격 감지 시 자동으로 방화벽(iptables)에서 공격자 IP를 막아줍니다.
- 캡차(CAPTCHA) 도입 및 2차 인증(MFA)
- 로그인 시 '로봇이 아닙니다' 이미지 인증을 넣으면 Hydra 같은 자동화 툴이 패킷을 보낼 수 없게 됩니다.
- 비밀번호가 뚫리더라도 스마트폰 OTP 인증을 거치게 만들면 공격을 완벽히 무력화할 수 있습니다.
만약 실제 개발 중이신 환경(예: Node.js, Spring, Python 등)이 있다면, . 필요하신 언어나 프레임워크 해당 언어에 맞는 구체적인 SQL 인젝션 방어 코드 샘플을 구상한다.
- 이전글앞서 소개한 대표적인 공격 유형들(네트워크 스캔, 패킷 감청)에 대한 방어법과, 이를 모니터링하고 방어할 때 사용하는 실무 핵심 보안 툴 및 사용법을 정리해 드립니다. 26.07.31
- 다음글안전한 모의해킹 실습을 위해 가상 환경을 구축하는 방법과 Nmap/Burp Suite를 활용한 실제 테스트 시나리오를 안내해 드립니다. 26.07.31
댓글목록
등록된 댓글이 없습니다.
