こんなミッションありませんか?
とてつもなく古くてLTSを遥か昔に超越した社内向けサーバー達。動作しているミドルウェアは砂漠のように枯れ果てて、動作しているコードはめちゃくちゃな実装で読む気もしない。明らかになっているメンテナンス手順は「リブート」のみ。もちろん起動に失敗したケースの手順は無い。今期はセキュリティ強化のお達しから、白羽の矢が立つ。
「このサーバー達のセキュリティリスクを軽減する施策を考えてください」
・・・
リプレースは枯れた社内向けに投資するコストは無い!EDRはOSが古すぎてインストールできないよ!
速く壊れて再起不能になってくれないかな・・いや、いっそのこと壊してしまえば・・
ちょい待ち!
このツール見てから最終手段を考えても良いんじゃね?
作ったわ!
詳しくはリポジトリで。バイナリをダウンロードして即使いたいならこっち
v0.2
Windowsに対応させたり、APIを追加したり大幅アプデさせました!
Windowsに対応!
サーバー、クライアント両方でWindowsに対応しました。もちバイナリ一個で動きます!!
.....hit: "data.txt": WRITE
hit: "data.txt": WRITE
recv: killProcess "C:\Program Files (x86)\sakura\sakura.exe" "C:\Users\aaa01\Desktop\goTrust\data.txt"
"C:\Program Files (x86)\sakura\sakura.exe" "C:\Users\aaa01\Desktop\goTrust\data.txt": Killed!
recv: killProcess "C:\Program Files (x86)\sakura\sakura.exe" "C:\Users\aaa01\Desktop\goTrust\data.txt"
再接続をサポートしました
サーバーに接続できない時にリトライするようにしました。
また、リトライし続けてもダメな場合は自分自身で信頼できないモードに切り替えるようにしました。
..........[retry connect!]
2021/11/14 21:10:41 context canceled
open stream error
...[retry connect!]
open stream error
...[retry connect!]
open stream error
...[retry connect!]
open stream error
...[retry connect!]
open stream error
...[retry connect!]
open stream error
...[retry connect!]
open stream error
...[retry connect!]
[retry success!]
--
...[server missing.. no trust mode!]
...[retry connect!]
open stream error
...[server missing.. no trust mode!]
データファイルの重要度をスコアで出すようにしました
監視対象のファイルがデータである場合は中のテキストを検索して、そのスコアを表示できるようにしました。
これで各サーバーにどんなデータがあって、どのくらい重要かを見れるようになりました
File Exists! : /tmp/data.txt
data source: /tmp/data.txt score: 100,0,20,
send: 172.29.207.179:50006 data: 172.29.207.179 100,0,20, password:goTrust
スコアはAPI経由で見れます
> curl -k -H "Content-type: application/json" -X POST https://172.29.192.1:50006/api -d "{\"name\":\"show\",\"data\":\"172.29.192.1\",\"password\":\"goTrust\"}"
{"status":"Success","message":".*jobdata.* 0,.*memberid.* 0,.*UserID.* 30,"}
Rules reset
ルールをリセットできるようにしました。
$ curl -k -H "Content-type: application/json" -X POST https://172.29.207.48:50006/api -d '{"name":"reset","data":"172.29.207.48","password":"goTrust"}'
API経由で指定されたIPはリセットが行われます
put call: 172.29.207.48:43492 path: /api
api PUT) Name: reset Data: 172.29.207.48 Password: goTrust
send reset. resetting rules..
APIを付けました
スコアを見る、ルールをリセットする、スコアを操作するAPIを付けました
curl -k -H "Content-type: application/json" -X POST https://172.29.192.1:50006/api -d "{\"name\":\"scoreCtl\",\"data\":\"+100,172.29.192.1\",\"password\":\"goTrust\"}"
{"status":"Success","message":"calc +100,172.29.192.1"}
なにこれ?なにしてくれるの?
簡易的にゼロトラストの概念を実現してくれるツールです。ざっくりいうと
- どんなデバイスだろうと振舞いと稼働時間によって信用度は下がります
- スコアは振舞いによって減り、ゼロになったら何も信用できないものとして扱います
その端末で起きる事象ドリブンでスコアリングすることがゼロトラストの極意!それを実現します。
パスワードファイルをいじられそうになったらプロセスを落としてスコアリングします。
持ちスコアがゼロになったサーバーで余計なプロセスがあがろうものなら問答無用で落とします!
という固有のファイルへのアクセスとどんなコマンドライン文字列かで、スコアリングしてセキュリティ監視するツールです。上記以外でも、スコアがゼロになったら特定のコマンドを実行するといった拡張性ももたせてます!
※Gitにも書いたけど、トラストエンジンとエンフォーサーが一体化してるのはセキュリティ的にダメっしょってツッコミ入れられても個人開発の限界なので許してくださいな。個人開発で3サーバー連動させるの大変。。どうやってテストケース書くのかもよくわからん。
あとがき
最近、一か月強個人開発やってなかったんだけど、会社ではいつものようにツール書いてて、個人開発用のアイディアが降りてこなかったんだ。。でもその間にGitには色々な国からフォロワーがぽこぽこ来てて、再開してpushし始めたらピタっと止まったw
会社ではしがない不自由なアウトサイダーだけど、僕のコードは旅に出る。そう思ってまた書き始めました。