패스워드 크래킹
패스워드 관리는 보안 관리자의 첫 번째 방어책이다.
좋은 패스워드 : 기억하기 쉽고 크래킹 하기 어려운 패스워드
해쉬 (Hash)
해쉬 (Hash) : 임의의 데이터로부터 일종의 짧은 전자지문을 만들어 내는 방법
암호화 (Encryption) : 특별한 알고리즘을 이용해 데이터를 전달하는 것
해쉬와 암호화는 모두 패스워드를 효과적으로 숨기는 기술이나, 해시 알고리즘은 결과물의 복호화가 불가능하다.
이렇게 역해쉬가 불가능하다면 해시를 사용하는 이유는 무엇일까? -> 다른 문장으로 같은 전자지문 (해쉬 값)을 만들 수 없으므로 진위 여부 확인이 가능하다.
해쉬 알고리즘
기본적인 해쉬 알고리즘
1. 123456789 와 123486789 가 있을 때, 두 수를 가운데를 기준으로 둘로 나누고 큰 수를 작은 수로 나눈다.
2. 앞 6자리 숫자를 버리고 나머지 값이 해시의 결과 값이라면 123456789 -> 2677861, 123486789 -> 4569155
3. 로직을 알더라도 버려진 1.81838과 1.81882를 알 수 없으므로 두 해쉬 값만으로 해쉬 전의 원래 수를 알아내는 것(역 해쉬)은 불가능하다.
값이 아주 조금만 다르더라도 해쉬 결과 값은 매우 다르게 생성된다.
Salt
해시나 암호화로 패스워드를 저장을 하면 같은 패스워드는 항상 같은 해쉬 값, 같은 암호문으로 저장된다.
즉 나의 비밀번호 해쉬 값과 상대방의 해쉬 값이 같다면 나는 상대방의 비밀번호가 나와 같다는 것을 알 수 있는 것이다.
이러한 상황을 막기 위해 Salt(양념)를 첨가하여 사용한다.
root 계정과 wishfree 계정의 패스워드는 동일하나 서로 다른 Salt가 패스워드의 앞에 붙여져 해쉬 한 결과는 상이하다.
적용된 Salt는 똑같은 패스워드를 숨길뿐만 아니라 적용 수준에 따라 패스워드 크래킹을 매우 어렵게 만드는 요소이다.
무차별 대입 공격 (Brute-Force Attack)
패스워드에 사용될 수 있는 문자열의 범위를 정하고, 그 범위 내에서 생성 가능한 모든 패스워드를 생성하여 입력
패스워드가 그다지 복잡하지 않거나 짧을 경우 단시간에 크래킹 가능
로그인 횟수 제한을 통하여 방어 가능
1. test 유저 A, B, C를 생성
2. /etc/shadow 에서 테스트 유저의 비밀번호 해시값을 확인
cat /etc/shadow
3. 브루트 포스 공격으로 패스워드 크래킹
john --show /etc/shadow
사전(Dictionary) 대입 공격
사용자가 설정하는 대부분의 패스워드에 특정 패턴이 있음에 착안
패스워드로 사용할 만한 것을 사전으로 만들어놓고 하나씩 대입하여 패스워드 일치 여부 확인
wordlist.txt에 입력해둔 password를 활용하여 사전 대입 공격을 사용해 패스워드 크래킹
john --wordlist=dic.txt /etc/shadow
레인보우 테이블 공격
최초의 알고리즘은 1980년 마틴 헬만(Martin Hellman)에 의해 소개됨
기본적인 개념 : 패스워드 별 해쉬 값을 미리 생성 -> 크래킹 하고자 하는 해쉬 값을 테이블에서 검색하여 원래 패스워드를 찾음
만약, 패스워드가 '12qw', 해쉬 값이 '123452323242' 라면 패스워드 별 해쉬 값을 미리 구해둔 레인보우 테이블에서 '1234523242'를 찾아 역으로 '12qw' 유추
레인보우 테이블은 하나의 패스워드에서 시작해 변이 된 형태의 여러 패스워드를 생성함
레인보우 테이블 : 변이 된 각 패스워드의 해쉬를 고리처럼 연결하여 일정한 수의 패스워드와 해쉬로 이루어진 체인을 무수히 만들어 놓은 테이블. 일반적으로 수십 GB 이상의 용량을 가지고 있음
출처 : 시스템 해킹과 보안: 정보 보안 개론과 실습 저자 : 양대일 출판 :한빛 아카데미
'시스템 해킹과 보안' 카테고리의 다른 글
[시스템 해킹과 보안] 백도어 (0) | 2022.12.09 |
---|---|
[시스템 해킹과 보안] 계정과 권한 (0) | 2022.12.09 |