見出し画像

TWSNMPをセキュリティーチェックした(解決編)

TWSNMPのセキュリティーチェックを実施して問題を解決した話です。セキュリティーチェックの準備編は、

です。

最初の結果

何も対策しないでチェックした場合の結果は、

画像1

画像2

です。nessusのほうはRaspberry PiのOSの問題も含んでいるのでCRITICALもありますが、TWSNMPの問題としてはどちらもMEDIUMかLOWしかないので、かなり優秀です。でも、スッキリしたいので調べて対策することにしました。
OWASP ZAPレポートを参考までに添付しておきます。

HTTPヘッダが足りない

TWSNMPに限らずWebアプリケーションのセキュリティーチェックで一番多く指摘されるのがHTTPヘッダが足りない問題です。

画像3

のような指摘です。Refeenceのところに参考になるサイトの情報が書いてあります。日本語のサイト

もあります。足りないHTTPヘッダに関しては、

を見るとよくわかります。特にセキュリティーの項目です。年ごとに対応しなければならないヘッダが増えているように思っています。

HTTPヘッダの不足はGO言語のHTTPサーバーの場合ハンドラーの中で必要ヘッダを追加すればよいだけなので簡単に対策できます。

		w.Header().Add("X-Frame-Options", "SAMEORIGIN")
		w.Header().Add("X-Content-Type-Options", "nosniff")
		w.Header().Add("Strict-Transport-Security", "max-age=31536000; includeSubDomains")
		w.Header().Add("Pragma", "no-cache")
		w.Header().Add("Cache-Control", "no-cache, no-store, must-revalidate")

のような感じです。

余計なHTTPヘッダ

逆につけないほうがよいHTTPヘッダも指摘さてれています。

画像4

 X-Powered-By: go-json-rest

というヘッダがあるために、

を使っていることがバレてしまうという指摘です。
こんなヘッダつけた覚えがないのですが調べると、サンプルプログラムをコピぺしたのが原因でした。

api.Use(rest.DefaultDevStack...)

という行でデバック用の処理がまるごと組み込まれていました。そこで、必要のないヘッダまでつけていました。いろいろ見直して他の問題も解決しました。

ディレクトリが露呈している

TWSNMPが稼働するマシンのファイルのリストが見えてしまうという問題が指摘されています。これは大変です。

画像5

でも、これは、OWASP ZAPの誤検知です。実際にはファイルのリストは見えません。
なぜ、間違って判断したかというと2つの偶然が重なったからです。

https://192.168.1.250:8192/js/p5.js/のように/で終わってもp5.jsの中身を応答する。
・p5.jsの中身にディレクトリのリストに見える内容がある。

誤検知ですが修正したほうが無難です。仕事ならば誤検知ですと説明する労力が必要になるためです。

これは、

・/で終わる場合は応答しない。
・p5.jsはp5.min.jsに変える。

対策で修正しました。min版のスクリプトは改行がないので間違えられないようです。

仕様とセキュリティーのジレンマ

Cache-control ヘッダの指摘は、ちょっと厄介です。

画像6

仕様の説明のページ

では、キャッシュしない場合

Cache-Control: no-store

がよい例となっていますが、このように設定すると、OWASPU ZAP指摘は消えないのです。悪い例に近い

Cache-Control: no-cache,no-store,must-revalidate

を設定すると消えます。仕様としてはおかいように思いますが、ブラウザーでアクセスして問題ないので良しとしておきます。

最終結果

いろいろ対策して、再チェックに結果は、

画像7

MEDIUMとLOWが0になってスッキリしました。

でも、もっと厳しくチェックすれば、いろいろ出てくるかもしれません。セキュリティー対策は、こんな感じで地道な仕事です。


開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。