關於本報

自由軟體鑄造場電子報
報主:中央研究院資創中心
創刊日期:2004-06-03
發報頻率:雙週刊
訂閱人數:3,349
官網:

近期電子報


訂閱便利貼


將貼紙語法置入您的網站或部落格當中, 訪客可以輸入mail取得認證信,並按下確認連結後, 快速訂閱您的報紙。
預覽圖
訂閱自由軟體鑄造場電子報報
自由軟體鑄造場電子報
-----------------------------------------------------------------------------------------------------
Plurk FaceBook Twitter 收進你的MyShare個人書籤 MyShare
  顯示內嵌語法

自由軟體鑄造場電子報
發報時間: 2010-12-28 16:00:00 / 報主:OSSF
[公益聯播]新聞專區
本期目錄
[法律專欄] 自由軟體專案授權方式的轉換(下):新版本號另以更改後的授權方式釋出
[OSSF專欄] GPL 的授權規則與技術工程遵循之道–講者 Harald Welte 與 Armijn Hemel 會後專訪
[技術專欄] 以 scanlogd 偵測埠掃描事件
[源碼秘技] 用 Android 手機充當電腦的無線鍵盤及滑鼠
[源碼報報] Java 規格投票落敗 Apache 軟體基金會退出 JCP 執委會
[源碼報報] PrimeSense 釋出微軟 Kinect 官方開放源碼驅動程式
[源碼報報] Netflix 暢談開放源碼應用
[源碼報報] Oracle 宣稱擁有 Hudson 商標權
[源碼報報] 天網誕生了嗎?美國空軍的超級電腦由 PS3 + Linux OS 組成
[OSSF新聞] 第一次的面對面接觸 - OpenFoundry 使用者聚會
[社群花絮] Drupal 7.0 即將於 1 月 7 號舉行發行派對,歡迎有興趣的朋友共同參與!
[新進專案] 新進專案列表 12/27
[法律專欄] 自由軟體專案授權方式的轉換(下):新版本號另以更改後的授權方式釋出
文/葛冬梅、林誠夏


本文上篇的文章連接頁面如右:http://www.openfoundry.org/tw/legal-article-/8195-2010-11-22-18-38-45

【新版釋出、授權更改】

那麼、既然我們無法用事後撤銷的方式來改變已經釋出的自由軟體授權狀態,當日後專案有授權轉換的需求產生時,究竟應該透過怎麼樣的做法來達到授權變更的目的呢?目前實務上推行的方式,簡單來說就是八個字:「新版釋出、授權更改」。

顧名思義,「新版釋出、授權更改」指的是利用專案釋出新版本號的軟體時,為此新版本號選用更改後的授權條款,這樣的作法並不會影響原釋出版本的授權狀態,但透過新版本號釋出的軟體程式碼,就可以適用轉換過後的新授權方式來讓人使用。舉前例來說、程式 A 到第 1.0 版為止都是採用 GPL 第 2 版(GPL2)來授權 ,經修改之後 A 專案可以特別標注為第 1.1 版,此時若是 1.1 版的修改者本身就是 A 專案的著作權利人,或是得到 A 專案原著作權利人的同意,那就可以將新版本號的 1.1 版改用 GPL2 以外的條款來授權散布,例如改採 LGPL2 或是 BSD 類別的授權條款,或者是乾脆將新版本號轉為採用 GPL2 與商業條款並行的雙重授權模式(dual-licensing model)也可以(註一)。並且、A 專案在 1.0 版與 1.1 版之間的差異可大可小,有時甚至兩個版本號的程式碼完全相同亦沒有問題,因為此種作法的重點就是在於讓使用者清楚辨識同一個自由軟體專案的不同版本號,並明白了解該專案不同的版本號就代表了「不同的授權方式」,從而日後運用上不會產生授權混淆的錯誤。

【利用新版本號釋出專案程式碼的實益】

透過「新版釋出、授權更改」方式,已經釋出的自由軟體專案程式碼,就可以事後完成授權轉換,但運作此種方式最重要的前提要件就是,新授權方式的轉換者本身必須是該專案全部程式碼的合法權利人,或至少已經得到權利人明示允許對此專案進行授權轉換,因為這種方式實質上其實是讓 1.0 版與 1.1 版新舊版本同時散布的「雙重授權模式」,願意以原授權方式得到程式原始碼的使用者,可以持續以舊授權模式利用該專案的 1.0 版,而接受新授權方式的使用者,也可以改用新的授權模式使用 A 專案最新的 1.1 版本。當然、此時很多自由軟體專案的開發者就會問,以「新版釋出、授權更改」的方式進行專案授權方式的轉換究竟有何實益?因為形式上似乎只是平行增加了 A 專案的授權方式,而若是使用者堅持延用舊的授權方式來使用該專案的程式碼,似乎也並沒有有效辦法能誘導使用者改用新的授權方式來使用這個專案?其實不然、前面雖然提到 1.0 版本的程式碼可以與轉換過授權的 1.1 版本完全相同,但實務上的狀況是,該 A 專案的權利人多會擴充或刪減該程式的功能後,再以 1.1 版本的方式釋出,在這種狀況之下,這些新編寫進來的最新功能,使用者就只能透過 1.1 版本的新授權方式才能取得,所以雖然 1.0 版本的授權方式並沒有辦法被權利人事後撤銷,但隨著 A 專案不斷的被增裨與改寫,多數使用者都會接受以新版本號的授權方式來使用該專案後續完成的程式碼,實質上來說、這就是一種自然演繹的引導方式。

【利用新版本號變更條款文字的實例】

其實、以版本號的變更來宣告授權內容的變更,在自由軟體授權領域裡幾乎已形成群體共識。舉 GNU 計畫另一款重要的授權條款 LGPL 為例,許多人都知道就版本別來看,LGPL 近年有 LGPL2、LGPL2.1 與 LGPL3 三個版本,但是大概很少人知道 LGPL 第 2 版的內容與 2.1 版的內容幾近完全相同,不同之處僅在於條款全名有所更改,並稍微調整了一些介係詞與相關的技術名詞(註二)。既然新舊版本的差異那麼的小,那麼為何世上會有文字內容幾近完全相同的 LGPL2 與 LGPL 2.1 版本的授權條款呢?其實這個條款版本號的修改,是 GNU 計畫的創立人 Richard Stallman 為了要將 LGPL 條款的全名,由最初的 "GNU Library General Public License",改寫為 "GNU Lesser General Public License",因為 LGPL 最初的全名 "GNU Library General Public License",會讓許多的程式開發者誤以為只要是函式庫程式就只能採用 LGPL 來授權,而不能採用 GPL 這種更為開放的授權方式,對於 Richard Stallman 來說,這與他初始撰立 LGPL 的預期有所衝突(註三),所以為了將授權條款名稱裡的 "Library" 改為 "Lesser",這世上就多了與 LGPL2 條款內容幾近完全相同的 LGPL 2.1,這就是一個透過版本號的變異來宣告授權文字有所變化的實例,從這個例子我們可以看到,實務上自由軟體授權條款內容變異時的嚴縝性,以及版本號在自由軟體授權領域裡的靈活運用。

【以 Qt 為實例進行授權轉換的說明】

「新版釋出、授權更改」的實例不在少數,目前因併購而歸屬於 Nokia 旗下的 Qt 就是一個相當著名的例子。Qt 是一個跨平台的圖形界面開發工具,最早由一家挪威公司 Trolltech 所開發並擁有著作權利,初期 Trolltech 透過自行撰寫的 Q Public License(QPL)與商業條款來雙重授權這個專案。不過因為 QPL 與 GPL2 在授權上並不相容,但自由軟體領域裡以 GPL2 授權的元件卻愈來愈多,所以為了調和 Qt 與這些 GPL2 授權元件的相容性,2005 年在發布 Qt 第 4 版(Qt/Windows 4)的時候,Trolltech 捨棄 QPL 改採 GPL2,自此以後 Qt 改為 GPL2/商業條款併行的雙重授權模式,後來隨著 2007 年 GPL3 定稿的發布,Qt 也透過程式改版的動作,將新版本號的 Qt 改為 GPL3/商業條款併行授權。不過這樣的 GPL3/商業雙重授權模式維持不久,因為之後 Nokia 公司收購了 Trolltech,並在 2009 年釋出 Qt 第 4.5 版時,加入了 LGPL2.1 授權條款為另一個使用者可選擇的授權模式(註四),自此 Qt 的授權狀態變為 GPL3/LGPL2.1/商業三重授權模式(註五)。回顧過去十年,Qt 所適用的自由軟體授權條款一變再變,不過這些改變都是在程式改版升級的時候加以進行,並且僅僅適用於新版與未來版本,過去已經發布的舊版 Qt 軟體,在授權內容上不會有任何的改變,這是一個「新版釋出、授權更改」的鮮活實例,同時、也是一個不因授權轉換而影響前版軟體授權狀態的最佳例證。

【跳脫傳統框架以建立長久良性的授權模式】

自由軟體所採用的是一種不同於傳統的授權模式,若是不多做論理直接採用既有的法律架構來處理相關問題的話,將有可能產生悖離現實運作的結論,進而引發許多難以解決的棘手問題。而在面對自由軟體專案授權方式轉換這一個問題的時候,鑑於目前並沒有相關的司法判決,因此自由軟體的授權特性與軟體社群的運作習慣,就顯得格外的具有參考重要性。如同之前所評論的,自由軟體授權條款具有授權給公眾利用後不間斷散布的特性,再加上經過十多年的實務運作,全球絕大多數的軟體使用者已經對於自由軟體的授權模式,產生不會向後撤銷的信賴共識,因此筆者透過此篇文章分享這個議題的論理觀點:自由軟體專案的授權態樣原則上不可嗣後撤銷,否則將會造成難以解決的全球性軟體授權混亂,而若是已釋出的自由軟體專案想要改變授權方式的話,則可以採用「新版釋出、授權更改」的方式,透過最新版本號的軟體釋出,逐步地改變專案程式碼在未來的授權方式。而也唯有在這樣的運作機制之下,全球的軟體開發者可以在互信互助的基礎下,共同維持良性的自由軟體開發循環模式,讓已經在全球發展近二十多年的自由軟體共同開發制度,繼續穩定而長久地運作下去。

註一:雙重模式的說明可以參見:林誠夏,自由軟體的商業應用模式(下)-雙重授權篇,自由軟體鑄造場電子報第 83 期,http://www.openfoundry.org/tw/legal-article-/1056-2010-07-15-10-36-02;林誠夏,20070130-Dual license-雙重授權模式的美麗與哀愁,http://lucien.cc/?p=62
註二:LGPL 第 2 與 2.1 版的英文全文請參見:http://www.gnu.org/licenses/old-licenses/old-licenses.html#LGPL
註三:從 Richard Stallman 的角度出發,他希望世上所有的軟體專案都能夠以 GPL 授權條款釋出散布,但因為函式庫的程式多以連結的方式供其他程式讀取資訊,若是全以 GPL 的方式釋出的話,那授權拘束性的涵攝範圍就會非常的大,這會導致許多自由軟體專案的程式開發者怯步而避免使用 GPL 來釋出其專案,所以退而求其次的提供授權拘束性範圍較窄的 LGPL 來讓這些專案開發者選用,但仍然期盼認同其理念的專案開發者,能適時的以 GPL 授權條款來釋出其所撰寫的函式庫程式。
註四:在 Nokia 公佈這項消息的新聞稿中,第三段第一句的文字就明確表示,Qt 不但繼續提供商業授權版本,所有過去版本的授權狀態也不會有任何的改變,該段原文:"Qt 4.5 will also be available under commercial licensing terms, while licensing for previous versions of Qt remains unchanged.",新聞稿的原文連結請參照:http://qt.nokia.com/about/news/lgpl-license-option-added-to-qt
註五:Qt 官網:http://qt.nokia.com/。QPL 英文全文內容請見:http://www.opensource.org/licenses/qtpl.php/。Qt 過往的授權歷史複雜,本文僅擷取重點加以說明,進一步資訊可以參見:http://en.wikipedia.org/wiki/Qt_(framework)#History。目前三重授權的介紹與分析可以參考:http://blog.linux.org.tw/~jserv/archives/002085.html
[OSSF專欄] GPL 的授權規則與技術工程遵循之道–講者 Harald Welte 與 Armijn Hemel 會後專訪
林誠夏、林懿萱/採訪


自由軟體鑄造場於 2010 年 12 月 2 日所舉辦「自由軟體授權應用及商業建議二十講系列」第四講的活動已經圓滿落幕。此次活動邀請了 gpl-violations.org 組織的兩位核心成員 Harald Welte 以及 Armijn Hemel,針對商業運用 GPL 授權元件的義務性規定及產品授權狀態的查核進行說明與演示,演講內容的全程錄影與簡報可透過右列連結頁面取得:http://www.openfoundry.org/tw/workshop/details/115-the-rule-of-the-GPL-and-Its-compliance-engineering (註一)。而在會後、鑄造場更針對兩位講者的演講內容與開發背景,擬具了幾個幫助國人深化了解 GPL 授權議題的採訪問題,以下即為會後專訪內容的濃縮節本。

問題 1:請問您是什麼時候開始您的第一個自由軟體專案?而到目前為止,參與自由軟體專案開發的過程裡,最讓您難忘的經驗又是什麼?

Harald Welte:這其實是一個蠻難簡單回覆的問題,基本上呢,一開始就是下載了某些自由軟體的元件來用,然後也因為自己的需求而提報了某些功能(Feature)到程式的開發論壇,慢慢的算是參與了這些專案的開發,真的要說在程式寫作方面有所貢獻,應該是一個郵件伺服器(Mail Server)的相關專案,時間上的話,統括就是開始於青少年時代,那麼關於難忘的回憶,想到的是加入 iptables 專案的程式寫作,這帶給我密集式開發專案的相關經驗。

Armijn Hemel:沒錯、這是一個不好回答的問題,事實上我認為自己在自由軟體專案開發方面的參與程度不像 Harald 那麼多,雖然一直有在參與,但很難具體界定是集中參與哪一個專案,目前已經釋出的 Binary Analysis Tool(註二)算是一個我完整參與的開放原始碼專案。

問題 2:現在產業界很多公司,有時會因為時程壓力而選用自由軟體授權元件來進行產品開發,然後在後續散布上,卻沒有完全遵照這些自由軟體元件的授權規則,其中一部份的原因,也許是部份的軟體開發工程師認為這樣的行為日後不會曝光,或者說、存著僥倖的心理認為曝光後可能也無大礙,面對這些狀況,您認為元件的權利人提出相關的民事或刑事訴訟,會是最好的解決方式嗎?而若是有這樣的爭議案例發生在歐洲之外,您有評估過跨國提起訴訟的可能性嗎?

Harald Welte:當然、如果覺得侵權的事態嚴重,是有想過直接到產品生產國提出訴訟的想法。然而、查緝自由軟體專案的侵權事件其實也並非我們每天執行的業務,原則上、我們目前還是針對販售到歐洲的侵權產品來進行處理。而關於訴訟是不是最好的解決方式,嗯…應該這麼說,交通規則就是在那邊,比方說超速照相,超速照相攝影機的設置目的,不是要照到每一個超速行車的駕駛,但如果世上完全沒有超速照相攝影這個機制,那許多人就會毫無顧慮的超速駕駛,而導致交通狀況愈來愈差,所以必要的查緝與舉報對於自由軟體的侵權利用狀況而言,是不得不然的回應。

Armijn Hemel:我認為事情不一定非得從壞處(Bad side)來著眼,其實我們鼓勵商業公司盡量的利用自由軟體授權的元件來進行產品開發,因為這樣才是符合自由軟體元件重覆使用(Reuse)與持續改寫改進(Rewrite)的道理。然而、必須要特別強調的是,自由軟體授權元件的利用循環不應該是一條單向輸送的單行道(One way road),當你可以自由地下載、取得這些程式原始碼來加速產品開發的同時,不要忘了也要適當地釋出你所改寫的程式原始碼給收受後續版本的使用者,這樣才能進入自由軟體程式開發「取予和諧(Taking and giving)」的良性循環。

問題 3:自由軟體鑄造場定期會應國內企業的邀請,至各公司內部進行自由軟體授權議題的說明演說,而這些演說的內容又多以 GPL 授權條款的相關義務性規定為核心議題。從您的觀點來看,這樣的演說活動會有助於產業界加深對於自由軟體授權規則的了解,並協助他們遵循相關的授權規定嗎?

Harald Welte:當然、這樣的作為對於提升商業公司對自由軟體授權條款的了解必然是有所幫助的。但另一個問題就是,在場與講者互動的會是哪一類性質的參與者?因為很多軟體工程師在產業體制裡並不具有決策高度,就我們的經驗來說,如果對於某項產品的授權狀況有所疑問,也許要找到該項產品的產品經理才是一個適合對話的人選,產品經理對於產品的銷售方針、佈局,以及後續維護具有比較高的掌握權能,也就是說、對話應該要找到適合對話的對象。

問題 4:如果某個軟體專案的權利人並不是使用雙重授權(Dual-licensing model,註三)的方式來釋出他的專案程式碼,而單單僅用 GPL 的授權方式來散布這個軟體,當有使用者不遵守 GPL 的規定而侵權利用這些程式碼時,您認為權利人提出民事訴訟並獲得適當賠償金的機率高嗎?

Harald Welte:我想這個問題不大,如果確實有侵權利用的行為存在,而權利人又可以適當的證明這點的話。

Armijn Hemel:似乎在一些英美法系國家的法律會比較要求損失金額的證明,之前在歐洲自由軟體法律論壇(The European Legal Network,註四)裡也有過類似的討論串,但無論如何我們並不是執業的律師,而是自由軟體專案的軟體工程師,所以這個問題的答案我們持樂觀態度,但沒有辦法給太過深入的評論意見。

問題 5:在 Harald 的簡報中提到:「從 GPL 的授權理念出發,若是商業使用 Linux 與其他自由軟體的元件,但卻不容許社群參與者協同研究修改這些程式,某種程度也算是一種惡意的規避行為。」但是一般的狀況下,商業公司多會傾向先關心自身的產品利益,而不會將自由軟體授權條款的義務性規定放在第一優先的順位,如果這樣的狀況一再發生,從您的觀點來看,我們該如何媒合產業界與自由軟體開發社群走向互信互諒之途,而不是彼此敵視呢?

Harald Welte:我想有一個很重要的前提就是,產業界應該放寬自我的視野,而不是僅僅爭逐被傳統觀點侷限的所得利益,因為那樣會讓自身淪於短視(Short sighted)而忽視了公司可以得到的更大利益。如果產業界能了解善用自由軟體元件來加速產品開發所帶來的好處,則提供產品原始碼的要求與公司本身的利益就不會是零與一的競合。並且,公司的決策團隊也應該要正視自由軟體商業應用的相關發展,實務上我們常常接觸到許多商業公司的軟體工程師,他們本身對於自由軟體授權規則並非一無所知,而且也很樂意協助我們將產品不當利用 GPL 程式碼的狀況回報到上級單位,但往往回報之後的狀況是管理階層全無回應,這是一個最糟的狀況。所以關於建立產業與軟體社群之間順暢的合作關係,我會建議產業公司應該要有專責的部門來處理自由軟體授權的相關議題,這樣不但有助於提升產業公司本身的商譽與公共關係,也可以有效的導入社群的開發能量與群體創意。

問題 6:其實有不少今天的與會朋友,私下詢問我們這個問題,那就是像兩位這樣的自由軟體專案開發者,通常是怎麼賺取支應生活開銷所需的相關費用呢?

Harald Welte:諮詢費用對於自由軟體開發社群成員而言,是可能產生收益的項目之一,現在世面上不乏善用自由軟體授權元件來加速產品開發的產業公司,而如果你對自由軟體授權元件的開發知識與運用技術擁有較高的掌握程度,就可以協助這些產業公司調校、改寫相關元件的功能,讓產品的開發時程能更有效率的縮短,以在市場上獲取更大的收益。

Armijn Hemel:我想重點之一是先讓別人認識到你的軟體開發能力,讓他們對你所能提供的技術產生興趣,這樣就可以產生後續協同開發的合作關係。

問題 7:兩位有其他建議或是評論想透過這篇專訪來向自由軟體鑄造場電子報的讀者傳達嗎?這個傳達的對象可以是臺灣的產業公司,也可以是在地的自由軟體開發社群。

Harald Welte:我想最後要補充說明的就是,自由軟體的運用和開發不僅僅只是一種開發方式的改變而已,GPL 授權有它背後存在的開放理念,如果不能了解這些理念,產業界將很難順暢地與軟體社群之間有協同合作的關係,而若是當產業界開始了解這樣的開放理念後,他們會發現自由軟體的開發循環,將確實可以為產業的收益帶來相當程度的增裨與好處。

註一:自由軟體鑄造場會將二十講系列的活動花絮、影片以及講師簡報放置於 OpenFoundry 上該活動的報名網頁上面,供需要的使用者自行下載觀看,前三講的下載網址分別為:
1、2009.11.14 http://www.openfoundry.org/tw/workshop/details/58--1
2、2009.11.28 http://www.openfoundry.org/tw/workshop/details/59--2
3、2010.05.11 http://www.openfoundry.org/tw/workshop/details/84

註二:Binary Analysis Tool 是一套檢測專案程式碼授權狀態的軟體程式,採用 Apache License 2.0 的方式對外釋出,任何人皆可依 Apache License 2.0 自由地下載、安裝,並後續修改這個程式,其專案首頁連結如右所列:http://www.binaryanalysis.org/

註三:在自由軟體授權領域裡,雙重授權模式這樣的用語通常意指「權利人同時將專案的程式碼以商業授權與自由軟體授權二種授權方式併行散布」,使用者如果想要得到商業授權的版本,可以直接向該權利人洽談商業授權的使用條件與費用,但同時亦可以下載免徵授權金的自由軟體版本來使用,但如果是以自由軟體授權方式取得這些程式碼,後續再修改散布該程式時,就需要受到該自由軟體授權條款的拘束。而以雙重授權方式釋出的軟體專案,在發現侵權利用的行為時,因為此專案本身早已律定了商業授權模式的收費標準,此時就能轉而利用商業授權的收費標準來舉證損失金額,於是乎在司法爭訟上,往往具有要求較高賠償金數額的求償地位。

註四:歐洲自由軟體法律論壇是由歐洲自由軟體基金會(Free Software Foundation Europe)所設立並營運的法律論壇,其匯集並傳達自由軟體授權運用方面的各項知識,並透過反覆討論的方式以凝聚參與者的共識,其網頁連結如右所示:http://www.fsfe.org/projects/ftf/network.en.html
[技術專欄] 以 scanlogd 偵測埠掃描事件
老薯條(http://vulscan.wynetech.com.tw)/文


前言

所有犯罪行為通常具有一定的行為模式,即確立目標 → 勘察環境 → 決定適當的工具 → 攻擊。網路攻擊也不例外,當駭客決定目標後,即會以掃描工具來針對目標進行掃描,而後再根據掃描結果決定攻擊方式來進行攻擊。因此,如果能儘早得知進行掃描的惡意來源 IP,即可在惡意攻擊者進行攻擊之前來進行防堵,進而降低系統的危害,在本文中,筆者將介紹一套掃描偵測工具(scanlogd,官方網站為:http://www.openwall.com/scanlogd/),用來偵測實施惡意連接埠掃描的來源 IP,以便管理者能提早因應相關情況的發生。

作業系統掃描原理

在駭客決定攻擊目標後,第一個步驟往往是先行探測目標主機的作業系統。由於每一家作業系統對於封包的處理方式均不同,探測軟體即可利用此種特性來辨識出不同的作業系統。由於此種方式就像人類的指紋一樣,所以又稱為「作業系統指紋 (OS Fingerprint)」辨識,作業系統探測方式可分為主動式及被動式,如下所述:

主動式:

探測軟體透過傳送特別打造的 TCP,UPD 或 ICMP 封包至被探測主機端,再根據被探測主機回傳的封包特徵,來辨識出該主機的作業系統。此種工具以 nmap 為代表。官方網址為:http://nmap.org/

被動式:

探測軟體並不主動傳送封包至被探測主機上,而是被動的監看往來封包,籍由往來封包的特徵來辨識出作業系統,此種探測軟體以 p0f 為代表。官方網址為 http://lcamtuf.coredump.cx/p0f.shtml。在本文中將不多加探討此種探測技術,請有興趣的讀者自行參閱相關說明。

接下來,我們繼續說明主動式作業系統的辨識原理:
  • FIN 封包探測或 XMAS 封包探測
掃描軟體送出一個 FIN 封包(或任何未設置 ACK 或 SYN 標記位元的資料包)至欲被探測的主機上,在正常的 TCP/IP 規範 (RFC793) 中,對於此類封包是不予理會的,但在某些的作業系統上(如 windows 系統 cisco...等等)將會回應一個 Reset (RST) 封包,掃描軟體即可利用此種特徵來辯識出作業系統。由於此種封包在封包表頭上的長相就像一顆聖誕樹一樣,所以又稱為 XMAS(聖誕節)的封包探測。
  • Bogus(偽造)封包探測
掃描軟體在 SYN 封包的表頭上 (header) 設置一個未定義的 tcp 旗標 (flag) 值,在正常的 TCP/IP 規範規定對於此類封包是不予理會,但在一些作業系統上在遇到此類封包 (SYN+Bogus) 時,將會回應 Reset 封包來重置連線。掃描軟體即可利用此種特徵來辯識出作業系統。
  • 以 Tcp initial window(tcp 初始化視窗)探測
Tcp initial window 是一種控制網路流量的機制。在傳送的過程中,如果已傳送了視窗 (window) 大小的封包,即表示需接收到對方的 ack 回應後,才能繼續傳送,但在某些作業軟體上,視窗 (window) 的長度是固定的,所以掃描軟體可利用此種特徵來辨識出作業系統。
  • ICMP TOS (Type Of Service) 判別
ICMP 全名為 Internet Control Message Protocol(網際網路訊息控制協定),ICMP 基本上是一個錯誤偵測與回報的機制,通常是用來檢驗網
路的連線狀態與連線的正確性。常用的 ICMP 類型說明如下表:

Icmp類型 說明
0 Echo Reply (代表一個回應信息)
3 Distination Unreachable (表示目的地不可到達)
4 Source Quench (當 router 的負載過高時,此類別碼可用來讓發送端停止發送訊息)
5 Redirect (用來重新導向路由路徑的資訊)
8 Echo Request (請求回應訊息),我們一般使用ping指令確認對方主機是否有回應,即使用此類型送出Request要求。如 果對方存在,即會回應類型0的Echo Reply封包。
11 Time Exceeded for a Datagram (當資料封包在某些路由傳送 的現象中造成逾時狀態,此類別碼可告知來源該封包已被 忽略的訊息)
12 Parameter Problem on a Datagram (當一個 ICMP 封包重複之前的錯誤時,會回覆來源主機關於參數錯誤的訊息)
13 Timestamp Request (要求對方送出時間訊息,用以計算路由時間的差異,以滿足同步性協定的要求)
14 Timestamp Replay (此訊息純粹是回應 Timestamp Request 用的)
15 Information Request (在 RARP 協定應用之前,此訊息是用來在開機時取得網路信息)
16 Information Reply (用以回應 Infromation Request 訊息)
17 Address Mask Request (這訊息是用來查詢子網路 mask 設定信息)
18 Address Mask Reply (回應子網路 mask 查詢訊息的)

ICMP 封包除了可用來確認主機的狀態外,也可利用探測作業系統的種類,探測程式可利用 ping 程式送出一個 icmp echo 的請求至要探測的主機上,再由對方主機回的 echo reply 封包中的 TTL (Time To Live) 的欄位值(不同作業系統對於 TTL 欄位值的設定都不一樣)來初步判斷主機的作業系統。有興趣的讀者可利用 ping 指令來觀察 linux 系統及 windows 系統回傳封包的 TTL 欄位,如下所示:

ping 來測試其回應值,即可發現兩種作業系統所回應封包中的 TTL 值明顯不同。掃描軟體即可利用此種特徵來初步區分作業系統的種類,如下圖為 linux 系統及 windows 系統的測試畫面:
[技術專欄]  以 scanlogd 偵測埠掃描事件
▲圖1

[技術專欄]  以 scanlogd 偵測埠掃描事件
▲圖2

由上可明顯的看出不同的作業系統會設定不同的 TTL 值,探測軟體即可利用此種特性來初步判別作業系統的種類。
另外一種探測方式是利用管理者不當的設定系統組態而造成作業系統資訊外洩,讀者可利用如 telnet 即可能獲知作業系統的資訊。如下圖即可得知該主機的作業系統:
[技術專欄]  以 scanlogd 偵測埠掃描事件
▲圖3

另外讀者也可利用現成的工具來探測主機的作業系統,如使用 nmap – O 來偵測主機的作業系統,如下圖所示:
[技術專欄]  以 scanlogd 偵測埠掃描事件
▲圖4


埠掃描 (port scan) 原理


在確定主機的作業系統後,接下來的步驟即為確認該主機上運作的服務資訊以便擬定攻擊策略。主機服務的偵測主要是利用被探測主機對於探測封包的回應情況,來判別被探測主機的連接埠 (Port) 是否為開啟的情況。所使用的探測技術,如下所述:

全連接技術

此為正常連接的探測方式,利用與被探測主機完成三向交握 (Three Handshake) 來確認被探測主機的埠是否處於開啟的狀態。三向交握原理如下所述:
[技術專欄]  以 scanlogd 偵測埠掃描事件
▲圖5

在上圖中,來源端欲與目的端完成連線,會經由下列步驟來完成連線:

1.來源端主機送出 SYN 封包至目的端主機來要求連線。
2.目的端主機收到 SYN 封包要求 後,會回覆 SYN+ACK 封包給來源端主機。
3.來源端主機收到目的端主機回覆的 SYN+ACK 封包後,即會回覆 ACK 封包至目的端主機,至此完成三向交握 (Three Handshake) 流程,雙方建立連線。

一旦掃描軟體被探測主機順利完成三向交握 (Three Handshake) 並與目標主機完成連線,即可代表該探測埠處於開啟的狀態。反之即代表探測埠處於關閉的狀態。此種掃描方式即稱為全連接掃描。全連接掃描由於已完成正常的連線,所以此種掃描會被防火牆或 IDS(入侵偵測系統)所記錄。

半連接探測技術

由於使用全連接方式的掃描,很容易即被被防火牆或 IDS(入侵偵測系統)所記錄,所以一般的埠探測技術大都不會與被探測主機完成正常的連線以避免被記錄,此種的探測技術稱為半連接探測技術,常用的半連接探測技術,敍述如下:
  • SYN 封包掃描
在上述的三向交握 (Three Handshake) 機制中,當傳送端主機要傳送資訊至接收端主機時,會先發出 SYN 封包到接收端主機,一旦接收端主機接收到後,會回覆 SYN/ACK 封包給傳送端主機,而後傳送端主機將再回覆 ACK 封包至接收端主機,至此連線階段建立,方可開始傳送資訊。而 SYN 封包掃描即是在發出 SYN 封包至對方主機後,如果對方主機有正常的回應 SYN/ACK 封包,即表示連接埠 (Port) 是開啟的情況,並立即發出 RST 封包,切斷該次連線。由於並未完整的完成三向交握 (Three Handshake) 連線。所以防火牆或 IDS(入侵偵測系統)並不會記錄該次的連線。
  • SYN/ACK 封包掃描技術
SYN/ACK 掃描是利用繞過 Three Handshake 第一步的 SYN 封包傳送,而直接利用傳送 SYN/ACK 封包至目的主機上的埠口,由於 TCP 協定具有連接性的性質,當目的埠口接收到此封包後,如果它是開啟的狀態,即會知道此封包並不是合法的封包(因為沒有相對應 SYN 封包),而直接丟棄 (drop),但如果目的埠口是關閉的狀態,則會回傳 RST 封包(直接重置該連線),SYN/ACK 掃描即可利用此種特性來確認連接埠 (Port) 是否在開啟的狀態。
  • FIN 封包掃描技術
FIN 掃描是利用繞過三向交握 (Three Handshake) 第一步的 SYN 封包傳送,而直接利用傳送 FIN 封包至目的主機上的埠口,當目的埠口接收到此封包後,如果它是開啟的狀態,即會知道此封包並不是合法的封包(因為沒有相對應 SYN 封包),而直接丟棄 (drop),但如果目的埠口是關閉的狀態,則會回傳 RST 封包(重置該連線), FIN 掃描即可利用此種特性來確認埠口 (Port) 是否在開啟的狀態,讀者可利用下列指令來掃描被探測主機所開啟的埠及服務資訊:

nmap -sS #利用 syn 掃描來探測被探測主機所開啟埠資訊

如下圖示:
[技術專欄]  以 scanlogd 偵測埠掃描事件
▲圖6

安裝 scanlogd


請讀者依下列步驟,安裝 scanlogd:
1.請至官方網站取得最新版本的 scanlogd(筆者所取得的版本為 2.2.6)
2.adduser scanlogd #新增一個 scanlogd 的使用者
3.解壓縮後,即使用 make linux 來編譯 scanlogd
編譯成功後,執行 scanlogd 即會常駐在系統中。

此時,請讀者在另一台主機上,以 nmap 程式掃描 scanlogd 所在的主機上(如 nmap ),查閱 scanlogd 所在主機的 /var/log/messages,即可發現如下的掃描資訊(可清楚的得知進行埠掃描的惡意來源 IP)。
[技術專欄]  以 scanlogd 偵測埠掃描事件
▲圖7

讀者可經常的查閱 /var/log/messages 來掌握進行埠掃描的惡意來源 IP 資訊。
[源碼秘技] 用 Android 手機充當電腦的無線鍵盤及滑鼠
線人/文


各位讀者也許不太明白:「我的電腦已經配備鍵盤及滑鼠,為什麼還要用智慧型手機來充當無線鍵盤及滑鼠呢?」筆者相信,RemoteDroid 這個軟體的出現,最大的受惠者其實是筆記型電腦的使用者。有用過這一類電腦的使用者都會同意它預設的觸控板位於鍵盤的下方,實在太不順手了,因此他們往往會使用 USB 滑鼠連接筆記型電腦,讓操作電腦更為方便。如果這一類使用者同時也有一台 Android 智慧型手機,則大可下載及安裝 RemoteDroid,將手機變成「無線觸控板」並放在筆記型電腦的右邊,這樣使用者便不用再攜帶另一支 USB 滑鼠了。再者,近期推出的 Android 智慧型手機,不少都強調大螢幕,這種手機就更適合充當電腦的觸控板了。
除了可模擬電腦的觸控板外,RemoteDroid 亦可同時模擬電腦的鍵盤,這樣使用者便可透過手機的實體鍵盤或虛擬鍵盤,在電腦上輸入文字。不過這個功能方便與否,要看使用者的手機是否設有實體鍵盤。筆者始終認為透過智慧型手機螢幕上的虛擬鍵盤輸入文字,總是比不上實體鍵盤來得方便。

軟體名稱:RemoteDroid
最新版本:1.4
軟體授權:GNU General Public License (GPLv3)
系統支援:Android
官方網站:http://code.google.com/p/remotedroid/

各位使用者可透過 RemoteDroid 的官方網站免費下載這個軟體。這個軟體分為兩部份:安裝於 Android 手機的 APK 檔案,以及安裝於電腦的伺服器軟體。前者是一個 APK 檔案,以「.apk」為副檔名,透過 Android 手機中的檔案總管開啟 APK 檔案,便可選擇將軟體安裝至 Android 手機。不過,事前使用者要確定 Android 手機的【設定】中的【應用程式】介面,當中「未知的來源」的核取方塊已勾選。後者則是一個名為「RemoteDroidServer」的 ZIP 壓縮檔,將這個 ZIP 檔案打開後,便會發現有一個檔名「RemoteDroidServer.jar」的檔案,那是一個 Java 程式,理論上可於任何支援 Java 的作業系統上執行,包括 Windows、Mac OS X 及 GNU/Linux 系統。以下筆者以 Mac 電腦作示範。

在正式使用 RemoteDroid 時,首先先啟動智慧型手機的 Wi-Fi 功能。要使用這個軟體,智慧型手機與電腦須連接同一個 Wi-Fi 網絡。

[源碼秘技] 用 Android 手機充當電腦的無線鍵盤及滑鼠
▲圖1

然後,便可執行安裝於手機裡的 RemoteDroid 軟體。

[源碼秘技] 用 Android 手機充當電腦的無線鍵盤及滑鼠
▲圖2

執行 RemoteDroid 軟體後,會見到如下圖的畫面。

[源碼秘技] 用 Android 手機充當電腦的無線鍵盤及滑鼠
▲圖3

這時候,使用者便可按照上述畫面的指示,執行儲存於電腦裡的「RemoteDroidServer.jar」程式。如無意外,電腦會出現這個視窗。

[源碼秘技] 用 Android 手機充當電腦的無線鍵盤及滑鼠
▲圖4

視窗中會出現一個 IP 位址,就在「Your IP address is:」字句之後。此時使用者便可在手機中的 RemoteDroid 畫面中「Enter your IP address below:」下的欄位,輸入電腦顯示的 IP 位址。

[源碼秘技] 用 Android 手機充當電腦的無線鍵盤及滑鼠
▲圖5

再點選〔Connect〕。如無意外,手機會顯示如圖的畫面。

[源碼秘技] 用 Android 手機充當電腦的無線鍵盤及滑鼠
▲圖6

這就是 RemoteDroid 模擬電腦觸控板的操作介面了。為了方便操作,使用者更可將手機以橫向的方式擺放,令 RemoteDroid 的操作介面切換為橫向式。

[源碼秘技] 用 Android 手機充當電腦的無線鍵盤及滑鼠
▲圖7

RemoteDroid 操作介面下方的左、右長方格分別模擬電腦的滑鼠左鍵及右鍵。在手機螢幕上點擊這兩個長方格,便等同於在電腦滑鼠上按左鍵及右鍵。

[源碼秘技] 用 Android 手機充當電腦的無線鍵盤及滑鼠
▲圖8

[源碼秘技] 用 Android 手機充當電腦的無線鍵盤及滑鼠
▲圖9

此外,智慧型手機的導航鍵亦可充當電腦的方向鍵,手機導航鍵可模擬為電腦的〔CTRL〕鍵,而手機的〔MENU〕鍵則可模擬為電腦的〔ESC〕鍵。

如果使用者所用的智慧型手機不設實體鍵盤,RemoteDroid 操作介面下方中間會出現〔鍵盤〕圖示,點選這個圖示則可啟動手機的虛擬鍵盤,之後使用者透過虛擬鍵盤所輸入的文字,都會在電腦上重現。如果使用者所用的智慧型手機設有實體鍵盤,直接透過實體鍵盤打字便可。

[源碼秘技] 用 Android 手機充當電腦的無線鍵盤及滑鼠
▲圖10

最後,按下手機的〔返回〕鍵便會結束 RemoteDroid 的模擬模式,返回主畫面。下次使用者再次使用 RemoteDroid 的時候,便會發現主畫面中的「Recently Used Hosts」會列出曾經連接過的位址。

[源碼秘技] 用 Android 手機充當電腦的無線鍵盤及滑鼠
▲圖11
[源碼報報] Java 規格投票落敗 Apache 軟體基金會退出 JCP 執委會
謝良奇/編譯


Java Community Process (JCP) 在執行委員會投票表決下,通過了 Java 7 與 Java 8 的技術規格。Java 7 的 JSR-336 和 Java 8 的 JSR-337,同樣獲得 12 票贊成與 3 票反對。其中投下反對票之一的 Apache 軟體基金會 (Apache Software Foundation,ASF),更在不久後宣佈退出 JCP 執行委員會。

新 Java 7 和 Java 8 釋出將包含新模組化與生產力改進等多項技術創新。儘管獲得多數執行委員會成員的支持,其中卻有若干爭議。最主要的一點正是來自 Apache 軟體基金會。Apache 軟體基金會關切的,並非 Java 7 與 8 的技術內容,而是 Oracle 對於新版 Java,究竟採用的授權為何。

投下反對票的 Google 和 Apache 軟體基金會表示,他們的決定和 Oracle 計畫的技術內容無關,而是要反對 Oracle 加諸的使用範圍和授權限制。Apache 軟體基金會成員 Geir Magnusson Jr. 表示,這些 JSR 與 Oracle 提供的授權相衝突。Java 7 和 8 技術相容性套件 (Technology Compatibility Kit,TCK) 的授權排除了著眼於嵌入式系統的實作者。

Apache 關注的另一項議題是 TCK 中阻礙獨立實作進行散佈的限制。來自 Apache 軟體基金會的 Apache Harmony 專案正是此一問題的焦點。Oracle 在毫無解釋的情況下,拒絕給予 Harmony 使用 TCK 的授權。意味著 Apache 軟體基金會無法讓 Harmony 此一獨立的 Java SE 實作,進行官方標準的相容性測試。

Google 的 Android 行動作業系統在其 Dalvik Java 虛擬機器中,使用了部份的 Harmony。Oracle 宣稱 Android 侵害 Java 專利而正對 Google 提出控告。

事實上,這不是 Apache 首次對 TCK 授權感到不滿。有關 TCK 授權條款的爭議,要回溯到 Sun 身上。當 Sun 在 2007 年將其大部分 Java 技術以開放源碼的 GPL 重新授權時,卻在 Java 的相容性測試套件上維持使用私有授權。

Java 規格中包含了爭議的使用範圍條款,要求所有 Java 實作都必須通過 TCK 的測試。反對人士認為這不僅有違開放源碼的精神,更抵觸了所有參與 Java 發展各方所同意的協議內容。

Apache 軟體基金會過去 10 年一直是 JCP 執行委員會成員,同時也是許多重要且知名開放源碼 Java 專案的來源。該組織明白指出 Oracle 拒絕給予 Harmony 授權,已經不符合 JCP 的管理原則。Apache 軟體基金會並且在日前呼籲其他 JCP 成員投票反對 Java 7 和 8。

在 Apache 軟體基金會下達的最後通牒中,該組織向 Oracle 表示,一旦他們作為 Java 規格時作者的權利,沒有獲得 JCP 執行委員會在其能力範圍內的支持,該組織將會終止與 JCP 的關係。該基金會總裁 Jim Jagielski 曾表示,假如在 Java 7 投票上落敗,該組織將會為了是否為自由使用與授權限制持續奮戰,而面臨艱難決定。

Java 7 與 8 投票表決結果公佈後不久,Apache 軟體基金會果真宣佈退出 JCP 執行委員會。Apache 軟體基金會在聲明中表示,近日的 Java SE 7 投票是 JCP 執行委員會展示,該會有意捍衛 JCP 作為開放規格程序的最後機會。

該基金會表示,他們做出 JCP 並非開放規格程序的結論,而 Java 規格則是一項必須依照規格領導者所挑選的條款,直接從規格領導者取得授權的私有技術。而 Oracle 此一個別實體的商業考量,將持續嚴重地干涉並影響該產業生態圈的透明化管理。

Apache 能讓 Oracle 於最後關頭放行 Harmony ,成為標準 Java 的唯一機會,是盡力爭取 IBM-Apache 和 Harmony 的長期支持者-成為同一陣線。然而,當 Oracle 日前拉攏 IBM 支持 OpenJDK 這套開放源碼 Java SE 後,Apache 退出 JCP 顯然已成了不得不下的一個決定。

如今看來 Java 恐怕將走向分支一途,一方面有 OpenJDK 這套官方的開放源碼 Java,另一方面有 Apache 的 Harmony。外界認為用不了多久,Oracle 也會對 Apache 做出法律行動。最後,或許法庭將會決定,當一切全都由一家公司說了算,這樣的開放源碼專案究竟還有幾分開放可言。


相關網址:
1.Java 7 和 8 在 Apache 反對中通過
http://www.devx.com/architect/Article/46123
2.Apache 在 Java 決勝投票中輸給 Oracle
http://www.theregister.co.uk/2010/12/07/apache_google_vote_no_oracle_roadmap/
3.Apache 基金會退出私有 Java 程序
http://www.zdnetasia.com/apache-foundation-quits-proprietary-java-process-62205130.htm
4.Apache 被迫創建 Java 分支
http://www.zdnet.com/blog/open-source/apache-is-being-forced-into-a-java-fork/7945
5.Apache 退出 JCP 執行委員會
http://www.h-online.com/open/news/item/Apache-resigns-from-the-JCP-Executive-Committee-1151054.html
<
轉寄『第 164 期 自由軟體專案授權方式的轉換(下):新版本號另以更改後的授權方式釋出』這期電子報

寄信人暱稱  寄信人email
收信人暱稱  收信人email

  • 社群留言
  • 留言報主

[源碼報報] PrimeSense 釋出微軟 Kinect 官方開放源碼驅動程式