やっつけ不定記

好きなときに好きなことをちゃっちゃと書いてます

MS Application Inspectorを入れてみた

安上がりにできるコード解析ツールを探していたところ、
Microsoft Application Inspectorというオープンソースのツールがありました。
https://www.microsoft.com/security/blog/2020/01/16/introducing-microsoft-application-inspector/
https://github.com/microsoft/ApplicationInspector
公式サイトや既存の実践記事を参考になぞっただけですが書いてみます。

MS Inspectorは.NET Core上で動作するため、.NET Coreの環境構築が必要ですが、
Dockerイメージがあるので、せっかくなので使わせてもらいます。
ビルドとコンテナ作成は、Windows10のVirtualBox6.1.8に作った
CentOS7+Dockerの環境でやっています。

・Dockerfile
MS Inspectorのソースを.NETでビルドして、
できたモジュールを/tmp/publishに持って来ています。
-----
FROM mcr.microsoft.com/dotnet/core/sdk
MAINTAINER chocopurin

# Build,Publish,Configuration for Microsoft Application Inspector
RUN cd /tmp/
RUN git clone https://github.com/microsoft/ApplicationInspector.git /tmp/ApplicationInspector
RUN cd /tmp/ApplicationInspector
RUN dotnet build /tmp/ApplicationInspector -c Release
RUN dotnet publish /tmp/ApplicationInspector -c Release -r linux-x64
RUN cp -pfr /tmp/ApplicationInspector/AppInspector.CLI/bin/Release/netcoreapp3.1/linux-x64 /tmp/publish
-----

・Dockerビルド
-----
docker build . -t [イメージ名]
-----

・コンテナ作成
ローカルPCとのファイルやり取りを/tmp/targetでできるようにしています。
また、素でdocker runするとコンテナ内のファイルオープン数制限1024に引っ掛かったので、
事前にulimitオプションで調整しています。
-----
docker run --privileged -d -it -v "/tmp/target/:/t
mp/target" -e TZ=Asia/Tokyo --ulimit nofile=15000:15000 --name [コンテナ名] [イメージ名]
-----

・コンテナ内に入る
-----
docker exec -it [コンテナ名] /bin/bash
-----

・コンテナ内のOS情報
本日時点ではDebian 10ということで、Dockerfileにaptコマンド書いたら、
もっといろんなことができそうですね。
-----
root@(コンテナ名):/# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
・・・
-----

今回は記載したCentOS7のほか、クラウドの環境とVirtualBox 6.1.8上の
CentOS8環境でもやってみたのですが、docker buildないしpodman buildの時点で、
ファイルオープン数制限でエラーになるケースがありました。

VirtualBox
・CentOS7+Docker:OK
・CentOS8+Podman:NG

AWS EC2】
Amazon Linux 2+Docker:OK

実施する環境によっては、docker buildの段階から何かしら調整が必要かもしれません
(この辺はちゃんと検証できず・・・)。
そもそもゴミディレクトリが残る形になっていたりと、Dockerfile自体がかなりザルなので、
まじめにやるならもっとリファクタリングやテストがいると思います。

実際の解析はまた今度。