Here are two version browser console JSfile, If your UTM work based on JSON, use "alert_attack_on_UTM_based_on_json.js", otherwise "alert_attack_on_UTM_based_on_class"
BUT!!!
"alert_attack_on_UTM_based_on_json.js" has more functions !!!
- Login the UTM
- Move to the traffic page in UTM
- Edit JavaScript code for your enviroment
- Copy the JavaScript in "Alert_attack_on_UTM_based_on_json.js" or "Alert_attack_on_UTM_based_on_class" (★ Alert_attack_on_UTM_based_on_json.js has more function ★)
- Press 'F12' button and Click 'Console' button
- Paste the code on 'Console'
- Press 'Enter' button
- Select song file for alert
- Done
★ functions ★
- When specific sip or dip packet goes through UTM, Alert song and Show the packet information on console window
- Alert when Network scan or Port scan is suspected and Show the packet information on console window
- When specific policy packet goes through UTM, Alert song and Show the packet information on console window
- When UTM logout, Alert
- When Alert is activated, Save the packet in IndexedDB
- When Alerting, The page turns to red color(Click any place to turn back)
-----------한글------------
- UTM에서 로그인을 합니다.
- UTM에서 관제하는 트래픽 창으로 이동합니다.
- JavaScript 코드를 자신의 UTM 환경에 맞춰서 변경합니다
- 'F12'를 누르고 'Console'로 이동합니다
- JavaScript 코드를 복사 후 'Console'에 붙여넣고 실행합니다
- 파일 선택창이 나올텐데, 알람으로 사용할 음악 파일을 선택합니다
- 끝입니다.
★ 기능들 ★
- 특정 sip나 dip를 가진 패킷이 UTM에 들어올 경우, 알람을 울리고 패킷 정보를 Console 창에 띄웁니다.
- 네트워크 스캔이나 포트 스캔이 의심될 때, 알람을 울리고 패킷 정보를 Console 창에 띄웁니다.
- 특정 정책이 적용돼 차단되거나 허용된 패킷이 들어올 경우, 알람을 울리고 패킷 정보를 Console 창에 띄웁니다.
- UTM이 로그아웃된 경우, 알람을 울림
- 알람을 울릴 때의 패킷 정보를 IndexedDB에 저장함
- 알람이 울릴 때, 페이지의 색깔이 붉은 색으로 변합니다(아무 곳이나 누르면 다시 원래대로 돌아옵니다)
/******
개발하다 마주친 문제 및 고생한 점과 해결법들
******/
(해결법) 전역할 때까지// 자바스크립트를 본격적으로 제대로 공부하기 시작함, 밖에서 공부하고 공부한 지식을 노트에 적어 가져와 개발 시작
★문제 2 :
i) 공격 발생시 알람으로 노래를 틀어야하는 데, 로컬 파일에 직접 접근하는 것은 보안정책상 대부분의 브라우저에서 막혀있음
ii) URL을 통해 알람을 울리려 해도 CORS 문제에 직면
(해결법) 3주 소요// IndexedDB 라는 것을 통해 DB를 만들고, 이 DB에 노래 파일을 업로드 후 사용하는 방법을 통해 노래 재생을 할 수 있음을 발견
(해결법) 1일 소요// 파일을 이진파일로 바꾸고 저장해야함을 배움
(해결법) 7일 소요// UTM URL의 'body'에서 sip와 dip 클래스 내 데이터를 가져와 특정 sip, dip 배열과 비교하고, 공격이라 판단되는 ip는 1시간 지속되는 'attack_ip'란 쿠키를 만들어, 쿠키가 있을 시 알람을 안 울리게 하는 방법을 고안
(해결법) 4일 소요// XMLHttpRequest를 공부해 사용해보다가, 더 편한 fetch와 setInterval()를 통해 10초마다 갱신 패킷을 가져옴
(해결법) 2일 소요// 알고보니 ahnlab UTM은 서버에서 JSON 형태로 데이터를 HTML과 따로 받고 있었음
(해결법) 3일 소요// fetch로 서버에 따로 요청을 보내고, HTML의 body 내용을 가져와 JSON으로 파싱하고, 그 안에서 패킷들을 가져오기
(해결법) 2일 소요// UTM은 이미 그런 공격들을 특정 정책을 통해 차단하고 있고, 방화벽 정책은 트래픽 패킷에 나오는 '정책 번호'를 통해 알 수 있으니 JSON에서 정책 번호를 가져와 알람을 울림
(해결법) 3일 소요// 복잡하게 생각할 필요 없이, 그냥 UTM 로그인 후 console에서 실행하면 로그인한 아이디 권한을 가지고 fetch가 가능
(해결법) 2일 소요// 네트워크 스캔의 특징은 한 sip가 여러 개의 dip를 향하는 패킷이라는 것이므로, 10개 이상의 다른 dip를 향한 sip 패킷이 차단될 경우 공격이라 판단하게 함
(해결법) 7일 소요// 배열로 사용했다, 객체를 사용했다, 검색을 통해 최적화 방법을 구상하며 겨우 구현
(해결법) 1일 소요// 관제 룰이 들어있는 HTML 요소에 적힌 '관제 룰'을 가져와, encodeURIComponent()를 이용해 URI 형태로 변환 후 JSON URL에 삽입해 fetch로 사용하기
(해결법) 4일 소요 //
메모리가 가득차서 브라우저가 종료되는 건 브라우저 코드가 초기화 되는 것이기에, 자바스크립트로는 어쩔 수 없다.
그래도 window.addEventListner의 'beforeunload' 이벤트를 사용해 로그아웃시 알람을 울리고
window.performance.memory 객체를 이용해 페이지 메모리 사용량이 99% 이상 될 시 알람을 울리게 만들었다.
(해결법) 1일 소요 // 공격 알람을 울릴 때, IndexedDB에 공격 패킷의 정보들을 기록하게 만듦
(해결법) 7일 소요 // 네트워크 스캔 알고리즘을 변형해서, 하나의 sip가 일정 개수 이상의 dport를 가질 경우 알람을 울리게 함
(해결법) 3일 소요 // UTM에서 받아오는 jsonArray는 시간이 역순을 돼 있기에, 다시 순서를 반대로 돌리고 공격을 탐지할 당시의 sip를 통해서, jsonArray의 첫 번째 sip의 시간과 정보들을 console에 띄움 차후 UTM 관제 페이지에서 반투명의 알람창에 정보를 보낼 수 있게, 전역 변수에 알람할 정보를 저장하는 것까지 함 */
(해결법) 1일 소요 // jsonArray를 받아올 때, jsonArray의 길이가 15 이상이 아니면 네트워크 스캔, 포트 스캔 검사를 안하게 만들어서, 불필요한 계산을 줄임