bruteforce 란 무엇일까
브루트포스(bruteforce)는 파일을 보호하고 기밀성을 유지하기 위해 암호를 통해 제 3자로 부터 보호를 한다
이 암호를 뚫는 방법은 어떤 암호방식인지, 어떤식으로 파일을 주고받는지 등 많은 상황들을 고려하면서 많은 방법들이 있을 것이다.
그중 가장 간단하고 무식한 방법중인 하나가 브루트포스 기법이다.
일일히 하나씩하나씩 다 대입해보는 것이다.
학창시절 친구들 사물함에 자물쇠 비밀번호를 알아내보겠다고 000부터 일일히 대입해서 비밀번호를 알아낸 경험이 있다
세자리수 자물쇠는 쉬는 시간내에 집중만 하면 알아낼수 있지만 네자리 이상부터는 점심시간이나 수업시간까지
시간을 할애를 해야 알아낼수 있다.
해킹에서도 똑같다.
사람이 직접 대입을 해보면서 하는 비밀번호를 알아내는 방법도 충분히 있지만
그러기에는 시간이 많이 걸리기 때문에 파이썬을 통해 자동화를 시켜서 해보도록 하자
python으로 프로그래밍을 하기 위해 필자는 vscode 에디터를 이용을 했다.
브루트포스 자동화 프밍(프로그래밍)을 하기 위해
먼저 itertools라는 라이브러리를 추가 하였다
import itertools
https://docs.python.org/ko/3/library/itertools.html
itertools — Functions creating iterators for efficient looping
This module implements a number of iterator building blocks inspired by constructs from APL, Haskell, and SML. Each has been recast in a form suitable for Python. The module standardizes a core set...
docs.python.org
itertools는 효율적으로 반복문을 쓰기 위한 라이브러리라고 생각하면 될것이다.
그리고 문자열을 추가할것인데 해당 문자열에는 패스워드에 사용될 문자들을 넣어주면 된다.
첫시간이니깐 단순하게 2자리숫자 비밀번호들의 경우의 수를 뽑아보자
단순하게 이중 for문을 이용해서 나타내보자면
import itertools
문자열='0123456789'
for i in 문자열:
for j in 문자열:
print(i,j)
하지만 itertools 라이브러리를 이용한 만큼 이중 for문이 아닌
import itertools
문자열='0123456789'
for 비밀번호길이 in range (1,3):
for 비밀번호 in itertools.product(문자열,repeat=비밀번호길이):
print(비밀번호)
itertools.product를 이용을 하면 쉽게 나타낼수 있다.
해당 기능은 두개이상의 리스트 끼리의 데카르트 곱을 계산하여 iterator로 반환을 해주는 역할이다.
이중 for문과 달리
이런식으로 결과가 나오는데 듀플 값이기 떄문에 join을 이용하면 숫자로 결과를 나타낼수 있다.
print(''.join(비밀번호))
join을 이용한 print를 하면
이런식으로 나타낼수 있다.
이래서 비밀번호자릿수가 중요한 이유이다. 비밀번호 자릿수가 늘어나고 다양한 문자열을 이용할수록
경우의 수가 늘어나기때문에 해킹에 오래 걸리는 것이다.
참고 교육 내용 출처:
[무료] 무차별 대입 공격(bruteforce attack) with Python - 인프런 | 강의
해킹 공격이 어떻게 진행되는지 궁금하세요? 방어는 어떻게 하는지 궁금하신가요? 간단한 python 코드를 사용해 무차별 대입 공격을 진행해봅니다. 이를 통해 공격과 방어가 어떻게 이뤄지는지
www.inflearn.com
'보안 > 기초' 카테고리의 다른 글
Bind shell 과 Reverse shell (0) | 2023.10.24 |
---|---|
3 way handshake 와 nmap으로 실습! (1) | 2023.10.11 |
TTPs (0) | 2023.03.04 |
The Pyramid of Pain (0) | 2023.03.04 |
암호학 기초 통신 암호 (0) | 2022.01.12 |