網站頻繁的被駭客入侵,怎麼辦?

要找到問題才能想辦法囉~~
什麼作業系統?網路架構?
web server用那套?
程式是自行開發還是外面的套裝下去改的?
防火強擋了那些東西?(從外部直接掃port做檢查)
被入侵是受到什麼破壞?
被改資料庫?還是連網站程式都被改了?
如果只有資料庫被改的話~~程式有洞的可能性高一點~~
如果連程式都被換了~~被改了~~那要不是web server有問題就是你主機的權限被猜到~~
但都只是猜測~~沒有絕對的~~

如果只是公司形象頁面的話...最快的方式....把程式唯讀...
叫老闆多花點錢請專業的吧~~
jinseok wrote:
我們公司有一個網站,...(恕刪)


會被改資料庫的資料而且改的內容如果是這類的:">"那就一定是SQL Injection!

沒有別的方法只有改程式而已~~~

1. 不可以用組合的SQL statement,要用parametize的SQL Statement~~

這種的鐵定掛!
sqlstr = "SELECT * FROM Customers WHERE Email ='" + email + "' and Password='" + password + "'"

要改用Parametize:
SET rsObj = Server.CreateObject("ADODB.Recordset")
Set cmd = Server.CreateObject("ADODB.Command")
str = "SELECT * FROM Customers WHERE Email =? AND Password = ?"
set cmd.ActiveConnection = DBConn
cmd.ActiveConnection.CursorLocation=3
cmd.Parameters.Append cmd.CreateParameter("",200,1,255,email)
cmd.Parameters.Append cmd.CreateParameter("",200,1,255,password)
cmd.CommandText = str
rsObj.open cmd,,adOpenForwardOnly, adLockReadOnly, adCmdText

2.盡量使用Stored Procedure。

3.黑名單已經不合用了,反而Input validation要做好,例如資料長度檢查;數字欄位,如果輸入的是非數字就警告格式不對;Email欄位就要檢查是否符合Email格式;善用Regex檢查輸入值等。

3.單引號(')在存入資料庫前一定要先替換成兩個單引號(''),以避免惡意碼執行SQL指令。

4.一定要把所有的程式碼都review一次,其實也不難,用Notepad++之類的文書處理軟體,可以使用關鍵字Select、Insert或者Update搜尋整個目錄的檔案,找出有SQL statement的檔案再去做review就好。

5.只要是網頁程式都會有SQL Injection攻擊的可能,所以資料庫備份一定要做好,這樣才能將損害降低,最好是每周一次完整、其餘天數差異備份、每十五分鐘做一次Transaction Log備份。

以上希望可以幫到你!
看了一下上面這麼多人提供的意見,個人認為只有 hkc6389 大哥的意見比較有效果。
其他的光是砸錢買防火牆的建議都是沒用的。

我本身並不是專門寫網頁的工作人員,但是基本的是看的懂的。 本身是對 Linux 與 php 熟一些。
由 hkc6389 的建議中說到最好可以使用 stored procedure 之外,個人再補充幾點。

1. web server 跟 database 最好可以實體分離, 而所有的資料庫存取都需要以 stored procedure 來取代,更重要的一點是,你提供給 web server 來存取資料庫的 user 不可以是 superuser... 要設定一個小帳號只可以對 stored procedure 做 select 的動做,其他的權限都不要開。 這麼做的好處是當您的 web server 被入侵後,壞人也只是會被這個封閉的設定給局限住,沒辦法再做下一步的破壞。

2. ASP 我個人並沒有研究, 在 PHP 中,其實最好要把有危險性的 function 都關掉比方說 fopen, exec, passthru, eval, system, fwrite 等等等的都關掉,可以少很多途徑被壞人所利用。

3. 防火牆的部份其實不光光要檔從外面進來的連線。 也要檔從裡面到外面的連線。 因為有時候入侵的來源並不是外面直接連線到您的資料庫,而是您公司員工自己的電腦被開了後門,壞人是從裡面直接連進去資料庫做破壞的。 這部份如果在 Linux 中可以直接跑 iptables 就夠用了,不一定要用貴森森的 fw.
另外,資料庫與 web 本身應該把對外的連線都關掉, 可以防止在壞人取得控制全後,進一步的抓取其他的工具與後門過來裝。 gcc, base64 等的 hex 轉 binary 的工具也最好都移除掉。可以讓入侵者花更多時間在安裝它所需的工具或後門。


非常非常貴的防火牆如果不會使用,或是使用不正確。 其效能跟防護能力不會比正常設定了的軟體防火牆好。

找一個真正懂的人來協助檢查及改寫程式碼會比請一堆 "顧問公司" 來的有效果且更便宜。
名片上頭銜寫 "工程式" 或是 "顧問" 的,很多時候能力不如在背後乖乖的幹,叫不出名字的人還要差。

以上,希望對貴公司有幫助
1.報警了沒?
2.網站資料庫是否含有個資,如果有的話,要注意新版個資法已經上路了,希望不會是第一個被開刀的。
3.攻擊往往只是一個點,防護則是一個面,建議最好找專業的資訊安全專家幫你分析,才能找到問題的源頭,通常攻擊點不一定只會有一個。
4.保重。
googee wrote:
看了一下上面這麼多人提供的意見,個人認為只有 hkc6389 大哥的意見比較有效果。
其他的光是砸錢買防火牆的建議都是沒用的。

我本身並不是專門寫網頁的工作人員,但是基本的是看的懂的。 本身是對 Linux 與 php 熟一些。
由 hkc6389 的建議中說到最好可以使用 stored procedure 之外,個人再補充幾點。

1. web server 跟 database 最好可以實體分離, 而所有的資料庫存取都需要以 stored procedure 來取代,更重要的一點是,你提供給 web server 來存取資料庫的 user 不可以是 superuser... 要設定一個小帳號只可以對 stored procedure 做 select 的動做,其他的權限都不要開。 這麼做的好處是當您的 web server 被入侵後,壞人也只是會被這個封閉的設定給局限住,沒辦法再做下一步的破壞。

2. ASP 我個人並沒有研究, 在 PHP 中,其實最好要把有危險性的 function 都關掉比方說 fopen, exec, passthru, eval, system, fwrite 等等等的都關掉,可以少很多途徑被壞人所利用。

3. 防火牆的部份其實不光光要檔從外面進來的連線。 也要檔從裡面到外面的連線。 因為有時候入侵的來源並不是外面直接連線到您的資料庫,而是您公司員工自己的電腦被開了後門,壞人是從裡面直接連進去資料庫做破壞的。 這部份如果在 Linux 中可以直接跑 iptables 就夠用了,不一定要用貴森森的 fw.
另外,資料庫與 web 本身應該把對外的連線都關掉, 可以防止在壞人取得控制全後,進一步的抓取其他的工具與後門過來裝。 gcc, base64 等的 hex 轉 binary 的工具也最好都移除掉。可以讓入侵者花更多時間在安裝它所需的工具或後門。


非常非常貴的防火牆如果不會使用,或是使用不正確。 其效能跟防護能力不會比正常設定了的軟體防火牆好。

找一個真正懂的人來協助檢查及改寫程式碼會比請一堆 "顧問公司" 來的有效果且更便宜。
名片上頭銜寫 "工程式" 或是 "顧問" 的,很多時候能力不如在背後乖乖的幹,叫不出名字的人還要差。

以上,希望對貴公司有幫助...(恕刪)

找人要錢

我做過微軟的debugger

這種東西沒30萬不接的

細的東西懂,十幾年以及開發紅帽系統的經驗

而且摸過一次,人家還懷疑你殖後門,到時被告要律師費

jinseok wrote:
其實一開始到公司上班...(恕刪)


找那麼多不是理由的理由

工作是你選的,公司是你挑的

不是網友幫你挑的,把這些理由說給你老闆聽吧

網友不是你的發牢騷對象
樓主阿
這年頭hacker入侵都是用合法管道(port 80 / 443)做不合法的事情
一般Firewall /IPS /IDS都只能管到OSI Layer 3 or 4底層的Tcp / IP / port
這完全沒有用啦
您真正需要的是WAF solution + Code Review / Upgrade
Code Review / Upgrade屬於開發商的事情 (但廠商10個有9個半不會鳥你)
WAF應該是公司自己準備
沒錢的話也有Free WAF Solution
Apache可以加modsecurity模組
IIS可以裝urlscan
再透過滲透測試找到弱點後設定WAF rule擋掉入侵
這才是真正解法

googee wrote:
看了一下上面這麼多人...(恕刪)


感謝您的補充,的確忘記提到SQL帳號的權限,應該給予可執行的最低權限就好了。例如只給datareader, datawriter跟execute stored procedure的權限。
有沒有另一種可能?

就是上次資料修復的時候

SQL被注入的地方,不明語法沒有修復得很完整

也就是沒有清乾淨的意思

所以才又讓壞人循著那個語法進來


文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!