• 목록
  • 아래로
  • 위로

안녕하세요?


최근 상당수의 그누보드(아미나) 계열 사이트에서 매크로를 이용한 일종의 DDoS 사건이 발생했다고 알고 있습니다.


그 방식은 간단한데, 1초당 5개 이상의 동일한 글을 반복하여 작성하여 게시판을 덮어버리고, 결국에는 서버 과부하를 유도하는 방식입니다.


저도 앞으로 아미나를 활용하여 커뮤니티 사이트를 운영할 예정인데,


1) 어떤 방식으로 이런 공격을 수행했고, 2) 이에 대한 대처방법에 대해 궁금해서 여쭤보게 되었습니다 ^^




우선 공격수행방식에 대해 질문 드리겠습니다.


제 생각에는 AutoHotkey로 브라우저를 조작하면 이 정도 속도가 나오기 힘들기 때문에


브라우저가 아닌 툴(파이썬 Requests 등)로 글쓰기 POST 요청을 반복하여 보내는 것 같습니다.


그런데 단순히 Requests에서 글 작성 스크립트를 반복해도 초당 5개 이상 작성하기는 힘들겠죠.


제가 테스트해보니 순수하게 반복문만 사용하면 기껏해야 초당 1개 정도의 속도가 나오는 것 같더군요.

(아미나에서는 ajax filter 등을 거치기 때문에 POST 요청을 여러 번 해야 글 작성이 가능합니다.)


아직 제가 멀티 프로세싱이나 멀티 스레딩에 대한 개념을 확실히 잡지를 못 했는데,


Requests에 멀티 프로세싱 등을 활용한 공격이라고 생각하면 될까요?? ㅠㅠ




이러한 공격에 대해 일부 사이트에서는 클라우드 플레어로 Requests 등 브라우저에 의한 접속이 아닌 경우 차단을 하도록 조치를 했습니다.


하지만 제가 테스트 해보니 저번에 말씀드린 Selenium의 세션을 Requests로 보내는 방식으로 어렵지 않게 우회가 가능하더군요 ㄷㄷ


https://studyforus.com/study/647489




두 번째로는 일부 사이트에서 글 쓰기 간격을 조절했다고 합니다.


제가 조금 놀랐던 부분은 이 부분 또한 공격자가 우회를 했다는 것입니다.


아미나의 코드를 뜯어보니 write_update.php 파일의 다음과 같은 부분이 이에 대한 방어를 하는 스크립트인 것 같습니다.






권한이 없는 이상 서버 내부의 세션을 클라이언트가 변조할 수는 없다고 알고 있습니다.


그렇다면 1) 세션을 생성하고 종료하는 것을 반복하거나, 2) 세션을 여러 개 생성하여 이걸 우회했을 가능성이 높은데요.


멀티 프로세싱이나 멀티 스레딩으로 세션을 여러 개 생성하여 초당 5개 이상의 글을 작성하였다고 이해하면 될까요??


제가 파이썬 멀티 태스킹에 대한 지식이 부족하여 이 부분이 잘 이해가 안 되네요 ㅠㅠ




그렇다면 이를 방어하기 위해서는 (현재시간 - 최근 글 작성 시간)을 직접 계산해야 될 것 같네요.


다만 아미나 자체적인 회원의 최근 작성글을 조회하는 기능은 DB를 검색하는 것이라서 서버에 부담이 되고 속도도 느리더군요 ㅠㅠ


그렇다면 어떤 방식으로 이걸 방어해낼 수 있을까요??


개인정보에 최근 글 작성 필드를 생성하고 이를 글을 작성할 때마다 확인하고 갱신하는 방식으로 커스텀을 하면 될까요??


이러한 방식을 사용했을 때 예상되는 문제점은 없을까요??




일련의 사태를 겪다보니 공격보다 방어가 훨씬 어렵다는 것을 느끼게 되었네요.


적절한 방어를 하려면 우선 공격방법에 대해 정확히 파악을 해야되니깐요 ㅠㅠ


스포어의 보안 고수님들의 우문현답을 부탁드립니다!!


번번이 정말 감사합니다 ^-^


작성자
이니스프리 119 Lv. (0%) 1876250/115200000EXP

당분간 일신상의 사정으로 쪽지나 댓글로 답변을 드리기 어렵습니다. 죄송합니다.

 

CSVpuymXAAAVVpd.jpg

댓글 6

title: 황금 서버 (30일)humit
profile image

그런데 단순히 Requests에서 글 작성 스크립트를 반복해도 초당 5개 이상 작성하기는 힘들겠죠.

제가 테스트해보니 순수하게 반복문만 사용하면 기껏해야 초당 1개 정도의 속도가 나오는 것 같더군요.

(아미나에서는 ajax filter 등을 거치기 때문에 POST 요청을 여러 번 해야 글 작성이 가능합니다.)

아직 제가 멀티 프로세싱이나 멀티 스레딩에 대한 개념을 확실히 잡지를 못 했는데,

Requests에 멀티 프로세싱 등을 활용한 공격이라고 생각하면 될까요?? ㅠㅠ

 

=> 해당 부분은 멀티 프로세싱이나 멀티 스레딩을 활용해서 동시에 글쓰는 프로세스를 실행하는 방식으로 쉽게 구현이 가능합니다.

이것을 막는 방법은 따로 없다고 보는게 맞을거 같네요.. 특정 IP에서 짧은 시간에 많은 요청이 들어오는 경우에 대해 block을 하는 방식으로 iptables를 설정하는 방법이 전부라고 보면 될 거 같아요.

 

두 번째로는 일부 사이트에서 글 쓰기 간격을 조절했다고 합니다.

제가 조금 놀랐던 부분은 이 부분 또한 공격자가 우회를 했다는 것입니다.

아미나의 코드를 뜯어보니 write_update.php 파일의 다음과 같은 부분이 이에 대한 방어를 하는 스크립트인 것 같습니다.

=> 세션의 경우에는 새 브라우저를 시작하면 새로 만들어지기 때문에 세션만 가지고 체크하는 것은 크게 의미가 없습니다. 좀 더 한다면 로그인을 할 때마다 생기는 세션을 DB에 저장시켜서 다른 값에 해당하는 세션들은 전부 무효화시키는 방식으로 하는 방법이 있긴하지만 이러면 DB 쪽에 부하가 많이 걸릴 수도 있어서 썩 좋은 방법은 아닌거 같네요.

 

가장 현실적인 방법은 캡챠를 도입해서 사용자들과 악성 유저를 귀찮게 하고, selenium 등을 감지하는 로직과 javascript 를 사용해서 짧은 시간에 많은 데이터를 입력하거나 별다른 마우스 움직임이 없는 등의 정보들을 가지고 차단하는 방법(네이버가 로그인 기능 구현에서 테스트를 해본 결과 이런 식으로 검증하는 것으로 보입니다)인거 같습니다.

comment menu
2020.02.20. 16:45

신고

"humit님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → humit
profile image

상세한 답변을 해주셔서 감사드립니다!

말씀해주신 부분에 대해 검색을 해봤는데 제가 추가로 궁금한 점에 대해 여쭤볼게요 ^^

 

특정 IP에서 짧은 시간에 많은 요청이 들어오는 경우에 대해 block을 하는 방식으로 iptables를 설정하는 방법이 전부라고 보면 될 거 같아요.

=> 제가 외부 IP에 대한 개념이 부족한데, 이런 방식으로 IP를 블럭하면 같은 공유기에서 다수의 인원이 접속하는 경우(회사, 원룸 등)마저 오인하여 문제가 발생하지는 않을까요??

 

selenium 등을 감지하는 로직과 javascript 를 사용해서 짧은 시간에 많은 데이터를 입력하거나 별다른 마우스 움직임이 없는 등의 정보들을 가지고 차단하는 방법

=> 클라우드 플레어에서도 자바스크립트를 렌더링하는지 여부로 Requests를 필터링하는 것 같던데요.

구글링을 해보니 Requests를 감지하는 방법에 관한 https://stackoverflow.com/a/54361531 이 글을 보면 다음과 같은 부분이 있는데요.

 

"Javascript should be enabled.

Check that "navigator.plugins" and "navigator.language" are set in the client javascript page context"

 

Requests의 설정에 이런게 있는가요?? 제가 구글링을 해도 이 부분을 잘 모르겠네요 ㅠㅠ

 

만약 공격자가 자바스크립트를 활용하여 봇을 감지하는 방법마저도 우회를 하고, 캡챠도 머신러닝을 이용한 OCR로 뚫어버린다면,

관리자가 24시간 상주하며 직접 차단하는 방법 이외에는 사실상 방어수단이 없다고 봐도 될까요?? ㅠㅠ

 

정확한 공격방법을 모르면서 방어를 해야되니 방어수단을 강구하는게 훨씬 어려워지는 것 같네요.

그럼 humit 님께서도 편안한 저녁 되세요!

다시 한 번 감사드립니다 ^^

comment menu
2020.02.20. 20:02

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

title: 황금 서버 (30일)humit → 이니스프리
profile image

제가 외부 IP에 대한 개념이 부족한데, 이런 방식으로 IP를 블럭하면 같은 공유기에서 다수의 인원이 접속하는 경우(회사, 원룸 등)마저 오인하여 문제가 발생하지는 않을까요??

=> 이런 경우에는 하나의 IP로 잡히는게 맞습니다. 근데 저런식으로 접근을 할 수도 있지만 하나의 공유기로 여러 디바이스를 통해 공격을 시도하는게 매우 쉬운편이니까요.

 

Check that "navigator.plugins" and "navigator.language" are set in the client javascript page context"

=> 이 부분은 requests 모듈보다는 selenium 상의 모듈 상에서 감지가 되는 것을 의미하는 것일수도 있고, 아니면 form 요청을 보낼 때 해당 정보를 난독화해 포함한 상태로 보내는 경우일 수도 있습니다. fingerprint.js 라고 해서 해당 정보를 포함하는 라이브러리가 있습니다.

 

만약 공격자가 자바스크립트를 활용하여 봇을 감지하는 방법마저도 우회를 하고, 캡챠도 머신러닝을 이용한 OCR로 뚫어버린다면,

관리자가 24시간 상주하며 직접 차단하는 방법 이외에는 사실상 방어수단이 없다고 봐도 될까요?? ㅠㅠ

=> 네 아무래도 직접 관리하지 않는 이상 제대로 된 방어 수단은 없다고 볼 수밖에 없습니다. 당장 구글과 같은 경우에도 크롬 창에서 직접 검색해서 자료를 찾으면 가끔씩 봇 여부를 묻는 캡챠가 뜨는 걸로 보더라도 사용자와 봇을 구분할 수 있는 방법은 자동화 방식으로는 불가하다고 볼 수 있을 거 같습니다.

comment menu
2020.02.21. 12:22

신고

"humit님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → humit
profile image

제가 오늘 접촉사고가 나서 답장이 늦었네요~ ㅠㅠ

(주차해놓은 제 차를 다른 차량이 긁어서요 ㅠㅠ)

상세한 설명 감사드립니다!

humit 님 덕분에 이제 좀 개념이 잡히는 것 같네요~

그럼 즐거운 주말 되시고 코로나19 조심하세요 ^-^

comment menu
2020.02.21. 17:30

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

짐농
profile image

가끔은 단순 무식한 방법이 편할 때가 있습니다.

구글 리캡챠 적용해보시면 어떨까요? ^^;

comment menu
2020.02.20. 16:50

신고

"짐농님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → 짐농
profile image

리캡챠가 가장 간편하면서도 확실한 방법이긴 하네요!!

다만 클플이나 리캡챠는 워낙 유명한 툴이어서 이걸 뚫는 툴도 많은게 단점인 것 같아요~

창과 방패의 싸움인데 일단 이 부분에 대해 테스트를 해볼게요~ ㄷㄷ

그럼 편안한 저녁 되세요 ^^

감사합니다!!

comment menu
2020.02.20. 19:29

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [작업 완료] 설 명절 맞이 서버 업데이트 안내 3 마스터 24.02.11.17:21 376
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 23.01.14.02:23 4060
공지 [필독] 질문하는 방법 17 마스터 18.02.23.03:09 4464
922 계속 사용중이던 네트워크 공유 폴더가 갑자기 액세스 불가라고 뜹니다. 6 image 장윤서 18.06.07.16:55 34331
921 팀뷰어 대체할 원격 제어 프로그램 추천 부탁드립니다 16 이니스프리 17.11.30.15:38 32325
920 엑셀 그래프의 축 간격 조절 문제입니다. 2 image 국내산라이츄 17.08.10.11:06 12483
919 아이폰/아이패드 충전기 발열 관련 질문 드립니다 9 image 이니스프리 19.05.02.22:52 11105
918 에러 523 해결법 4 입체그림 20.02.21.16:48 6690
917 PyQt 실행시 프리징 현상 관련하여 질문 드립니다! ㅠㅠ 3 이니스프리 19.07.06.03:37 6685
916 프린터가 지 맘대로 프린트를 하네요. 3 곰도리푸 18.04.04.18:20 6014
915 윈도우용 메일 클라이언트가 필요합니다. 9 네모 18.01.11.20:15 5867
914 크롬에서 특정 사이트 접속 문제 관련하여 질문 드립니다 9 이니스프리 17.03.27.18:03 5309
913 오라클 클라우드 프리티어 가입이 안 되네요 ㅠㅠ 20 이니스프리 20.06.26.21:31 4827
912 파이썬 에디터로 어떤 것이 좋나요? 14 NoYeah 20.01.08.21:08 4525
911 라떼판다와 라즈베리 파이 중 어느 쪽을 사는 게 나을까요? 9 제르엘 18.10.14.19:25 3827
910 나무 위키의 수익구조는 무엇일까요? 2 NoYeah 18.03.18.15:56 3808
909 파티션 복구 프로그램 TestDisk 잘 아시는 분 계시나요? 29 이니스프리 17.11.10.14:53 3745
908 IE11에서 이미지가 깨지는 현상을 해결할 수 있을까요? 2 이니스프리 19.08.02.00:01 3702
907 파일질라로 연결하니까 보안되지 않은 서버입니다. TLS를 통한 FTP를 지원하지 않습니다. 이렇게떠요 해결방안좀 1 마카오 16.09.11.00:57 3654
906 자바스크립트 FormData와 관련된 메서드의 IE 호환성과 관련하여 질문 드립니다 ^^ 6 image 이니스프리 19.08.05.14:22 3426
905 선택약정 안 되는 중고폰의 경우에는 어떤 단점이 있는 것인가요?? 6 이니스프리 20.01.21.14:30 3099
904 집에서 시놀로지 NAS로 워드프레스나 미디어위키 돌리면 느릴까요? 10 이니스프리 17.01.16.20:56 2979
903 [Requests] multipart/form-data의 전송에 대해 질문 드립니다 ^^ 4 이니스프리 19.12.18.22:00 2901