LoginSignup
1
0

More than 5 years have passed since last update.

GO言語のクロスコンパイルを利用して、エージェントモードのvulsバイナリを用意する

Last updated at Posted at 2017-01-26

概要

Vulsエージェントモードが実装された。これにより、スキャン対象サーバにバイナリを置く事で、SSH無しで脆弱性スキャンが出来るようになった。

この方式の問題点は「スキャン対象用のVulsバイナリが必要になる」事。スキャン対象ごとにgo langのセットアップが必要になるのは、それはそれで問題がある。

その為、go langのクロスコンパイル環境を利用して、スキャン対象サーバ用のバイナリを作ることにした。

下準備

面倒だから、rootで/usr/local/go の準備をしちゃいました。。
vulsのコンパイル等は、いつも通りvulsユーザでできます。

まずは最新版のGOを入れる

Vulsのインストール指示通り、go言語を入れます
; 通常のgo言語の導入方法と同じ。

install_goLang
# wget https://storage.googleapis.com/golang/go1.7.1.linux-amd64.tar.gz
# tar -C /usr/local -xzf go1.7.1.linux-amd64.tar.gz
# mkdir $HOME/go
make_profile_d
# sudo vi /etc/profile.d/goenv.sh
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
# source /etc/profile.d/goenv.sh

go1.4を入れる

クロスコンパイル用に、取りあえずgo1.4を入れます。
GOROOT_BOOTSTRAPはデフォルトで$HOME/go1.4を向いているらしいので、~/go1.4 に入れる

# mkdir $HOME/tmp
# wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
# tar zxvf go1.4.2.linux-amd64.tar.gz -C $HOME/tmp
# mv $HOME/tmp/go $HOME/go1.4

make.bash

あとは、/usr/local/go/src で、各OS/Archtecture毎の準備。
今回はFreeBSDのバイナリを作りたいので、GOOS=freebsd, GOARCH=arm64を指定。

  • Vulsで利用する場合は、GOOSはfreebsd位かも。windowsやdarwinはそもそもVulsが対応していない
  • GOARCHはもしかしたら必要?386とか?
# cd /usr/local/go/src
# GOOS=freebsd GOARCH=amd64 ./make.bash
; 前述のgo1.4を入れていないと、ここでエラーになる。
; GOOS/GOARCHで対象のOS/アーキテクチャを指定する。

vulsをクロスコンパイルする

いつも通りmake installしてから作る

/usr/local/go に入れたgoがクロスコンパイル可能になったので、ここからは一般ユーザでよさげ。

一度、通常通りvulsバイナリを作ってからの方がいいみたい。

いつもの導入

  • $HOME/go/bin に、当該サーバ用のvulsが出来ます
$ mkdir -p $GOPATH/src/github.com/future-architect
$ cd $GOPATH/src/github.com/future-architect
$ git clone https://github.com/future-architect/vuls.git
$ cd vuls
$ make install

ここからがクロスコンパイル

  • go/src/.../vuls 以下に バイナリが出来ます
$ cd $HOME/go/src/github.com/future-architect/vuls
$ GOOS=freebsd GOARCH=amd64 go build main.go
$ mv main vuls.freebsd

自分用のVulsは要らない場合

make installだと go/bin/vuls が出来るけど、要らない場合は glide installでいいみたい。

$ mkdir -p $GOPATH/src/github.com/future-architect
$ cd $GOPATH/src/github.com/future-architect
$ git clone https://github.com/future-architect/vuls.git
$ cd vuls
$ go get glide
$ glide install

あとは前述のクロスコンパイルと同じ

$ GOOS=freebsd GOARCH=amd64 go build main.go
$ mv main vuls.freebsd

確認

CentOS68上でfreeBSD版作った。

$ cat /etc/redhat-release
CentOS release 6.8 (Final)
$ file vuls.freebsd
vuls.freebsd: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), statically linked, not stripped
$ ./vuls.freebsd -v
Segmantation fault (core dumped)
$

後は、これを実機のFreeBSDに転送してあげれば動きますね。

おわり。

その他情報

https://vuls-github.slack.com/messages のSlackチームで色々助言頂きました。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0