• 목록
  • 아래로
  • 위로

안녕하세요?


최근 상당수의 그누보드(아미나) 계열 사이트에서 매크로를 이용한 일종의 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%) 1912860/115200000EXP

Make StudyForUs Great Again!

 

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 746
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 23.01.14.02:23 4417
공지 [필독] 질문하는 방법 17 마스터 18.02.23.03:09 4475
그누보드에서 과도한 POST 요청을 보내는 매크로를 이용한 DDoS에 대해 질문 드립니다. 6 image 이니스프리 20.02.20.13:17 668
244 고정된 요일에 카운트다운되는 소스가있나요? 4 슬기 20.02.20.19:45 202
243 사이트 접속 불가 5 image 입체그림 20.02.21.09:39 235
242 에러 523 해결법 4 입체그림 20.02.21.16:48 6705
241 클라우드 플레어를 특정 PHP 파일에 연계되도록 설정할 수도 있는가요?? 이니스프리 20.02.21.21:18 188
240 홈서버용 CPU 좀 봐주시면 감사하겠습니다~ ㅠㅠ 7 image 이니스프리 20.02.24.22:40 218
239 [파이썬] Temporary failure in name resolution에 대해 여쭤봅니다 2 이니스프리 20.02.25.11:50 986
238 [파이썬] 웹 페이지 크롤링 시 조건에 따라 보여졌다 안보여지는 class를 조건문으로 사용 하고 싶은데요.. 4 위돈톡애니모 20.02.25.15:19 1333
237 [해결][CURL/PHP] 스터디포어스서버에서의 PHP CURL에 대한 특정 서버의 잘못된 응답에 대하여 3 Hanam09 20.02.27.15:36 309
236 스터디포어스 웹호스팅상에서 비주얼에디터 설치하는 중 오류가 났습니다 ㅠㅠ image 입체그림 20.02.28.14:40 207
235 VPS 플랜 선택과 관련하여 질문 드립니다 ^-^ 4 image 이니스프리 20.02.28.20:52 215
234 XE 에디터가 작동하지 않아요 ㅠㅠ 4 image 입체그림 20.03.03.17:30 219
233 [파이썬] 윈도우에서 datetime 객체의 invalid format string 에러 3 이니스프리 20.03.04.15:52 1486
232 그누보드5 홈피 관리해주실분 찾습니다. 찰리 20.03.04.23:10 206
231 브라우저 개발자도구에서 formdata를 숨기는 방법이 있는가요? 6 이니스프리 20.03.07.23:54 2624
230 페북이나 트위터처럼 태그 속성이 자주 변경되는 사이트의 크롤링은 어떻게 해야 될까요?? 4 이니스프리 20.03.09.00:27 240
229 VPS 웹서버 설치 후 보안을 위해 추가로 해야되는 조치에는 어떤 것이 있을까요?? 6 이니스프리 20.03.13.22:46 249
228 그누보드용 회원차단 크롬 확장프로그램을 만들어보려는데요~ ^-^ 7 이니스프리 20.03.24.23:53 263
227 안녕하세요ㅠㅠ 위키 URL 리다이렉션 관련 질문입니다 1 김광현 20.03.26.16:33 228
226 크롤링 용도로 사용하는 VPS의 트래픽이 얼마나 될까요?? 2 이니스프리 20.03.29.21:02 262