<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    淺談利用codeql進行java代碼審計分析(1)

    VSole2022-01-08 09:07:27

    0x00 前言

    • 畢業的師兄推薦我來學習一下一款名叫codeql的代碼審計工具,作為目前剛問世不久的代碼審計工具擁有著巨大的優勢,它在github上作為一款免費工具供安全審計人員使用,同時還可以利用其特性創造屬于自己的編譯語言規則。

    0x01 安裝步驟及環境配置

    • 首先需要在官網下載并安裝Visual Studio Code
    • 在此處搜索codeql插件并安裝

    1,安裝插件(已完成)

    2,檢查CodeQL CLI即核心程序

    (直接在下載[https://github.com/github/codeql-cli-binaries/releases/latest/download/codeql.zip](https://github.com/github/codeql-cli-binaries/releases/latest/download/codeql.zip))

    3,克隆工作車間Codeql starter

    (直接下載https://github.com/Semmle/ql(更多的編寫例子)https://github.com/github/vscode-codeql-starter(單一的編寫例子作用不大)https://github.com/XiaoMi/galaxy-sdk-java.git也可以在cmd內利用 git clone +鏈接下載)

    • 注:下載完后設置一個codeql-home文件夾,將兩個下載好的壓縮包解壓進此文件夾
    • 快速啟用

    1,在LGTM導入一個包

    2,開啟查詢

    • 打開擴展設置
    • 修改執行路徑,填寫codeql cli的內的codeql.exe路徑
    • 在工作區打開下載好的Codeql ql

    • 然后是在環境變量內的path加入codeql命令(C:\Users\Administrator\Desktop\codeql-home2\codeql-win64\codeql)

    • 下一步就是建立數據庫了(或導入數據庫)

    0x02 相關命令

    • 在codeql執行程序根目錄打開dos界面使用

    codeql database create java-database -l=java -c="javac xxx.java"

    codeql database create java-database(利用codeql 創建名為java-database的java數據庫)-l=java(編譯語言為java)-c="mvn clean install -file pom.xml"(利用命令進行編譯,不知道為什么用這個會報錯)-c="javac xxx.java"(將xxx.java編譯成xxx.class并生成codeql數據庫)--source-root=./xxx/xxx(設置路徑,若未設置則默認在codeql執行程序目錄下建庫)codeql database upgrade java-database(更新數據庫)codeql database analyze ./xx/x1 --format=csv --output=xx/x2.csv(利用xx/x1路徑庫對目標進行分析,并以csv的格式在xx/x2路徑輸出)

    0x03 關于建庫

    • 在這里做個失敗案例

    • 結果就是無法創建成功,也試過利用webgoat構建,但也是同樣的問題,可謂是無所不用其極,但都是以失敗告終,而在閱讀了相關文檔以及github,csdn社區后也是一無所獲,對于像Java這類需要進行編譯才能創建ql庫的語言,目前能搜索到的相關資料是非常稀缺的,以上就是筆者目前遇到的問題,即無法正常創建一個java的ql庫。
    • c/c++也無法正常建庫,而例如javascript與python語言則可以順利建庫。

    • 而開發人員的解釋,則是他們還在解決這個問題,所以暫時還是不能正常建java庫的,雖然說的是MacOS的,可是我的win11貌似也不行。

    不過最終我還是找到了解決方法,使用-c="javac xxx.java"對目標java文件進行編譯即可.

    • 參考[7].3
    • 但是要確保文件名和代碼的主函數名一致,否則也會報錯。(如果出現亂碼情況,請把windows的顯示語言轉換成English即可解決,就可以成功建立數據庫啦)
    • 可以用命令利用BreakInSwitchCase.qlref生成csv報告
    • 將建好的庫導入vscode
    • 在該路徑增加一個demo.ql
    • 即可開始編寫ql查詢語句,右鍵run query就能看到結果

    • 下面再說明一下如何在LGTM中導入一個包的步驟

    • 點擊這個小頭像
    • 輸入URL例如https://lgtm.com/projects/g/apache/kafka.再選擇需要的語言即可。
    • 最快速的開啟方法是直接到lgtm網站進行編寫查詢:https://lgtm.com/query/6454096835092279761/

    0x04 codeql審計代碼原理圖

    • 可以參考綠盟這篇理解:https://cloud.tencent.com/developer/article/1645870
    • 原理:編寫查詢語句找出代碼中的漏洞,codeql內的編譯器調用extractor將java代碼編譯成可查詢的數據流,并以數據庫的形式搭配ql庫與編寫的查詢語句進行查詢,得出結果并生成報告

    0x05 漏洞分析

    • 這里用試一下sql注入漏洞作為例子,由于無法正常建庫,所以這里用網站進行演示
    源碼及查詢語句
    /**
     * @name Query built from user-controlled sources
     * @description Building a SQL or Java Persistence query from user-controlled sources is vulnerable to insertion of
     * malicious code by the user.
     * @kind path-problem
     * @problem.severity error
     * @security-severity 8.8
     * @precision high
     * @id java/sql-injection
     * @tags security
     * external/cwe/cwe-089
     * external/cwe/cwe-564
        */
    import java
    import semmle.code.java.dataflow.FlowSources
    import SqlInjectionLib
    import DataFlow::PathGraph
    from QueryInjectionSink query, DataFlow::PathNode source, DataFlow::PathNode sink
    where queryTaintedBy(query, source, sink)
    select query, source, sink, "Query might include code from $@.", source.getNode(), "this user input"
    
    • 在網站可以看到報告有兩處漏洞:

    * 也可切換視圖為alert更為直觀地追蹤

    0x06 總結

    我目前還在學習codeql階段,有不少的紕漏還請大佬們多多包涵,寫這篇文章的目的主要是想為安全小白分享一下codeql這款工具,希望讀者看完后能有所收獲以及避開我踩過的坑,我會繼續學習新的安全知識,努力提升自己,將更多更優質的技術文章分享給大家,也請大佬們在評論區給小弟提些建議,后期我會在評論區及時回復您并且修改疏漏。

    0x07 Reference

    [1].官方文檔

    1,https://codeql.github.com/docs/

    2,https://lgtm.com/help/lgtm/generate-database

    [2].利用codeql挖掘各類java漏洞

    https://blog.csdn.net/haoren_xhf/article/details/115064677?spm=1001.2014.3001.5501

    平臺csdn,作者淺入淺出0

    [3].微軟的codeql文檔

    https://docs.microsoft.com/zh-cn/windows-hardware/drivers/devtest/static-tools-and-codeql

    [4].關于codeql一系列的學習筆記

    http://www.myhack58.com/Article/html/3/8/2020/96814.htm

    [5].codeql官方練習題

    1,https://www.jianshu.com/p/f141c6c85c1d #新手練習

    2,https://lab.github.com/githubtraining/codeql-u-boot-challenge-(cc++) #課程

    [6].CodeQL Java 全網最全的中文學習資料及相關教學視頻

    https://github.com/SummerSec/learning-codeql

    [7].有關建立java庫的解釋

    1,https://www.freebuf.com/articles/web/283795.html

    2,https://paper.seebug.org/1324/ #轉載自Seebug Paper

    3,https://blog.csdn.net/qq_38049062/article/details/116865812?spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-13.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-13.no_search_link

    [8].codeql建java庫成功的案例

    https://blog.csdn.net/qq_38049062/article/details/116865812?spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-13.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-13.no_search_link

    [9].利用webgoat建立java庫 #轉自angelwhu_blog

    https://www.angelwhu.com/paper/2019/12/30/CodeQL-introduction/#0x00-%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA

    [10].github上關于codeql的問答模塊

    https://github.com/github/codeql-cli-binaries/issues

    [11].CodeQL跟蹤java數據流。

    https://www.jianshu.com/p/338d14e723c0

    [12].生成的報告形式

    https://www.cnblogs.com/goodhacker/p/13544871.html

    下一期我將分享關于語法規則的相關知識

    https
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    事實上,隨著網絡安全問題不斷凸顯,許多網站都已經開始使用HTTPS協議來進行數據傳輸,以防止數據的泄露或篡改。部署HTTPS加密證書成為保障網站安全必不可少的一步。那么HTTPS加密證書該如何獲取呢?獲取HTTPS加密證書又有什么好處?下文將為你詳細介紹。 HTTPS加密證書的獲取方法HTTPS證書獲取途徑有兩種:自己簽發和由受信任的CA機構簽發。 自己給自己簽發而來的證書也叫
    在互聯網上,我們在訪問常見的社交、購物、銀行等網站時,經常會看到這些網站是通過https訪問的,而要實現https訪問,就需要用到https證書。那么你知道https證書是什么?https證書有什么作用?又該怎么申請https證書嗎?本文內容就將詳細介紹。https證書是什么?https證書,也就是我們常說的SSL證書,它由受信任的數字證書頒發機構CA在驗證服務器身份后頒發,是一種用于保護網絡傳輸
    針對中東地區電信服務提供商的網絡攻擊是利用名為 HTTPSnoop 和 PipeSnoop 的新型惡意軟件實施的,這些惡意軟件允許網絡犯罪分子遠程控制這些感染了這種惡意軟件的設備。
    在如今的互聯網時代,網絡安全變得愈發重要。為了保障網站內數據的安全,許多網站都開始使用HTTPS協議來進行數據傳輸。而谷歌、百度等搜索巨擘啟用全站HTTPS加密服務,更是掀起了網站HTTPS加密的浪潮。那么申請HTTPS證書都需要什么?該如何申請呢?下文將為你詳細解答,一起來看看吧。 HTTPS證書如何申請?目前,企業一般是選擇證書機構來進行證書申請,這主要是因為專業的服務和技術團隊會使
    01結論SSLv1.0 無法防止重放(Replay)攻擊。SSLv2.0 以及升級版SSL3.0、TLS1.
    自從Mozilla、Google、微軟聯手提高HTTPS在網絡上的采用率后,HTTPS強制擴展就變成了不必要的。因此,啟用純HTTPS模式設置是用戶今后在網絡瀏覽器中需要做的所有事情,他們現在可以刪除HTTPS everywhere擴展。"HTTPS everywhere的目標始終是成為多余的。"EFF表示,HTTPS Everywhere將在整個2022年處于維護模式。
    1、基礎知識1.1 對稱加密算法對稱加密算法的特點是加密密鑰和解密密鑰是同一把密鑰K,且加解密速度快,典型的
    假設A和B通信,B把證書傳給A。此時被中間人O攔截到證書,中間人備份一份后發給A。A驗證證書也無誤。那中間人
    近日,Google宣布從Chrome網絡瀏覽器的下一個穩定版本(90)開始,將為地址欄中輸入的所有URL網址默認選擇HTTPS協議。這項功能于上個月進入測試階段,并且是針對Chrome Canary、Dev或Beta版用戶的有限實驗的一部分。
    自上海疫情發生以來,許多企業應防疫要求而居家辦公,導致部分企業無法正常提交SSL證書的申請、續費流程。為幫助企業網站的安全運行,上海銳成特此推出“銳安信SSL證書免費送”的限時活動,全力保護網站以及消費者的數據安全,避免證書過期給企業帶來不安全風險及損失。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类