摘要:隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)安全問題也日趨嚴(yán)重,作為典型的DDOS攻擊方式,SYN Flood攻擊因?yàn)槠潆[蔽性和高效性頗受攻擊者青睞,更為嚴(yán)重的是,現(xiàn)在尚無完全令人滿意的防護(hù)手段,單一的防范手段往往達(dá)不到安全防范的效果;文章以典型攻擊為案例,在系統(tǒng)分析現(xiàn)有的常規(guī)防御技術(shù)手段的基礎(chǔ)上,結(jié)合相關(guān)安全管理策略,設(shè)計(jì)了一套涉及預(yù)防、監(jiān)控/識(shí)別、安全加固調(diào)整和恢復(fù)等關(guān)鍵環(huán)節(jié)的綜合安全解決方案;實(shí)際運(yùn)行表明,按照本方案防護(hù)的系統(tǒng)在攻擊實(shí)施時(shí)仍然能夠提供正常的服務(wù)。
關(guān)鍵詞:分布式拒絕服務(wù);SYN Flood;退讓策略;防火墻;負(fù)載均衡
中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)09-11588-03
1 引言
由于使用復(fù)雜的欺騙技術(shù)和基本協(xié)議,而不是采用可被阻斷的非基本協(xié)議或高端口協(xié)議,分布式拒絕服務(wù)(Distributed Denial of Service,DDoS)攻擊非常難識(shí)別和防御,而在拒絕服務(wù)攻擊里,又以SYN Flood攻擊最為有名,俗稱洪水攻擊。SYN Flood利用TCP協(xié)議缺陷,發(fā)送了大量偽造的TCP連接請求,使得被攻擊方資源耗盡,無法及時(shí)回應(yīng)或處理正常的服務(wù)請求。一個(gè)正常的TCP連接需要三次握手,首先客戶端發(fā)送一個(gè)包含SYN標(biāo)志的數(shù)據(jù)包,其后服務(wù)器返回一個(gè)SYN/ACK的應(yīng)答包,表示客戶端的請求被接受,最后客戶端再返回一個(gè)確認(rèn)包ACK,這樣才完成TCP連接。在服務(wù)器端發(fā)送應(yīng)答包后,如果客戶端不發(fā)出確認(rèn),服務(wù)器會(huì)等待到超時(shí),期間這些半連接狀態(tài)都保存在一個(gè)空間有限的緩存隊(duì)列中;如果大量的SYN包發(fā)到服務(wù)器端后沒有應(yīng)答,就會(huì)使服務(wù)器端的TCP資源迅速耗盡,導(dǎo)致正常的連接不能進(jìn)入,甚至?xí)?dǎo)致服務(wù)器的系統(tǒng)崩潰。SYN Flood由于其攻擊效果好,防御手段還不夠完善,迄今為止,還沒有什么好方法能夠從根本上預(yù)防拒絕服務(wù)攻擊行為的發(fā)生,因此需要制定完善的應(yīng)急措施,對已發(fā)生的拒絕服務(wù)攻擊行為進(jìn)行發(fā)現(xiàn)、告警、識(shí)別、消除影響以及追蹤攻擊來源。此外,現(xiàn)在的DDoS防御系統(tǒng)普遍“重技術(shù),輕管理”,大多仍局限于單一的技術(shù)手段,缺乏系統(tǒng)綜合防御的思想,對安全管理和流程層面關(guān)注不夠。
2 攻擊實(shí)例
2006年8月某市政府外網(wǎng)Web服務(wù)器連續(xù)多次遭到DDoS攻擊。第一次,網(wǎng)絡(luò)維護(hù)人員發(fā)現(xiàn)訪問速度很慢,檢查發(fā)現(xiàn)外網(wǎng)防火墻丟包現(xiàn)象非常嚴(yán)重,在防火墻上抓包分析,發(fā)現(xiàn)有大量的隨機(jī)IP地址對該主機(jī)發(fā)送了大量協(xié)議為255,長度固定的攻擊包。防火墻在1分鐘時(shí)間收到了110萬個(gè)包,造成外網(wǎng)口堵塞,以致于用戶對網(wǎng)站的正常訪問受到極大影響。同時(shí),其它需要通過防火墻的業(yè)務(wù)也受到了影響。由于大量攻擊包到達(dá)了防火墻的外網(wǎng)口,只能在骨干路由器上對主要IP進(jìn)行了封堵。封堵以后,網(wǎng)絡(luò)狀況暫恢復(fù)正常。同樣的情況出現(xiàn)了多次,維護(hù)人員采取都是通過在骨干網(wǎng)設(shè)備上進(jìn)行地址限制來恢復(fù)。
攻擊數(shù)據(jù)包傳輸路徑如圖1所示,Web服務(wù)是1臺(tái)PC服務(wù)器,操作系統(tǒng)為LINUX。在服務(wù)器上通過netstat工具可以看到:
# netstat -n -p TCP
tcp0 0 10.0.3.10:23224.103. 52.8:25833 SYN_RECV -
tcp0 0 10.0.3.10:23226.150.133.204:2588SYN_RECV-
tcp0 0 10.0.3.10:23127.160.60.129:51008SYN_RECV-
tcp0 0 10.0.3.10:23222.220.13.25:37396 SYN_RECV-
tcp0 0 10.0.3.10:23212.20.205.18:8427SYN_RECV-
tcp0 0 10.0.3.10:23232.105.18.38:228SYN_RECV-
tcp0 0 10.0.3.10:23239.111.65.116:5122 SYN_RECV-
tcp0 0 10.0.3.10:23236.20.138.202:4916SYN_RECV-
……

在服務(wù)器上看到大量的SYN_RECV半連接狀態(tài),而且大量源IP地址是隨機(jī)的,表明這是一種典型的帶有IP欺騙的Syn flood攻擊。其中SYN_RCVD表示當(dāng)前未完成的TCP SYN隊(duì)列,統(tǒng)計(jì)一下,發(fā)現(xiàn)共有10265個(gè)Syn的半連接存儲(chǔ)在內(nèi)存中。這時(shí)候被攻擊的WEB服務(wù)器已經(jīng)不能響應(yīng)新的服務(wù)請求了,系統(tǒng)運(yùn)行非常慢,也無法ping通,此時(shí)在骨干網(wǎng)設(shè)備上單純的進(jìn)行地址限制,已經(jīng)無法起到攻擊防范的作用,最終這幾次攻擊導(dǎo)致了網(wǎng)站服務(wù)的中止,通過該案例可見Syn flood攻擊的危害性。
3 Syn flood攻擊原理分析
SYN攻擊屬于DOS攻擊的一種,它利用TCP協(xié)議缺陷,通過發(fā)送大量的半連接請求,耗費(fèi)CPU和內(nèi)存資源。SYN攻擊除了能影響主機(jī)外,還可以危害路由器、防火墻等網(wǎng)絡(luò)系統(tǒng),事實(shí)上SYN攻擊并不管目標(biāo)是什么系統(tǒng),只要這些系統(tǒng)打開TCP服務(wù)就可以實(shí)施。從上圖可看到,服務(wù)器接收到連接請求(syn=j),將此信息加入未連接隊(duì)列,并發(fā)送請求包給客戶(syn=k,ack=j+1),此時(shí)進(jìn)入SYN_RECV狀態(tài)。當(dāng)服務(wù)器未收到客戶端的確認(rèn)包時(shí),重發(fā)請求包,一直到超時(shí),才將此條目從未連接隊(duì)列刪除。配合IP欺騙,SYN攻擊能達(dá)到很好的效果,通常,客戶端在短時(shí)間內(nèi)偽造大量不存在的IP地址,向服務(wù)器不斷地發(fā)送syn包,服務(wù)器回復(fù)確認(rèn)包,并等待客戶的確認(rèn),由于源地址是不存在的,服務(wù)器需要不斷的重發(fā)直至超時(shí),這些偽造的SYN包將長時(shí)間占用未連接隊(duì)列,正常的SYN請求被丟棄,目標(biāo)系統(tǒng)運(yùn)行緩慢,嚴(yán)重者引起網(wǎng)絡(luò)堵塞甚至系統(tǒng)癱瘓。
4 Syn flood安全防范
4.1 總體思路
關(guān)于SYN攻擊防范技術(shù),人們研究得比較早。歸納起來,主要有兩大類,一類是通過防火墻、路由器等過濾網(wǎng)關(guān)防護(hù),另一類是通過加固TCP/IP協(xié)議棧防范.但必須清楚的是,SYN攻擊不能完全被阻止,我們所做的是盡可能的減輕SYN攻擊的危害,除非將TCP協(xié)議重新設(shè)計(jì)。因此必須采用系統(tǒng)防范手段,主要在于如下幾個(gè)方面。
4.2 防火墻
防火墻通常用于保護(hù)內(nèi)部網(wǎng)絡(luò)不受外部網(wǎng)絡(luò)的非授權(quán)訪問,它位于客戶端和服務(wù)器之間,因此利用防火墻來阻止DoS攻擊能有效地保護(hù)內(nèi)部的服務(wù)器。針對SYN Flood,防火墻通常有三種防護(hù)方式:SYN網(wǎng)關(guān)、被動(dòng)式SYN網(wǎng)關(guān)和SYN中繼。
SYN網(wǎng)關(guān)防火墻收到客戶端的SYN包時(shí),直接轉(zhuǎn)發(fā)給服務(wù)器;防火墻收到服務(wù)器的SYN/ACK包后,一方面將SYN/ACK包轉(zhuǎn)發(fā)給客戶端,另一方面以客戶端的名 義給服務(wù)器回送一個(gè)ACK包,完成TCP的三次握手,讓服務(wù)器端由半連接狀態(tài)進(jìn)入連接狀態(tài)。當(dāng)客戶端真正的ACK包到達(dá)時(shí),有數(shù)據(jù)則轉(zhuǎn)發(fā)給服務(wù)器,否則丟棄該包。由于服務(wù)器能承受連接狀態(tài)要比半連接狀態(tài)高得多,所以這種方法能有效地減輕對服務(wù)器的攻擊。
被動(dòng)式SYN網(wǎng)關(guān) 設(shè)置防火墻的SYN請求超時(shí)參數(shù),讓它遠(yuǎn)小于服務(wù)器的超時(shí)期限。防火墻負(fù)責(zé)轉(zhuǎn)發(fā)客戶端發(fā)往服務(wù)器的SYN包,服務(wù)器發(fā)往客戶端的SYN/ACK包、以及客 戶端發(fā)往服務(wù)器的ACK包。這樣,如果客戶端在防火墻計(jì)時(shí)器到期時(shí)還沒發(fā)送ACK包,防火墻則往服務(wù)器發(fā)送RST包,以使服務(wù)器從隊(duì)列中刪去該半連接。由 于防火墻的超時(shí)參數(shù)遠(yuǎn)小于服務(wù)器的超時(shí)期限,因此這樣能有效防止SYN Flood攻擊。
SYN中繼防火墻在收到客戶端的SYN包后,并不向服務(wù)器轉(zhuǎn)發(fā)而是記錄該狀態(tài)信息然 后主動(dòng)給客戶端回送SYN/ACK包,如果收到客戶端的ACK包,表明是正常訪問,由防火墻向服務(wù)器發(fā)送SYN包并完成三次握手。這樣由防火墻做為代理來 實(shí)現(xiàn)客戶端和服務(wù)器端的連接,可以完全過濾不可用連接發(fā)往服務(wù)器。
4.3 SYN-cookie技術(shù)
一般情況下,當(dāng)服務(wù)器收到一個(gè)TCP SYN報(bào)文后,馬上為該連接請求分配緩沖區(qū),然后返回一個(gè)SYN+ACK報(bào)文,這時(shí)形成一個(gè)半連接。SYN Flood正是利用了這一點(diǎn),發(fā)送大量的偽造源地址的SYN連接請求,而不完成連接。這樣就大量的消耗的服務(wù)器的資源。
SYN-cookie技術(shù)針對標(biāo)準(zhǔn)TCP連接建立過程資源分配上的這一缺陷,改變了資源分配的策略。當(dāng)服務(wù)器收到一個(gè)SYN報(bào)文后,不立即分配 緩沖區(qū),而是利用連接的信息生成一個(gè)cookie,并將這個(gè)cookie作為將要返回的SYN+ACK報(bào)文的初始序列號(hào)。當(dāng)客戶端返回一個(gè)ACK報(bào)文時(shí), 根據(jù)包頭信息計(jì)算cookie,與返回的確認(rèn)序列號(hào)(初始的序列號(hào)+1)的前24位進(jìn)行對比,如果相同,則是一個(gè)正常連接,然后,分配資源,建立連接。
該技術(shù)的巧妙之點(diǎn)在于避免了在連接信息未完全到達(dá)前進(jìn)行資源分配,使SYN Flood攻擊的資源消耗失效。實(shí)現(xiàn)的關(guān)鍵之處在于cookie的計(jì)算。cookie的計(jì)算應(yīng)該做到包含本次連接的狀態(tài)信息,使攻擊者不能偽造cookie。cookie的計(jì)算過程如下:
(1)服務(wù)器收到一個(gè)SYN包后,計(jì)算一個(gè)消息摘要mac:
mac=MAC(A,k);
MAC是密碼學(xué)中的一個(gè)消息認(rèn)證碼函數(shù),也就是滿足某種安全性質(zhì)的帶密鑰的hash函數(shù),它能夠提供cookie計(jì)算中需要的安全性。
A為客戶和服務(wù)器雙方的IP地址和端口號(hào)以及參數(shù)t的串聯(lián)組合:
A = SOURCE_IP || SOURCE_PORT || DST_IP || DST_PORT || t
K為服務(wù)器獨(dú)有的密鑰;
時(shí)間參數(shù)t為32比特長的時(shí)間計(jì)數(shù)器,每64秒加1;
(2)生成cookie:
cookie=mac(0:24):表示取mac值的第0到24比特位;
(3)設(shè)置將要返回的SYN+ACK報(bào)文的初始序列號(hào),設(shè)置過程如下:
高24位用cookie代替;
接下來的3比特位用客戶要求的最大報(bào)文長度MMS代替;
最后5比特位為t mod 32。
客戶端收到來自服務(wù)器SYN+ACK報(bào)文后,返回一個(gè)ACK報(bào)文,這個(gè)ACK報(bào)文將帶一個(gè)cookie(確認(rèn)號(hào)為服務(wù)器發(fā)送過來的SYN ACK報(bào)文的初始序列號(hào)加1,所以不影響高24位),在服務(wù)器端重新計(jì)算cookie,與確認(rèn)號(hào)的前24位比較,如果相同,則說明未被修改,連接合法,然后,服務(wù)器完成連接的建立過程。
SYN-cookie技術(shù)由于在連接建立過程中不需要在服務(wù)器端保存任何信息,實(shí)現(xiàn)了無狀態(tài)的三次握手,從而有效的防御了SYN Flood攻擊。但是該方法也存在一些弱點(diǎn)。由于cookie的計(jì)算只涉及了包頭的部分信心,在連接建立過程中不在服務(wù)器端保存任何信息,所以失去了協(xié)議 的許多功能,比如,超時(shí)重傳。此外,由于計(jì)算cookie有一定的運(yùn)算量,增加了連接建立的延遲時(shí)間,因此,SYN-cookie技術(shù)不能作為高性能服務(wù) 器的防御手段。通常采用動(dòng)態(tài)資源分配機(jī)制,當(dāng)分配了一定的資源后再采用cookie技術(shù),Linux就是這樣實(shí)現(xiàn)的。還有一個(gè)問題是,當(dāng)我們避免了SYN Flood攻擊的同時(shí),同時(shí)也提供了另一種拒絕服務(wù)攻擊方式,攻擊者發(fā)送大量的ACK報(bào)文,使服務(wù)器忙于計(jì)算驗(yàn)證。盡管如此,在預(yù)防SYN Flood攻擊方面,SYN-cookie技術(shù)仍然是一種有效的技術(shù)。
4.4 地址狀態(tài)監(jiān)控技術(shù)
地址狀態(tài)監(jiān)控的解決方法是利用監(jiān)控工具對網(wǎng)絡(luò)中的有關(guān)TCP連接的數(shù)據(jù)包進(jìn)行監(jiān)控,并對監(jiān)聽到的數(shù)據(jù)包進(jìn)行處理。處理的主要依據(jù)是連接請求的源地址。
每個(gè)源地址都有一個(gè)狀態(tài)與之對應(yīng),總共有四種狀態(tài):
初態(tài):任何源地址剛開始的狀態(tài);
NEW狀態(tài):第一次出現(xiàn)或出現(xiàn)多次也不能斷定存在的源地址的狀態(tài);
GOOD狀態(tài):斷定存在的源地址所處的狀態(tài);
BAD狀態(tài):源地址不存在或不可達(dá)時(shí)所處的狀態(tài);
具體的動(dòng)作和狀態(tài)轉(zhuǎn)換根據(jù)TCP頭中的位碼值決定。
(1)監(jiān)聽到SYN包,如果源地址是第一次出現(xiàn),則置該源地址的狀態(tài)為NEW狀態(tài);如果是NEW狀態(tài)或BAD狀態(tài);則將該包的RST位置1然后重新發(fā)出去,如果是GOOD狀態(tài)不作任何處理。
(2)監(jiān)聽到ACK或RST包,如果源地址的狀態(tài)為NEW狀態(tài),則轉(zhuǎn)為GOOD狀態(tài);如果是GOOD狀態(tài)則不變;如果是BAD狀態(tài)則轉(zhuǎn)為NEW狀態(tài);如果是BAD狀態(tài)則轉(zhuǎn)為NEW狀態(tài)。
(3)監(jiān)聽到從服務(wù)器來的SYN ACK報(bào)文(目的地址為addr),表明服務(wù)器已經(jīng)為從addr發(fā)來的連接請求建立了一個(gè)半連接,為防止建立的半連接過多,向服務(wù)器發(fā)送一個(gè)ACK包,建立連接,同時(shí),開始計(jì)時(shí),如果超時(shí),還未收到ACK報(bào)文,證明addr不可達(dá),如果此時(shí)addr的狀態(tài)為GOOD則轉(zhuǎn)為NEW狀態(tài);如果addr的狀態(tài)為 NEW狀態(tài)則轉(zhuǎn)為BAD狀態(tài);如果為addr的狀態(tài)為BAD狀態(tài)則不變。
4.5 服務(wù)器防范手段
在服務(wù)器要防止SYN洪水攻擊,還可以通過如下手段:
(1)防止SYN洪水攻擊
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters
SynAttackProtect REG_DWORD 0x2(默認(rèn)值為0x0)
說明:SYN攻擊保護(hù)包括減少SYN-ACK重新傳輸次數(shù),以減少分配資源所保留的時(shí)間.路由緩存項(xiàng)資源分配延遲,直到建立連接為止。如果synattackprotect=2,則AFD的連接指示一直延遲到三路握手完成為止。注意,僅在TcpMaxHalfOpen和TcpMaxHalfOpenRetried設(shè)置超出范圍時(shí),保護(hù)機(jī)制才會(huì)采取措施。
(2)縮短SYN Timeout時(shí)間
縮短SYN Timeout時(shí)間:由于SYN Flood攻擊的效果取決于服務(wù)器上保持的SYN半連接數(shù),這個(gè)值=SYN攻擊的頻度 x SYN Timeout,所以通過縮短從接收到SYN報(bào)文到確定這個(gè)報(bào)文無效并丟棄改連接的時(shí)間,例如設(shè)置為20秒以下(過低的SYN Timeout設(shè)置可能會(huì)影響客戶的正常訪問),可以成倍的降低服務(wù)器的負(fù)荷。
(3)負(fù)反饋策略
參考一些流行的操作系統(tǒng),如Windows2000的SYN攻擊保護(hù)機(jī)制:正常情況下,OS對TCP連接的一些重要參數(shù)有一個(gè)常規(guī)的設(shè)置: SYN Timeout時(shí)間、SYN-ACK的重試次數(shù)、SYN報(bào)文從路由器到系統(tǒng)再到Winsock的延時(shí)等等。這個(gè)常規(guī)設(shè)置針對系統(tǒng)優(yōu)化,可以給用戶提供方便快捷的服務(wù);一旦服務(wù)器受 到攻擊,SYN Half link 的數(shù)量超過系統(tǒng)中TCP活動(dòng) Half Connction最大連接數(shù)的設(shè)置,系統(tǒng)將會(huì)認(rèn)為自己受到了SYN Flood攻擊,并將根據(jù)攻擊的判斷情況作出反應(yīng):減短SYN Timeout時(shí)間、減少SYN-ACK的重試次數(shù)、自動(dòng)對緩沖區(qū)中的報(bào)文進(jìn)行延時(shí)等等措施,力圖將攻擊危害減到最低。如果攻擊繼續(xù),超過了系統(tǒng)允許的最 大Half Connection 值,系統(tǒng)已經(jīng)不能提供正常的服務(wù)了,為了保證系統(tǒng)不崩潰,可以將任何超出最大Half Connection 值范圍的SYN報(bào)文隨機(jī)丟棄,保證系統(tǒng)的穩(wěn)定性。
4.6 退讓策略
退讓策略是基于SYN Flood攻擊代碼的一個(gè)缺陷,我們重新來分析一下SYN Flood攻擊者的流程:SYN Flood程序有兩種攻擊方式,基于IP的和基于域名的,前者是攻擊者自己進(jìn)行域名解析并將IP地址傳遞給攻擊程序,后者是攻擊程序自動(dòng)進(jìn)行域名解析,但 是它們有一點(diǎn)是相同的,就是一旦攻擊開始,將不會(huì)再進(jìn)行域名解析,我們的切入點(diǎn)正是這里:假設(shè)一臺(tái)服務(wù)器在 受到SYN Flood攻擊后迅速更換自己的IP地址,那么攻擊者仍在不斷攻擊的只是一個(gè)空的IP地址,并沒有任何主機(jī),而防御方只要將DNS解析更改到新的IP地址 就能在很短的時(shí)間內(nèi)(取決于DNS的刷新時(shí)間)恢復(fù)用戶通過域名進(jìn)行的正常訪問。為了迷惑攻擊者,我們甚至可以放置一臺(tái)“犧牲”服務(wù)器讓攻擊者滿足于攻擊的“效果”(由于DNS緩沖的原因,只要攻擊者的瀏覽器不重起,他訪問的仍然是原先的IP地址)。
4.7 分布式DNS負(fù)載均衡
在眾多的負(fù)載均衡架構(gòu)中,基于DNS解析的負(fù)載均衡本身就擁有對SYN Flood的免疫力,基于DNS解析的負(fù)載均衡能將用戶的請求分配到不同IP的服務(wù)器主機(jī)上,攻擊者攻擊的永遠(yuǎn)只是其中一臺(tái)服務(wù)器,一來這樣增加了攻擊者的成本,二來過多的DNS請求可以幫助我們追查攻擊者的真正蹤跡(DNS請求不同于SYN攻擊,是需要返回?cái)?shù)據(jù)的,所以很難進(jìn)行IP偽裝)。
5 結(jié)束語
本文針對典型的Syn flood型的DDOS攻擊特點(diǎn),從實(shí)際攻擊案例入手,分析了現(xiàn)有常規(guī)防范技術(shù)的特點(diǎn)和不足,并在此基礎(chǔ)上提出了以“預(yù)防為主、及時(shí)發(fā)現(xiàn)、快速響應(yīng)、綜合解決”為原則的系統(tǒng)防范策略。通過綜合運(yùn)用防火墻技術(shù)、SYN-cookie技術(shù)、地址狀態(tài)監(jiān)控、服務(wù)器防范技術(shù)、退讓策略和負(fù)載均衡等技術(shù)手段,提出了系統(tǒng)的Syn flood攻擊安全防范解決方案。以該方案為指導(dǎo),在本項(xiàng)目的實(shí)際運(yùn)行中,確保了業(yè)務(wù)的持續(xù)進(jìn)行和完整性,取得了良好的效果。
參考文獻(xiàn):
[1] JINS,YEUNG DS.A covariance analysisModel for DDoS Attack Detection [A].IEEE International Conference on Communications[C].Paris,F(xiàn)rance,2004.
[2] J.Elliot,Distributed Denial of Service Attacks and the Zombie Ant Effect[J].IT Professional,Mar./Apr,2000,pp55-57.
[3] Submissions to the Paketstorm DDOS paper constest[EB/OL].http://packetstorm.securify.com/papers/contest/-visited 13.11.2000.
[4] 湯丹,匡曉紅,蔣光和. 運(yùn)營商抵御DDoS攻擊的安全解決方案[J].計(jì)算機(jī)工程與設(shè)計(jì),2006,(21).