前言
最近希望在基于圖神經(jīng)網(wǎng)絡的漏洞檢測上有所推進,準備復現(xiàn)文章SySeVR: A Framework for Using Deep Learningto Detect Software Vulnerabilities開源代碼,基本環(huán)境配置是python庫環(huán)境以及joern-0.3.1、Neo4j-2.1.5環(huán)境的配置,環(huán)境具體要求如下
假期的時候就已經(jīng)完成過joern的配置,光是安裝就卡了我兩個星期,并未詳細記錄,特此來記錄一下。但是最后采用joern-cli繪制圖代替joern使用了詳細見文章鏈接
1.預準備
操作系統(tǒng):Linux(個人ubuntux64后面選擇jdk版本時候注意)
root管理員方式登錄服務器,我采用的騰訊云服務器,會默認給你用戶身份連接,但是會產(chǎn)生以下問題
- 無法直接創(chuàng)建文件夾以及修改文件等報錯,所以命令前需要加sudo
- 同時注意在root管理員和用戶登錄時進行的系統(tǒng)配置是完全兩個環(huán)境以用戶身份修改環(huán)境例如python版本的時候管理員身份登陸的時候仍然保證原狀,不同身份登陸后進行的操作互不影響
- 鑒于管理員root身份權(quán)限更大更方便,防止兩個身份同時操作混亂我們可以設(shè)置root方式登錄使用遠程服務器,詳細過程見文章
python2版本:2.7
python3版本:3.8
如果你版本低于3.6可能遇到如下問題,具體如何安裝詳見文章
PyGraphviz requires Python version 3.8 or later (3.6 detected). error: Setup
2.安裝java
安裝Java的教程網(wǎng)上有很多了,我也自己總結(jié)過一種有效的方式,具體詳見。
我安裝的jdk版本為jdk1.7.0_80,下載鏈接
3.安裝neo4j
我安裝joern是為了運行SySeVR,所以我選擇了和SySeVR一樣的Neo4j 2.1.5,這里建議直接下載鏈接中的版本,如果自己下載neo4j還需要配置gremlin-plugin,別的所有教程也都選擇了配置好的neo4j,我也上傳詳見資源鏈接
3.1 neo4j解壓到/usr/local/neo4j目錄
3.2 解壓后還需要更改幾個文件
- neo4j-server.properties($JOERN為joern安裝的目錄)
vim /neo4j/conf/neo4j-server.properties
# location of the database directory
org.neo4j.server.database.location=$JOERN/.JoernIndex
# Let the webserver only listen on the specified IP. Default is localhost (only
# accept local connections). Uncomment to allow any connection. Please see the
# security section in the neo4j manual before modifying this.
注意:一定保證neo4j中的org.neo4j.server.database.location文件地址以及文件名和joern分析函數(shù)導入數(shù)據(jù)庫所產(chǎn)生index文件的地址和文件名完全一致,具體見文章
- neo4j-wrapper.conf
vim /neo4j/conf/neo4j-wrapper.conf
# Java Heap Size: by default the Java heap size is dynamically
# calculated based on available system resources.
# Uncomment these lines to set specific initial and maximum
# heap size in MB.
wrapper.java.initmemory=512
wrapper.java.maxmemory=10240 #as large as you can
- /etc/profile
vim/etc/profile
# Add These Content at the End of the File
#######################################
NEO4J_HOME=/usr/local/neo4j
PATH=$PATH:$NEO4J_HOME/bin
export NEO4J_HOME
export PATH
#######################################
source /etc/profile
3.3 驗證
/usr/local/neo4j/bin/neo4j console
4 安裝ant
選擇的版本是apache-ant-1.9.14,鏈接下載之后解壓到/usr/local/ant
4.1 配置環(huán)境變量/etc/profile,如下把這些加到文檔末尾
vim /etc/profile
#######################################
ANT_HOME=/usr/local/ant
PATH=$PATH:$ANT_HOME/bin
export ANT_HOME
export PATH
#######################################
source /etc/profile
4.2 檢測安裝結(jié)果
ant -version
安裝成功會顯示
Apache Ant(TM) version 1.9.14 compiled on March 12 2019
5.安裝joern
安裝的joern也是在SySeVR的項目詳細見neo4j步驟里的文件截圖,因為都已經(jīng)配置好了,比較簡單,可以到資源中直接下載。
5.1 解壓joern-0.3.1到任意目錄
cd joern-0.3.1
ant
最后顯示BUILD SUCCESSFUL
5.2設(shè)置環(huán)境變量
- /etc/profile
vim /etc/profile
# 把這些加到文檔末尾
#######################################
JOERN_HOME=/home/joern-0.3.1/
export JOERN_HOME
#######################################
- ~/.bashrc
vim ~/.bashrc
# 把這些加到文檔末尾
#######################################
alias joern='java -jar $JOERN/bin/joern.jar'
#######################################
- 更新生效
source /etc/profile
source ~/.bashrc
5.3 構(gòu)建額外的工具
cd joern-0.3.1
ant tools
運行結(jié)果和ant的結(jié)果相同
BUILD FAILED ant joern-0.3.1/build.xml:35: Directory creation was not succes
如果你未以root管理員身份運行ant tools時會報錯上面的內(nèi)容,方便起見我們?nèi)绻褂梅掌鲃t一定換成root身份運行,如果用的本地就沒有這個問題了,如果就是暫時不想換,使用sudo ant就可以解決了
6.安裝python-joern
python-joern下載鏈接也可以在項目中直接找到,具體文件格式如下,也可以直接下載資源。
cd python-joern-0.3.1
python setup.py install
注意:
命令變化
如果用戶身份登錄,需要命令前加入sudo,若電腦命令行輸入python輸出python2.x的信息,需要將python setup.py install中的python換為python3,若是python3.x則沒有問題。
問題:用戶身份登錄,根據(jù)剛才的原則使用命令sudo python3 setup.py install
產(chǎn)生報錯如下:
PyGraphviz requires Python version 3.8 or later (3.6 detected). error: Setup
咋們都是文化人吧,那就直接換成python3.8或更高版本即可,具體升級過程見文章
使用ubuntu用戶身份安裝python3.8,之后再次執(zhí)行命令sudo python3 setup.py install
產(chǎn)生報錯如下:
# include <Python.h>; pygraphviz/graphviz_wrap.c:154:11: fatal error:
最后查閱大量文獻,最后收獲一個信息<Python.h>是python最基礎(chǔ)的文件,我推測是因為我雖然在ubuntu用戶身份安裝python3.8,但是root身份中python版本仍然為3.6,有些ubuntu用戶身份可以做的事情可以使用python3.8,但是涉及到更高權(quán)限的時候命令中的sudo會使用管理員身份但是python版本不對,其中的python.h文件有問題,切換root身份安裝python3.8即可安裝,成功
7.安裝joern-tools
joern-tools下載鏈接,也可以在博主資源中直接下載。
cd joern-tools-master
python setup.py install
注意:
命令變化
如果用戶身份登錄,需要命令前加入sudo,若電腦命令行輸入python輸出python2.x的信息,需要將python setup.py install中的python換為python3,若是python3.x則沒有問題,博主用戶身份登錄,根據(jù)剛才的原則使用命令
sudo python3 setup.py install
8.驗證joern
輸入joern-lookup
查看
root@VM-12-7-ubuntu:/home/thicker/GNN/FIRST# joern-lookup
usage: joern-lookup [-h] [-f [FILE]] [-o [OUT]] [-c] [-g] [-a ATTRIBUTES [ATTRIBUTES ...]]
Lookup nodes using lucene queries and output one row for each matching node. Rows are in the format functionId TAB attributeKey:attributeValue TAB
...'
optional arguments:
-h, --help show this help message and exit
-f [FILE], --file [FILE]
read input from the provided file
-o [OUT], --out [OUT]
write output to provided file
-c, --complete Output the complete node, not just its ID.
-g, --gremlin query is a gremlin traversal as opposed to a lucene query
-a ATTRIBUTES [ATTRIBUTES ...], --attributes ATTRIBUTES [ATTRIBUTES ...]
Attributes of interest
root@VM-12-7-ubuntu:/home/thicker/GNN/FIRST#
就當最后臨門一腳的時候,不出意外就又出意外了,報錯了
File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/joerntools/shelltool/LookupTool.py", line 4, in <module>
from TraversalTool import TraversalTool
ModuleNotFoundError: No module named 'TraversalTool'
告訴我沒有這個庫,但是我去尋找的時候文件組織如下:
一個文件下告訴我沒有,這是什么鬼啊,頭大
那好吧,既然找不到那我就幫你找,我把導入庫的語句加上"."改成如下:改完我直接運行,根本沒有毛病,但是又來了一個報錯,這個報錯我一下就拿捏
Traceback (most recent call last):
File "/usr/local/bin/joern-lookup", line 4, in <module>
__import__('pkg_resources').run_script('joerntools==0.1', 'joern-lookup')
File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 658, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 1438, in run_script
exec(code, namespace, namespace)
File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/EGG-INFO/scripts/joern-lookup", line 3, in <module>
from joerntools.shelltool.LookupTool import LookupTool
File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/joerntools/shelltool/LookupTool.py", line 4, in <module>
from .TraversalTool import TraversalTool
File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/joerntools/shelltool/TraversalTool.py", line 2, in <module>
from PipeTool import PipeTool
ModuleNotFoundError: No module named 'PipeTool'
告訴我找不到’PipeTool’,這不巧了,剛才我也看到這個文件了
找不到我就幫你,直接加點我就是運行,我不信他不行,但是顯示現(xiàn)實讓我相信了,報錯如下:
Traceback (most recent call last):
File "/usr/local/bin/joern-lookup", line 4, in <module>
__import__('pkg_resources').run_script('joerntools==0.1', 'joern-lookup')
File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 658, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 1438, in run_script
exec(code, namespace, namespace)
File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/EGG-INFO/scripts/joern-lookup", line 3, in <module>
from joerntools.shelltool.LookupTool import LookupTool
File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/joerntools/shelltool/LookupTool.py", line 4, in <module>
from .TraversalTool import TraversalTool
File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/joerntools/shelltool/TraversalTool.py", line 3, in <module>
from joerntools.shelltool.JoernTool import JoernTool
File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/joerntools/shelltool/JoernTool.py", line 3, in <module>
from joerntools.DBInterface import DBInterface
File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/joerntools/DBInterface.py", line 2, in <module>
from joern.all import JoernSteps
File "/usr/local/lib/python3.8/dist-packages/joern-0.1-py3.8.egg/joern/all.py", line 2, in <module>
from py2neo.ext.gremlin import Gremlin
ModuleNotFoundError: No module named 'py2neo.ext'
我一看這個錯我有點蒙了,這不完了,拿捏不住了,錯不一樣了,不慌上網(wǎng)一搜,告訴我py2neo在新版本當中沒有ext這個庫,好像是從2020.1.1和4.0版本以上都沒有這個庫,那我先看了一下我的py2neo版本果然是最新的,那咋們不怕啊,直接pip install py2neo==3.x,直接enter安裝,告訴我沒有這個版本了,直接木了
Looking in indexes: http://mirrors.tencentyun.com/pypi/simple
ERROR: Could not find a version that satisfies the requirement py2neo==3.1.2 (from versions: 4.0.0, 4.1.0, 4.1.1, 4.1.2, 4.1.3, 4.2.0, 4.3.0, 2020.0.0, 2020.1.0, 2020.1.1, 2021.0.0, 2021.0.1, 2021.1.0, 2021.1.1, 2021.1.2, 2021.1.3, 2021.1.4, 2021.1.5, 2021.2.0, 2021.2.1, 2021.2.2, 2021.2.3)
沒事,勇敢牛牛不怕困難,上網(wǎng)上搜看看有沒有資源,功夫不負有心人真的找到py2neo3.x版本了,這不就有了,但是結(jié)果還是不行,資源我也掛了連接
#py2neo-3.1.1-py2.py3-none-any.whl 使用方式
pip install py2neo-3.1.1-py2.py3-none-any.whl
產(chǎn)生什么錯了呢,就是他告訴我有’py2neo.ext’,但是沒有’py2neo.ext.gremlin’,心態(tài)有點崩了兄弟,但是在此搜索,發(fā)現(xiàn)’py2neo.ext.gremlin’在新版本中也去掉了,只有在py2neo2.X中才有
Traceback (most recent call last):
File "/usr/local/bin/joern-lookup", line 6, in <module>
exec(compile(open(__file__).read(), __file__, 'exec'))
File "/home/thicker/GNN/FIRST/joern-tools-master/tools/lowLevel/joern-lookup", line 3, in <module>
from joerntools.shelltool.LookupTool import LookupTool
File "/home/thicker/GNN/FIRST/joern-tools-master/joerntools/shelltool/LookupTool.py", line 4, in <module>
from .TraversalTool import TraversalTool
File "/home/thicker/GNN/FIRST/joern-tools-master/joerntools/shelltool/TraversalTool.py", line 3, in <module>
from joerntools.shelltool.JoernTool import JoernTool
File "/home/thicker/GNN/FIRST/joern-tools-master/joerntools/shelltool/JoernTool.py", line 3, in <module>
from joerntools.DBInterface import DBInterface
File "/home/thicker/GNN/FIRST/joern-tools-master/joerntools/DBInterface.py", line 2, in <module>
from joern.all import JoernSteps
File "/usr/local/lib/python3.8/dist-packages/joern-0.1-py3.8.egg/joern/all.py", line 2, in <module>
from py2neo.ext.gremlin import Gremlin
ModuleNotFoundError: No module named 'py2neo.ext.gremlin'
那就事不宜遲了,不想再拖了,我下載了py2neo2.x,資源在這嘍,不是博主的偶,要是想要免費的話可以私信博主厚厚偶或者關(guān)注公眾號私信偶
解壓得到py2neo-py2neo-2.0.8.tar.gz
cmd切換到文件目錄
執(zhí)行pip install py2neo-py2neo-2.0.8.tar.gz 安裝
并且后來運行成功發(fā)現(xiàn)在那個開源項目中也給出了py2neo2.x版本,但是博主沒有用過,大家可以試一試好用告訴博主偶,最后按照步驟安裝py2neo2.x,運行joern-lookup驗證,成功,撒花撒花
8.使用joern
完成joern的安裝后,進入joern的安裝目錄,我的安裝目錄在/home/linux用戶名/joern-0.3.1
兩種方法,根據(jù)填充的數(shù)據(jù)的大小來采用不同的方法
- 第一種:分析小型程序
// 模板
java -jar $JOERN/bin/joern.jar $CodeDirectory
$JOERN:joern安裝目錄,$CodeDirectory:待分析的程序目錄
// 實際運行,示例
sudo java -jar /home/linux用戶名/joern-0.3.1/bin/joern.jar /home/linux用戶名/joern-0.3.1/testcode/
//joern-0.3.1文件夾內(nèi)自帶一個testcode文件夾,用于測試
該命令運行完后會在該目錄(joern-0.3.1)下生成一個 .joernIndex的隱藏文件(ctrl+h可以查看)。注意,如果此目錄已經(jīng)存在,則joern.jar就會在其中添加代碼,因此在每次你想要創(chuàng)建一個新的數(shù)據(jù)庫之前需要刪除.joernIndex,然后重復此步驟。
- 第二種:分析大型程序
// 模板
java -Xmx$SIZEg -jar $JOERN/bin/joern.jar $CodeDirectory
//$JOERN:joern安裝目錄,$CodeDirectory:待分析的程序目錄,$SIZE:給jvm分配內(nèi)存 (以GB為單位)
// 實際運行,實例Xmx1g,代表最大分配1G空間
sudo java -Xmx1g -jar /home/linux用戶名/joern-0.3.1/bin/joern.jar /home/linux用戶名/joern-0.3.
遇到兩個警告,告訴我第一個是空間不足需要使用-Xmx參數(shù)擴大空間,看是要2G,加上參數(shù)-Xmx2g,還是空間不足,改成-Xmx3g成功消除了警告,再就是直接使用自帶的testcode告訴無法獲得,我就創(chuàng)建一個新的文件夾code在joern-0.3.1文件夾下并上傳隨意代碼,再次運行警告消除。文章來源:http://www.zghlxwxcb.cn/news/detail-403866.html
所有的安裝過程介紹完畢了,希望大家安裝順利偶,如果大家有什么問題,歡迎關(guān)注公眾號“厚點編程”和博主進一步交流偶文章來源地址http://www.zghlxwxcb.cn/news/detail-403866.html
到了這里,關(guān)于SySeVR環(huán)境配置:joern-0.3.1、Neo4j-2.1.5、py2neo2.0的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!