2017年5月21日 星期日

[經驗分享]Visual Studio for Mac 實用度越來越好


微軟 .NET 平台一直是我喜歡的開發環境,即便到了 Linux、macOS 上,我的程式也都能夠透過另一個 Mono 專案執行,既利用了 .NET 快速開發的特性,也保有跨平台的優勢。


開發工具


另一個殺手級的工具 Visual Studio,目前最強大的整合式開發環境,大大的節省眾多在困在開發海中的軟體工程師,最近更正式推出了 Visual Studio Community for Mac,當然要來好好的試一下。

它的歷史沿革源自於 SharpDevelop -> MonoDevelop -> Xamarin Studio,最後 Xamarin Studio 被微軟買下。





牛刀小試


不僅可以正常開啟 .NET 方案與其下專案檔,甚至執行、編譯與偵錯也完全沒問題。




測試專案為「Duplicati



正常開啟方案與專案檔



正常建置、偵錯與執行



行動應用


除此之外,還具備了直接開發三大平台 App 的能力,從此一套開發工具就能完成 Windows、iOS、Android 行動應用的目標,而且使用上非常容易!


開發與偵錯 Android 專案




網站開發


即便是 ASP.NET 網站開發也難不倒它,去年它還在 Preview 版的時候我已經測試過 WebForm 的實際使用,只要按下執行就會自動呼叫系統上的瀏覽器起來並開始偵錯。



開發與偵錯 ASP.NET 專案



未來展望


從微軟的野心來,讓開發工具統一所有平台指日可待,對於開發人員來說只需要掌握一套 IDE 便能吃遍天下,不僅降低重新學習其它語言或開發工具的時間,在企業的產品開發時程也會大大縮短,予以期待,也樂見微軟開始跨平台與開放原始碼。


2017年5月20日 星期六

[經驗分享]開源的原始碼檢測系統 - SonarQube



現代軟體越來越強,原始程式碼也越來越龐大,加上需要不斷追趕的時程,每個軟體團隊對於兼顧程式碼品質已經日漸困難。





需求困境

市面上有多種針對原始碼品質做白箱檢測工具軟體,可惜的是都價格不菲。




這張投影片真好用,一次製作常常用到(誤)





替代方案


這種等級的套件,原本我已經沒有奢望找到可用的開源軟體,那知我運氣還真的不錯,就在這個節骨眼上,有個套件不斷改版改到適合我用的程度了。


(那有這麼剛好的啦... 哈哈)


就是這麼剛好,而且這套軟體同樣有我個人偏好的「美觀介面」與「容易操作」,分享經驗如下。

SonarQube



SonarQube 是一款基於 Java 開發的原始碼檢測與品質管理系統,因著 Java 的關係,Server 與 Client 都是跨平台的。


功能簡介:

  • 支援多種程式語言
  • 檢測安全性、可靠性、重覆性、技術債務、測試覆蓋率等
  • 提供問題資訊以及程式碼改善建議
  • 具驗證機制,可整合 Github、Gitlab、LDAP、AD 等
  • 成熟的更新中心,可方便的升級系統與安裝外掛套件
  • 更多...





使用經驗


下載解壓縮後,執行 sonar.sh start 命令將服務運作起來。




Web 功能


打開瀏覽器,輸入 http://ip:9000 即可進入。


強烈提醒:請不要使用 Firefox 瀏覽,會發生一些匪夷所思的事,它浪費了我好幾個夜晚。


透過更新中心,可以快速的安裝需要的功能外掛,系統與外掛升級也是在此簡單點選就可以完成。不過要特別注意外掛的授權,有些是商業套件。

更新中心




使用者可以自己決定什麼語言要用那些特徵做檢測,內建了非常多的規則,依據需求可以更嚴格或者更寬鬆。

代碼規則



對於各種語言以及品質檢測的分數,可以自訂每一個項目的細節,以做為軟體品直的把關。

質量配置





Scanner 功能


基本設定完成後,第二個階段是配置 Client 端使用 Scanner 程式,依據不同的作業系統下載相對應的 Scanner。







Scanner 解開後,需要配置 conf 與 project 裡的設定檔,請參考官網文件。







配置完成後,在想要檢測的專案路徑下,執行 sonar-scanner 即可開始分析專案,並會把結果送到伺服器上。




查看報告


最重點的時刻來了,所有分析完的結果會用非常直覺的儀表板、圖表、數字呈現。


專案總覽



安全性指標




技術債指標



重覆率指標



問題清單




SonarQube 不僅僅是幫我們找出原始碼的各種問題,還會儘可能的提供我們問題資訊,描述原因,甚至是改善建議,這將為我們節省大量的程式修正時間。

如圖中所述,在一段 HTML 裡它建議我們把 < b >  改為較新的 < strong >  標籤。


問題改善建議



最後要介紹的是一種挺酷炫的功能,利用 3D 互動的方式來檢視整個專案的問題面向。

3D檢視模式







心得結論


佛心啊!SonarQube!

對於軟體開發團隊來說,大大節省經費,也大大節省時間。

❤❤❤







2017年5月11日 星期四

史諾登:開放原始碼的重點在於不必妥協




史諾登認為開放原始碼的美妙之處便在於透明公開,所有的程式錯誤或漏洞皆無從隱藏,例如去年爆發出來的Hearbleed與Shellshock漏洞。


他認為研究找出開放原始碼的漏洞,並不會打擊到開放原始碼,反而會讓開放原始碼更令人安心,因為整個開放原始碼社群會立刻修補漏洞,立即解決問題。


反觀商業軟體,是不可能做到這一點。 


「開放原始碼的重點在於不必妥協,」


「想要世界更好就得親自動手。」






2017年5月8日 星期一

[經驗分享]開源自動化APP安全測試系統 - MobSF



現代人手都是智慧型手機,APP 市場佔據一片江山,對開發商來說,面臨的各種資安考驗越來越多,行政院亦推動工業局與資策會成立「行動應用App基本資安規範」,期望讓台灣 App 開發的安全性更加提高。

APP 相關檢測工具越來越多選擇,黑箱、白箱測試各有好產品,自動化測試更是節省開發團隊時間的重要利器。



需求困境


無奈的是,這類 App 的自動化檢測工具價格不低,許多團隊礙於資金問題,心有餘而力不足。



這張投影片真好用,一次製作常常用到(誤)





替代方案


沒關係,我們可以從開源專案中找到可以使用的替代方案,即便比不上需要花錢購買的商業套件,但也能夠達到一定的效果,效益絕對比沒有使用前大大提升。

這就是我找到的開源解決方案,介面美觀、操作容易,分享經驗如下。


MobSF


MobSFMobile-Security-Framework)是一款基於 Python 開發的 APP 自動化測試框架,可以在 Windows、macOS、Linux 上運作使用。


功能簡介:

  • 支援 APK (Android)、IPA (iOS) App 靜態分析
  • 支援 APK (Android) 動態分析
  • 檢測 程式簽署、索取權限、API 呼叫等
  • 惡意行為分析
  • 提供 Manifest、Code、File 安全性分析
  • 更多...





使用經驗


安裝完成後,使用 python manage.py runserver 命令即可將服務執行起來。

服務運作中畫面



操作方式非常非常非常簡單,只要將 apk 或 ipa 檔案直接拖曳進網站即開始進靜態分析。


App 上傳檢測介面



經過一段時間檢測完成後,畫面會自動切到檢視頁面,這個介面清楚簡單,數據直接呈現在儀表板上。

檢測結果儀表版





點選左側類別可進入查看,對於不同的問題,MobSF 會自動在報告上寫出問題原因、危險等級,以及所在檔案,點選後的檔案可以直接進入反編譯後的原始碼。

安全性分析報告





如果檢測的對象是 Android 系統 App,可以點選功能表下方的 [Start Dynamic Analysis] 進入動態分析功能。

Apk 動態分析



進入介面後,MobSF 會自動將 VirtualBox 上安裝好的 Android VM 帶出來,點選 [Create Environment] 後即可將 Apk 帶入 VM 裡完成準備程序。

啟動成功後,可以分別使用 [Start Exported Activity Tester][Start Activity Tester] 進行各種測試,按下 [Take a Screenshot] 則可以查看目前運作的情況。


當動態分析的項目全部測試完成後,點選 [Finish] 即可進入動態分析的報告頁面。

動態分析結果報告


動態分析報告裡有非常詳盡的資料,例如各 API 呼叫的歷程、檔案存取、簡訊使用、電話撥打行為、網路流量、... 等,可以協助軟體測試人員省下大量的時間,專注於更重要的任務。


當專案測試完畢,靜態與動態分析都可以將報告匯出成 pdf 檔,方便遞交使用。



查看歷史測試記錄


日後若想要再回頭查看資料時,不用浪費時間重新測試,點選畫面上方的 [Recent Scans] 即可進入曾經做過的檢測,再點進去即可查看當時的檢測報告。





心得結論


一套功能這麼強大、方便又自動化的開源測試工具,讓我使用之後感到意外驚喜,MobSF 真的是 App 軟體開發團隊的超級好朋友啊!

😎😎😎






參考資訊


MobSF 相關資料整理





2017年5月1日 星期一

[經驗分享]比 rsync 更適合大檔案同步的 bigsync



這麼多檔案同步工具裡,rsync 歷史悠久功能也很不錯,幾乎大部份的 Linux 系統與 NAS 設備都有內建,使用起來非常方便。




有什麼問題?


rsync 的缺點在於進行檔案同步時,rsync 所使用的系統資源較為吃重,以及傳輸的效率不夠快速。

rsync


這是肇因於 rsync 所使用的檔案比對機制所致。





有什好推薦?


為了加快與提高效率,在 2011 年我們發現了一款仍在初期開發階段的「bigsync」套件,同樣是開源軟體。

bigsync



bigsync 用起來很快,同步的速度比 rsync 快非常非常多,我曾經用他做為檔案同步到異地機制好一段時間,直到後來遇見了 ZFS,那就是另一段故事了。



bigsync 適合用在備份目的裝置效能低落的場景




運作方式:
  • 取出來源區塊計算 Hash 值
  • 讀取目的端上次計算過的 Hash 值
  • 兩相比對,有不同才傳輸該區塊
  • 因為目的端只要取儲存過的 Hash 值,所以快(rsync 每次都要把目的端檔檔案進行比對)
  • 使用者可以依據實際情況自行決定區塊大小





指令用法:
bigsync --source /pve/d2.qcow2 --dest /bak/d2.qcow2
其它常用參數

--blocksize:指定使用區塊大小(預設 15MB)
--sparse:支援以稀疏檔案方式處理
--quiet:沉默是金(不要笑,說明檔真的這麼寫!!)



支援系統:
  • Linux
  • macOS



安裝方式:
  • 呃... 他只提供編譯方式,請下載原始碼後 Makefile



注意事項:
  • bigsync 已經有一段時間沒有更新版本,最新版號 0.1.2,釋出日期 2013/09/29





2017年4月30日 星期日

[經驗分享]功能強大的集中式主機管理開源軟體



做為一個系統管理員,面對為數眾多的各種伺服器管理,如果沒有一套集中好用的遠端管理工具,難保不會在手忙腳亂之時出現意外,或者效率受到影響。

在此,推薦一套我已使用多年的好東西給大家參考,以 Windows 遠端桌面管理為主,搭配其它系統之管理方式。




主要需求


在企業裡面,我伺服器用到的有 Windows、Linux、FreeBSD。

在 Windows 領域,最好用的還是 RDP 遠端桌面,不僅系統直接內建,而且連線效率優異,即便在網路品質不佳時仍然表現出色,是遠端管理的不二選擇。

在 Linux/FreeBSD 系統,伺服器端以文字模式為主,所以 ssh 大量使用,其它則搭配一些 web 管理介面為輔,即可掌控一切。


「遠端桌面」



「Putty」



「VNC」



不過,問題來了。

這麼多不同平台的系統,當數量不多時每次手動連接倒還好處理,若達到一定程度再這樣做真的會搞死人。



集中式遠端桌面管理軟體


早期為了簡化管理,開始找到幾套可以集中管理的免費軟體,尤其是遠端桌面。



RDCMan



微軟有提供一款 RDCMan (Remote Desktop Connection Manager) 工具,可以提供方便的遠端桌面集中管理方案。





更多的集中式管理軟體


除了遠端桌面以外,如果也要集中使用其它方式連線,則有其它免費方案可以參考。


Royal TS







這兩套都是功能豐富的集中式管理工具,除了遠端桌面以外,還可以連接 Telnet、SSH、VNC 等模式,系統管理員最常用的幾種模式,一網打盡。




開源的集中式管理軟體


老議題,雖然有了極為好用的免費版軟體,但因為個人的偏執所致,我還是想再試著找找看開源方案。



mRemoteNG


果然,就有這麼一款非常優秀的開源軟體「mRemoteNG」,幾乎我需要的功能都有,也具備左側資料夾分類、上方頁籤分類等多種方便使用的設計,多個願望一次滿足。




基本功能


除了可以遠端桌面以外,其它 IT 管理者常用的功能均已內建,例如我們可以使用 SSH 協定連接 Linux、FreeBSD 等主機,也能使用 HTTP/HTTPS 協定進入網頁管理介面,整合在同一個入口,非常方便。


使用 SSH 連接 FreeBSD 管理



使用 HTTP 連接 Vigor Router 管理



使用 HTTP 連接 FreeNAS 管理



內建多種連接方式



進階設定


為了解決眾多主機的不同帳號密碼問題,mRemoteNG 提供了預先針對每一部主機設置帳號密碼的功能。

若是有許多主機採用相同的設置,只要該主機的帳號密碼留空,即可套用全域通用的帳號密碼,減少設定的負擔。


全域登入驗證設定




另一種方式,在連線清單裡建立資料夾後,在資料夾的節點設定協定、帳號、密碼等,再讓下面的各個主機繼承即可,可以針對不同協定類型的主機一次調整,亦是方便。

先點選左側樹狀清單中的主機,再點選組態視窗中的 [繼承] 按鈕,即可切換到設定頁。

繼承上層節點設定





資料保護


也因為如此,mRemoteNG 應運而支援了設定檔加密功能,以避免帳號密碼外洩。


設定檔加密儲存




如果要讓多人共用設定,或是想要集中儲存設定檔,可以採用儲存在資料庫的方式。

集中儲存設定於資料庫



或是參考我的作法,使用 mRemoteNG 可攜版,並透過資料夾同步(如 Synology Cloud Station、Dropbox、NextCloud 之類的套件)達成效果。




強化機能


如果上述的功能仍然無法滿足你的話,mRemoteNG 還有一招讓它的功能無限擴充。

自訂外部工具




透過 mRemoteNG 提供的「外部工具」功能,定義好名稱、檔案位置、參數,即可支援更多的管理能力,例如常用的網路檢測小工具等等。


呼叫外部工具選單



呼叫 ping 檢測主機狀態



呼叫 psexec 進入遠端主機的 cmd 命令提示字元



定義方式:

  • [檔案名稱]
    外部工具執行檔的位置,若無全域系統路徑變數,需指明。
       
  • [引數]
    要傳遞給外部工具程式的參數,可以搭配變數一起使用,如果是呼叫命令列下的程式,建議統一用 cmd.exe 搭配 /c 後接目標程式來執行,如「/c ping -t 127.0.0.1 」
       
  • [等待結束]
    某些必需等待外部工具結束才可以做下一件事的程式,需要勾選此項。要注意若該程式執行後不會主動結束者請勿選取。
       
  • [嘗試整合]
    若想要讓程式整合進 mRemoteNG 右方的視窗裡,如 putty 的模式,您可以勾選看看,不過據我所試幾乎沒有其它程式成功,包括 cmd.exe。



可用變數:

  • %NAME%
  • %HOSTNAME% 👈  這最常用啦
  • %PORT%
  • %USERNAME%
  • %PASSWORD%
  • %DOMAIN%
  • %DESCRIPTION%
  • %MACADDRESS% 
  • %USERFIELD%



幾個外部工具設定範例:

  • [ping] 檢測目標主機連線狀態
    檔案:cmd.exe
    引數:/c ping -t %HOSTNAME%
       
  • [traceroute] 檢測目標主機路由
    檔案:cmd.exe
    引數:/c set /p = | tracert %HOSTNAME%
        
  • [psexec] 進入目標主機命令提示字元  👈  這招我超級愛用
    檔案:psexec.exe
    引數:\\%HOSTNAME -u %USERNAME% -p cmd.exe
        
  • [psloggedon] 查看目標主機已登入使用者清單
    檔案:cmd.exe
    引數:/c set /p = | psloggedon.exe \\%HOSTNAME%
        
  • [ultravnc] 進入目標主機遠端搖控(MS Logon 認證)
    檔案:vncviewer.exe
    引數:%HOSTNAME%:%PORT% /user %USERNAME /password %PASSWORD%
        
  • [compmgmt] 進入目標主機的電腦管理
    檔案:compmgmt.msc
    引數:/computer=%HOSTNAME%



參考資料






快速匯入


看完上面各種強大功能,以及自訂外部工具的擴充機制,相信您應該正著手把所有的主機都納進來 mRemoteNG 進行管理。

當您開始做著主機一筆一筆設定的時候,漸漸的會感到痛苦(是的,我也是),該怎麼辦呢?

它也設想到了,提供了多種批次匯入主機清單的功能,從功能表 [檔案] -> [Import] 展開:

  • 從 File 匯入
  • 從 Active Directory 匯入
  • 從 Port Scan 匯入



其中我最喜歡用的是「從 Active Directory 匯入」,只要選好 OU 節點,一次連著 OU 結構一起匯入,非常方便!


從 Active Directory 匯入主機清單




取用保護

(本節於 2017/05/03 增加)

看到這裡,肯定您已經建立了一大票主機的資訊跟帳號密碼,有沒有想到缺了什麼?

如果您設定好的 mRemoteNG 整個資料夾都被人偷走,呃.........
那也就是說,他可以直接存取您所有設定在 mRemoteNG 裡的所有主機 💀💀💀

別擔心!幸好 mRemoteNG 也想到了,這太貼心啦。


設定取用保護密碼



請在左側連線面版裡,點選根節點 [連線],再選取組態視窗裡的 [密碼保護],切換成 [是],再輸入要用來保護的密碼即可。



啟動程式要求輸入密碼



下次再啟動程式時,就會被要求輸入密碼才可以使用,即可保護您的 mRemoteNG,如果還要更進一步的保護,請期待我近期要撰寫的 VeraCrypt 套件文章!



原始程式


mRemoteNG 功能眾多,但如果您覺得還是不夠,或是想要研究這麼強大的工具是怎麼開發來的:「它山之石,可以攻錯」

mRemoteNG 提供了完整的原始程式碼,您可以實現「自己的工具自己改」理想。

在好幾個版本以前,我有遇到一個會導致崩潰的奇怪的問題,同時也想研究它的 VNC 機制如何實作,當時有下載它的程式碼進行研究。

mRemoteNG 原始程式碼



mRemoteNG 採用 .NET 平台 C# 語言開發,對於有過 WinForm 經驗的開發者將會相當容易上手。





結論


mRemoteNG 如此強大的系統管理工具,提供彈性的功能擴充,甚至連原始碼都給你了,這樣的好東西還不用嗎?


👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍






同場加映:其它平台方案


那麼,在 Windows 平台以外,例如 macOS、iOS、Linux、Android 上也想要管理遠端桌面呢?



它是我使用很久的方案(從前名為 2X Client),有時人在外面手上只有手機,Parallels Client 就是我認為最完美的遠端桌面解決方案,在 macOS 上我也是使用它做為管理軟體。