일단 밑의 글에서도 알 수 있듯이, SSH포트를 열어두면 꾸준히 공격이 들어옵니다. SSH가 아니라도 마찬가지입니다. 포트를 열어두면 공격이 꾸준히 들어옵니다.
그럼, 이러한 로그인 공격이 얼마나 위협이 되는지를 생각해봐야 할 겁니다.
일단, 공격자가 ascii 코드 무작위 대입을 하는 경우를 고려해보겠습니다. 이 경우 한 글자당 95개의 경우를 테스트해봅니다. 글자가 하나 늘어날때마다 space가 95배씩 늘어납니다.
1 글자면 95개, 2 글자면 9025개, 3 글자면 8.57 x 10^5개 (~857 킬로), 4 글자면 8.145 x 10^7 (~81메가) 개.. 순서로 늘어갑니다.
그럼 7자리의 비밀번호를 무작위로 찾는 경우를 생각해봅시다. 최대 6.98 x 10^13 번의 대입이 필요할 수 있습니다. descrypt 방식이라면 2080ti 로 hashcat을 돌렸을 때 1600 MH/s가량이 나오니 (ref: https://gist.github.com/binary1985/c8153c8ec44595fdabbf03157562763e ) 대충 12시간이면 풀립니다.
..문제는, 로컬에서 돌려서 이 속도라는 점입니다. ssh를 통해 초당 1600e6개의 암호가 대입이 될 리가 없습니다. 특히 fail2ban같은 걸 걸어두면 한 컴퓨터로 대입할 수 있는 암호 횟수에 제약이 걸려 (그 이상 입력할 경우 ip밴당함) 한시간동안 수십 개 대입해보는 게 고작입니다 (정확한 건 세팅값에 따름). 이래서야 좀비 컴퓨터를 수십만대 동원해도 무리입니다.
한 컴퓨터로 한시간동안 100개의 암호를 넣어본다고 가정합시다. 이걸 1000만대의 좀비 컴퓨터를 통해 동시에 같이 한다고 합시다. 7자리를 전부 찾아보는 데 8년 걸립니다. 한 자리 더 늘리면? 750년 걸립니다.
..그래서, fail2ban을 걸고 조금 강한 암호를 쓰기만해도 ssh에 무작위 대입을 해서 서버를 해킹하는 건 불가능에 가깝습니다. 그런데 왜 사람들이 털리느냐? 그거 관리하는 사람들이 생각보다 보안에 관심이 없어서입니다.
- Fail2ban 등 추가적인 보안 설정을 걸어두지 않음
- 기본으로 ssh가 설정되어있는 시스템을 구매한 후 기본 비밀번호를 건드리지 않음.
- 비밀번호의 엔트로피가 충분히 높지 않음
- 이미 털린 비밀번호의 경우 dictionary attack에 당할 가능성이 높습니다 (대표적으로 Password1!). 같은 비밀번호를 여러 곳에 재활용한 경우도 마찬가지의 위험성이 있음.
- 95^n 형태로 난이도가 증가하는 건 어디까지나 ASCII영역을 다 쓴 경우고, 소문자만 쓴다거나 하면 당연히 검색할 공간이 훨씬 좁아집니다.
- 뭔가 다른 구멍이 있음 (암호를 뚫는 게 아니라 다른 구멍으로 침입). 보안 업데이트를 안 해 준다거나 암호화 등이 잘 안되는 레거시 온라인 서비스를 별도로 돌리고 있다던가 등등..
그래서 실제로 비밀번호가 무작위 대입을 통해 해독되는 경우는 대부분 저렇게 원격 서버에 무작위 대입을 해서 깬 게 아니라 웹사이트 등 온라인 서비스의 데이터베이스를 털어서 거기서부터 비밀번호를 해독한 경우들입니다. 평문으로 저장되는 사례도 있었고, 요즘은 해싱을 하는 경우가 늘었지만 위에 적은 것 처럼 로컬에서 GPGPU같은 걸 때려박으면 어느정도는 비밀번호를 깨볼 만 합니다. 물론 여러번 로그인 시도를 했을 때 차단을 먹이지 않는 사이트라면 계에속 대입을 돌려서 깨는 것도 가능하기는 합니다만.. 뭐 상식적인 곳은 그렇겐 안 하죠.
해킹되도 서비스 계정이랑 사용자 계정이랑 잘 나눠놓고 포트 잘막아놓으면 문제는 없지 안는가 싶습니다.
봇돌아가는게 주인들이 까먹은게 아닌가 아니면 주인없는 유기 봇들이라던가. 하는 생각이 들어요;