一個“鎖表”損失800萬,運維被判5年半
近日,云頭條發(fā)布的“一個違規(guī)操作、損失 800 萬、被判五年半:運維夏某某致鄭大一附院智慧醫(yī)院系統(tǒng)癱瘓 2 個小時,判破壞計算機信息系統(tǒng)罪”一文引發(fā)了技術(shù)圈的熱議。
圖片來自 Pexels
事件經(jīng)過
夏某某任職北京中科某某科技有限公司,負責(zé)該公司為鄭大一附院開發(fā)的“軟件信息系統(tǒng)”的維護工作。
2017 年 10 月 31 日 20 時許,夏某某參與并直接操作了鄭大一附院“HIS 數(shù)據(jù)庫”的賬號密碼修改儀式,夏某某在未經(jīng)授權(quán)或許可的情況下,私自記錄了該賬號密碼。
后夏某某在未經(jīng)授權(quán)或許可的情況下,私自編寫了“數(shù)據(jù)庫性能觀測程序”和鎖表語句,并利用私自記錄的賬號密碼將該程序私自連接鄭大一附院“HIS 數(shù)據(jù)庫”,導(dǎo)致該鎖表語句在“HIS 數(shù)據(jù)庫”運行。
2018 年 12 月 24 日 8 時 13 分至 9 時 47 分期間,夏某某先后六次利用“數(shù)據(jù)庫性能觀測程序”連接“平臺數(shù)據(jù)庫”的“鎖定平臺掛號表”功能,將數(shù)據(jù)庫執(zhí)行鎖表命令。
該命令執(zhí)行后鎖定 fin_opr_register 表,使其不能進行其它活動,并導(dǎo)致“HIS 數(shù)據(jù)庫”鎖定。造成鄭大一附院鄭東院區(qū)、惠濟院區(qū)、醫(yī)學(xué)院院區(qū)所有門診、臨床計算機業(yè)務(wù)受到惡意語句攻擊,門急診掛號、門急診叫號、門急診支付、門急診藥房、門急診檢查、門急診檢驗等業(yè)務(wù)系統(tǒng)均無法正常操作,所有門診相關(guān)業(yè)務(wù)停止服務(wù),造成該醫(yī)院三個院區(qū)門診業(yè)務(wù)停滯近兩個小時,造成大量患者積壓在門診無法就診,嚴重影響醫(yī)院的正常醫(yī)療工作。
案發(fā)后,夏某某對其工作數(shù)據(jù)日志、辦公電腦進行了清理。2019 年 5 月 22 日,經(jīng)民警電話通知后被告人夏某某到鄭州市公安局鄭東分局投案。
經(jīng)鄭大一附院出具證明:由于惡意鎖表行為遭受損失等相關(guān)情況,包括:
- 從當(dāng)日收入來測算。當(dāng)日收入損失約為 800 萬元。
- 鄭東院區(qū)門診樓有 380 臺電腦無法進入醫(yī)生工作站正常工作,72 臺自助掛號機和 49 臺報到機無法正常工作;河醫(yī)院區(qū)門診樓有 1027 臺電腦無法正常進入系統(tǒng),86 臺自助掛號機和 55 臺報到機無法工作;惠濟院區(qū)門診部有 82 臺電腦無法正常進入系統(tǒng),11 臺自助掛號機和 4 臺報到機無法工作。
- 對該院智慧醫(yī)院項目造成巨大影響。
被害單位委托代理人楊某的陳述:
2018 年 12 月 24 日 8 點 17 分,我在鄭大一附院河醫(yī)院區(qū)辦公,我看到微信上三個院區(qū)的服務(wù)群里說門診業(yè)務(wù)系統(tǒng)卡住了,無法進行其他任何業(yè)務(wù)。
我和同事以及東區(qū)的技術(shù)人員一起通過工作電腦查詢門診業(yè)務(wù)系統(tǒng)卡機的原因和查詢數(shù)據(jù)庫。在查到 82 號和 89 號這兩個接口服務(wù)器時,發(fā)現(xiàn)數(shù)據(jù)包擁塞嚴重。
在 9 點的時候,我在我們的 PL/SQL 里面發(fā)現(xiàn)了一條鎖表語句(LOCKTABLE+表名字,也是掛號業(yè)務(wù)表),然后我們就執(zhí)行了終止語句(KILL)。
我們一共執(zhí)行了 6 次終止語句,門診業(yè)務(wù)才恢復(fù)正常,這個時候時間是 10 點左右。
后來我們將服務(wù)器工作日志導(dǎo)出發(fā)到東軟公司總部進行分析,分析的結(jié)果是發(fā)現(xiàn)那個鎖表語句是非程序中的運行語句,懷疑是人為操作,操控門診業(yè)務(wù)系統(tǒng)。
我們又請了鄭州市信大天瑞信息技術(shù)有限公司的技術(shù)人員進行了日志分析,分析的結(jié)果與東軟一致。
這 6 次鎖表語句的總共執(zhí)行時間是 1 小時 34 分,從 2018 年 12 月 24 日上午 8 點 13 分開始到 9 點 47 分結(jié)束。
這個鎖表語句影響了鄭大一附院的三個院區(qū),分別是鄭東院區(qū)、河醫(yī)院區(qū)和惠濟院區(qū)門診的所有業(yè)務(wù)。
在這 1 小時 34 分的時間內(nèi)三個院區(qū)的 15300 多個門診業(yè)務(wù)量無法工作,24 號當(dāng)天的業(yè)務(wù)量是 25528 個。這次的惡意鎖表現(xiàn)象嚴重影響了我們的日常門診工作。
據(jù)當(dāng)事人解釋:
2018 年 12 月 24 日 8 點左右,我在北京家中用公司給我配備的聯(lián)想電腦,遠程登錄到鄭大一附院的數(shù)據(jù)庫和小型機的數(shù)據(jù)庫,查看數(shù)據(jù)庫的運行情況。
大概 8 點 30 分,我看到微信群里河醫(yī)的門診系統(tǒng)卡頓,我擔(dān)心公司的綜合信息運用平臺也會出問題,就啟動了我自己編程的一個程序(程序名稱:數(shù)據(jù)庫性能觀測軟件)對我們公司的系統(tǒng)進行查看。
在我運行系統(tǒng)的時候發(fā)現(xiàn)我運行的這個程序在報錯,我就更改了幾次數(shù)據(jù)參數(shù),一直沒有運行成功我就主動放棄了,整個操作過程大概 20 分鐘。大概在 10 點多的時候微信群說河醫(yī)系統(tǒng)運行正常,我就去公司上班了。
12 月 25 日我們公司將小型機的數(shù)據(jù)庫的性能報告導(dǎo)出來,同事張某 2 將報告發(fā)給我一份,讓我?guī)兔Ψ治鰡栴}出現(xiàn)的原因。
26 日我分析的時候發(fā)現(xiàn)小型機分析報告中第 9 條語句看著有點眼熟,拿出來跟我自己做的編程進行了比對,結(jié)果和我運行程序的語句一樣。
我自己推斷可能是我運行的程序和性能報告第九條重疊,這個運行語句會造成鎖表。
接下來我就對我自己做的程序進行分析,發(fā)現(xiàn)自己寫的程序是有問題可能會將鎖表語句執(zhí)行到 HIS 數(shù)據(jù)庫中。
附錄要點如下:
①編寫的“his.exe”軟件(數(shù)據(jù)庫性能觀測軟件)沒有得到中科弘睿公司或者鄭大一附院的授權(quán)。
②從鄭大一附院授權(quán)角度講,我是沒權(quán)利使用上述賬號和密碼的。2017 年 10 月 31 日,鄭大一附院網(wǎng)絡(luò)安全加密實施儀式我在場,修改的 zdhis 的密碼由 3 個院領(lǐng)導(dǎo)分別掌握各自的部分,我當(dāng)時寫了個修改密碼的語句。這個語句在我電腦里有保存,我當(dāng)時存到一個 txt 文檔里。我存這個密碼的時候是我私下偷偷存的。
法院裁定
鄭州高新技術(shù)產(chǎn)業(yè)開發(fā)區(qū)人民法院認為:夏某某違反國家規(guī)定,擅自對計算機信息系統(tǒng)功能進行刪除、修改、增加、干擾,造成計算機信息系統(tǒng)不能正常運行,后果特別嚴重,其行為已構(gòu)成破壞計算機信息系統(tǒng)罪。
關(guān)于被告人夏某某及辯護人辯稱其沒有破壞計算機信息系統(tǒng)的主觀故意的意見,經(jīng)查,根據(jù)被告人夏某某供述、證人張某 1、張某 2、周某的證言可知,夏某某并無知曉使用鄭大一附院東軟 his 數(shù)據(jù)庫“zdhis”賬號和密碼的權(quán)限,其工作內(nèi)容并不需要登錄上述帳號。
夏某某在未經(jīng)授權(quán)的情況下,趁被害單位修改密碼之機私自記錄上述賬號和密碼,并私自開發(fā)應(yīng)用“數(shù)據(jù)庫性能觀測軟件”,私自使用該賬號密碼連接被害單位 his 數(shù)據(jù)庫,使其編寫的鎖表語句在 his 數(shù)據(jù)庫運行,導(dǎo)致被害單位的門診業(yè)務(wù)系統(tǒng)癱瘓,造成重大損失。
2018 年 12 月 24 日,夏某某在運行自編軟件報錯的情況下多次修改參數(shù)繼續(xù)運行,導(dǎo)致被害單位計算機信息系統(tǒng) 6 次執(zhí)行鎖表操作,系統(tǒng)近兩個小時無法正常工作,嚴重影響醫(yī)院正常工作。
夏某某作為專業(yè)技術(shù)人員,應(yīng)明知其違規(guī)操作可能造成被害單位計算機系統(tǒng)不能正常運行,而放任該結(jié)果的發(fā)生,屬于間接故意,應(yīng)對危害后果承擔(dān)法律責(zé)任,符合本罪的主觀構(gòu)成要件。
被告人夏某某破壞醫(yī)療領(lǐng)域提供公共服務(wù)的計算機信息系統(tǒng),致使生產(chǎn)生活受到嚴重影響,造成五十臺以上的計算機不能正常運行,造成經(jīng)濟損失超過五萬元以上,符合破壞計算機信息系統(tǒng)罪“后果特別嚴重”的規(guī)定,應(yīng)處五年以上有期徒刑。
辯護人辯稱不構(gòu)成本罪的意見不能成立。夏某某雖系主動到案,但未能如實供述犯罪事實,不能認定為自首。
裁判結(jié)果
被告人夏某某犯破壞計算機信息系統(tǒng)罪,判處有期徒刑五年零六個月。(刑期從判決執(zhí)行之日起計算。判決執(zhí)行以前先行羈押的,羈押一日折抵刑期一日,即自 2019 年 5 月 23 日起至 2024 年 11 月 22 日止。)
這里給大家普及一下破壞計算機信息系統(tǒng)罪,它是 IT 從業(yè)人員必須了解的安全守則:
《中華人民共和國刑法》第二百八十六條第一款:
【破壞計算機信息系統(tǒng)罪】違反國家規(guī)定,對計算機信息系統(tǒng)功能進行刪除、修改、增加、干擾,造成計算機信息系統(tǒng)不能正常運行,后果嚴重的,處五年以下有期徒刑或者拘役;后果特別嚴重的,處五年以上有期徒刑。
違反國家規(guī)定,對計算機信息系統(tǒng)中存儲、處理或者傳輸?shù)臄?shù)據(jù)和應(yīng)用程序進行刪除、修改、增加的操作,后果嚴重的,依照前款的規(guī)定處罰。
故意制作、傳播計算機病毒等破壞性程序,影響計算機系統(tǒng)正常運行,后果嚴重的,依照第一款的規(guī)定處罰。
單位犯前三款罪的,對單位判處罰金,并對其直接負責(zé)的主管人員和其他直接責(zé)任人員,依照第一款的規(guī)定處罰。
如何看待“鄭大一附院”系統(tǒng)違規(guī)操作損失 800 萬,肇事者被判五年半?我們先看看網(wǎng)友的評論:
下面,我們再來看看知乎網(wǎng)友對此事的深入分析,他表示夏同學(xué)確實沒說實話,這里聊兩點質(zhì)疑:
①默認連接了 HIS 數(shù)據(jù)庫,不知情?
相信寫過代碼的都會感同身受,尤其是夏同學(xué)這樣的運維界老鳥。如果連接的是客戶生產(chǎn)庫,那么“用戶名、密碼、url”等信息的配置和啟用,都會是在“蹦一根神經(jīng)、確認再確認”的狀況下完成,豈會兒戲?
夏同學(xué)的“數(shù)據(jù)庫性能檢測”軟件,事發(fā)前已經(jīng)私下驗證過,并跑了一年多時間(自述是 2017 年 7、8 月份寫的),而且是一個人寫的全部代碼。
按理說功能點和配置項再熟悉不過了,況且事發(fā)前 20 多天早就已經(jīng)將連接配置新增上去了,并不是當(dāng)天臨時的忙中出錯導(dǎo)致,怎么可能對“啟動后默認連接上 HIS 的數(shù)據(jù)庫”并不知情?當(dāng)初配置的時候是睡著了嗎?
②“數(shù)據(jù)庫性能檢測”,真的需要如此鎖表?
我寫的程序當(dāng)中造成鎖表執(zhí)行程序的語句是 lock table fin_opr_register in exclusive mode。
這個語句的功能是用來鎖綜合信息平臺 fin_opr_register 這個表的。鎖表的目的是為了模擬一下在高并發(fā)情況下的死鎖情況,測試一下我們公司綜合信息運用平臺的性能。
在重要客戶(鄭大一附院的門診量全國排名第一)早已上線多年的門診生產(chǎn)庫上,在早上的業(yè)務(wù)高峰期,用偷來的賬號私下連接,不僅玩模擬性能壓測,執(zhí)行的還是最高級別的排他死鎖?!!
這操作,如果智商正常,恐怕是想黃了公司吧?
這里普及下 Oracle 的鎖類型:
Oracle 的幾種鎖類型
PS:以上的數(shù)字越大,鎖的級別越高,影響的范圍和操作就越多。
in exclusive mode,意味著其他的更新事務(wù)只能被掛起,阻塞所有的更新操作會話。
在業(yè)務(wù)系統(tǒng)中,我確實極少見到主動排他鎖表的,一般在生產(chǎn)庫上使用 select for update 就已經(jīng)需如履薄冰了,夏同學(xué)這樣的 SQL 使用可以說是罕見的存在。
這樣的寫法會讓事務(wù)串行執(zhí)行,對于有并發(fā)的系統(tǒng)尤其是大型生產(chǎn)庫,還是業(yè)務(wù)高峰期,簡直是災(zāi)難性的“自殺式襲擊”,一旦執(zhí)行,故障的結(jié)局早已經(jīng)注定無可避免。
相信懂點 DB 的都明白鎖表的后果,何況是一個專業(yè)公司的專業(yè)運維人員。
另外,數(shù)據(jù)庫性能檢測,居然不是檢測數(shù)據(jù)庫及所在服務(wù)器的各項性能指標和日志反饋,也不是利用 Oracle 自帶的完善性能分析工具。
而是選擇在高峰期鎖死業(yè)務(wù)表來搞垮系統(tǒng)性能,理由是“測試一下性能”,這一波操作如果是正常思考,那么心大的境界實在可怕。
退一步說,不要忘了可是偷偷摸摸連的數(shù)據(jù)庫,即便真要性能壓測,在凌晨的夜里搞一搞,也不至于輕易被發(fā)現(xiàn),但無論如何也不需要鎖死表才能測到性能呀,再說 HIS 級的業(yè)務(wù)系統(tǒng)難不成真沒有報錯、告警的日志反饋?
這可是在中國醫(yī)院綜合指數(shù)科研實力排全國第 10 位的鄭大一附院,也是中國醫(yī)院信息化建設(shè)的先進單位呀!
感受有如下三點:
①安全規(guī)范和安全策略的設(shè)定缺失
生產(chǎn)庫即便沒有 VPN,也沒有設(shè)置遠程跳板機,至少也得做好白名單或可訪問的 ip list 設(shè)置吧?clientinfo 也需要有記錄 ip 的功能吧?
很明顯,這些都不到位,跳板機也缺失了,安全防范形同虛設(shè)。甚至都偷偷遠程訪問了一年多,連異地遠程訪問的 IP 記錄也沒有,心真是太大了,當(dāng)初項目數(shù)據(jù)安全方案和上線評估是怎么通過驗收的?監(jiān)理方是失責(zé)的。
②監(jiān)控告警功能不到位,問題排查能力滯后
都兩個小時了才發(fā)現(xiàn)問題所在?二天后當(dāng)事人才確認可能自己搞的?
數(shù)據(jù)庫一旦死鎖,服務(wù)器 CPU 占用和 DB 內(nèi)的 SQL 排隊會迅速飆升,業(yè)務(wù)系統(tǒng)大量報錯 SQL 超時,這樣的特征太明顯了。
在控制臺輸入一條百度到的排查命令也能很快定位到源頭 SQL,但 SQL 雖然被救火的技術(shù)人員 Kill 干掉過,但重現(xiàn)了幾次,最終還是放棄了,說明還是問題定位不自信,進而不敢再繼續(xù) Kill 掉問題 SQL,白白浪費了寶貴時間。
一旦發(fā)現(xiàn)這樣的異常且非業(yè)務(wù)內(nèi)置的 SQL,Linux 直接啟用防火墻,拒絕掉此 IP 的 TCP 鏈接,先恢復(fù)業(yè)務(wù)再慢慢排查,都是及時的應(yīng)對手段呀!
③對于類似安全意識淡薄,沒有安全規(guī)范和執(zhí)行能力的 IT 公司,應(yīng)該趁早剔除出圈
影響了兩個小時的門診,耽誤了多少有急癥的門診患者?這并不是 800 萬塊錢賠償?shù)氖虑椋且院芏嗳艘巡豢赏旎氐慕】低闯榇鷥r。
這已經(jīng)不是一個低智商的事故個例,很明顯是公司層面的整體意識問題,是安全意識和安全規(guī)范遠低于及格線的企業(yè)能力問題。
只可惜當(dāng)事的運維人員夏某某一個人扛下了所有,項目監(jiān)理方、東軟 HIS 系統(tǒng)架構(gòu)師、甲方聘請的專家評審組等等都或多或少有責(zé)任缺失。
對于此事,大家怎么看?運維如何避免面向監(jiān)獄編程?歡迎大家底部留言討論。
編輯:陶家龍
出處:云頭條,知乎綜合整理
鏈接:https://www.zhihu.com/question/389167387/answer/1170852426