학사 나부랭이
How to Crack - Hash 본문
Brute-force attacks&Dictionary attacks
가장 간단한 방법들이에요. 비밀번호를 유추하고 그걸 해싱한 후 크랙 할 해시값과 같은지 체크하는 방법이에요.
- 브루트 포스, 무차별 대입이라고도 부르는 공격은 가능한 모든 문자의 조합을 해싱해 해시값을 비교해요. 한눈에 봐도 비용과 시간이 엄청 많이 들어 보이는데 대신 언젠가는 비밀번호를 찾아내요. 물론 효율은 최저죠.
- 사전 대입 공격의 경우 단어, 문장, 일반적으로 쓰이는 비밀번호, 그 외 문자열이 담긴 파일을 이용해 각각 해싱해 해시값을 비교해요.
Lookup tables
시작할 때는 HDD에 있는 사전 파일만 가지고 있고 크랙킹을 시작할 때 사전(辭典)에 있는 비밀번호의 해시값을 사전(事前)에 계산하고 그와 함께 그에 대응하는 비밀번호를 룩업 테이블 데이터 구조에 저장해요. 참고로 룩업 테이블 데이터 구조는 램에 저장돼요.
Reverse lookup tables
이 공격은 사전에 계산된 룩업 테이블 없이 사전 공격이나 브루트 포스 공격을 한 번에 많은 해시에 할 수 있어요. 공격자는 가지고 있는 사용자 정보에서 해시를 가져다 어떤 사용자가 그 해시에 대응하는지에 대한 룩업 테이블을 만들어요. 그러니까 같은 비밀번호를 쓰는 사용자를 그룹핑하는 거죠. 그 후 유추한 비밀번호들을 해싱해서 해시값을 비교해요. 한 번 걸리면 같은 비밀번호를 쓰는 여러 사용자를 해킹할 수 있죠.
Rainbow tables
계산 시간을 희생해서 공간을 줄인 거예요. 룩업 테이블과 비슷하지만 레인보우 테이블은 크랙 하는 속도를 희생하고 룩업 테이블을 더 작게 만들어요. 덕분에 더 많은 해시를 저장할 수 있어요.
Salt
사용자가 우연히 같은 비밀번호를 설정해서 다른 사용자의 유출되지 않도록 치는 양념이에요.
예를 들어 Purachina는 비밀번호를 1234로 설정했어요. 그런데 Purachina는 Purakorea도 자신이랑 해시값이 동일하다는 걸 깨달으면 'Purakorea도 비밀번호가 1234구나!'라고 알 수 있죠. 이걸 예방하기 위해 랜덤한 문자 두 글자를 추가해(ex: as1234) 같이 해싱해버리면 아예 다른 해시값이 나오겠죠? 이건 MD5의 경우이고 SHA256, SHA512 등의 경우 salt와 해시값의 길이도 다 달라요.
이 솔트는 임의로 문자를 추가하는 것만으로도 위의 룩업 테이블, 리버스 룩업 테이블, 레인보우 테이블은 사전에 계산할 수가 없어서 효과가 없어져요. 그래서 비밀일 필요가 없죠. 단, 솔트를 재사용하는 경우 리버스 룩업 테이블로 공격을 할 수 있고 솔트가 짧은 경우 이 솔트에 대해서도 룩업 테이블을 만들 수 있으므로 취약해져요.
'自習' 카테고리의 다른 글
SQL - Opening (0) | 2021.05.14 |
---|---|
IPC(Inter-Process Communication) (0) | 2021.03.30 |