지금까지 DVWA 브루트 포스의 공격을 시도해 보았다...
이러한 브루트 포스 공격을 당하지 않기 위한 방패.. 방어법에는 무었이 있는지
한번 DVWA를 통해 알아보자!
DVWA의 security수준을 medium으로 한 번 올려보자.
올린 후 브루트 포스 메뉴로 들어와
오른쪽 하단의 view Source를 눌러서 코드를 한 번 살펴보자
눌르면
소스를 살펴보면 아랫부분에
else{
//lodin failed
라고 주석이 달린 부분을 잘 살펴보자
sleep(2); 라는 함수가 적용되어 있다.
이 sleep()은 입력한 값만큼 기다린 후 그 다음 코드를 실행하는 함수인데
이러한 sleep(2) 가 코드에 삽입되게 되면
브루트 포스 공격방식에 큰 영향을 끼치게 된다
예를 들어 브루트포스 총 공격 문자양이 180만개 라고 했을 때
sleep()이 없을경우 180만초가 걸린다고 하면
sleep()이 있다면 180 * n 배 만큼의 시간이 더 걸리게 된다.
자원을 중요시하는 브루트 포스 공격에 더 많은 자원을 요구하게 되어
공격을 어렵게 만들 수 있는 대응 방법중에 하나이다.
그렇다면 이번엔
security수준을 High로 올려보자
high의 소스 코드의 login failed부분만 살펴보면
sleep(rand(0,3));
이라는 코드가 있다.
여기서 rand()의 의미는 정해진 범위내에서 랜덤하게 값을 리턴해주는 함수이다.
이 함수가 추가된다고 왜 Hard일까?
상황을 가정해보자.
공격자 Bob이 공격을 실행하던 중 공격시마다 일정한 간격의 로딩시간이 있다는 것 을 알아챈 뒤
공격 스크립트를 짤 때 일정시간이상 로딩이 걸리면
그 공격 문자열을 스킵하는 스크립트를 만들었다고 가정해보자.
그렇다면 우리가 위에서 사용한 sleep()방어법이 무용지물로 돌아갈 것이다…
그러한 공격방식까지 생각해 방어한 방식이 sleep(rand())방어법이다.
마지막으로 impossible 단계를 확인해보자
소스코드를 살펴보니 매우 길고 복잡하다…
한번 로그인 시도를 해보자
아래에 나타난 경고 문구를 보니
잘못된 로그인 시도를 자주 하여 계정이 잠겼다는 경고문구와 함께
15분 이라는 시간제한이 걸리는 것으로 보인다.
즉, 일정 횟수 이상의 로그인 시도를 실패하면 시간제한을 걸어 브루트포스 공격을 방지하는 것으로 보인다.
이러한 방식의 방어법을 이용한다면 브루트포스 공격을 하는데 걸리는 시간이 정말 무한대로 늘어날 수도 있을 것이다..
이러한 방어법은 여러가지 웹 사이트에도 적용이 되지만
요즘은 우리 모두가 들고 다니는 스마트폰에도 적용이 되어있다
패턴을 틀리거나 잘못된 암호를 입력하면 일정시간 동안 암호를 입력하지 못하는 시스템도
이러한 브루트 포스 방식을 방어하는 방법중에 하나인 것이다!
이렇게 브루트 포스 공격방식과 대응법에 대하여 공부해 보았다.
웹 사이트를 제작하거나 서비스를 만들때 이러한 대응 방안을 생각하면서 제작하는것이
제일 중요한 보안인 것 같다..!
또한 암호는 여러가지 문자,기호,숫자 등을 섞어서 만드는 것이 좋고 너무 흔한 비밀번호로는 설정하지 않는 것이 자신의 게정을 보호하는데 좋을 것 같다.
브루트포스 끝
'웹해킹 > DVWA' 카테고리의 다른 글
DVWA 브루트 포스 - 딕셔너리 공격 (0) | 2020.07.11 |
---|---|
DVWA 브루트 포스 - 이론과 공격 (1) | 2020.07.11 |