Ruroco - 「RUn RemOte Command」UDPを利用したリモートコマンド呼び出し
(github.com/beac0n)- サーバーにUDPパケットを送信してコマンドを実行するツール
- コマンドはサーバー側で設定されるため、クライアントは実行するコマンドを定義せず、既存のコマンドから選択するだけ
- 3つのバイナリで構成
- client: コンピューター上で実行され、UDPパケットを送信
- server: UDPパケットを受信して有効かどうかを確認
- commander: UDPパケットのデータにエンコードされたコマンドが有効な場合に実行
- セキュリティ
- UDPで送信されるため、サーバーは一切応答しない: ポートスキャン不可
- クライアントからサーバーへ送信されるデータはRSAを使用して暗号化
- クライアントは実行するコマンドだけを指定し、コマンド自体はサーバーに保存される -> クライアントはコマンドを選択できるが定義はできない
- 可能な限り少ないOS権限でサーバーソフトウェアを実行
- サーバーが受信したすべてのパケットをブロックリストに追加してreplay攻撃から保護
- (WIP) DoS保護
使用例: single packet authorization (SPA)
サーバーの保護のため、SSHを完全に開放する代わりに、SSHポートを短時間だけ開いて再び閉じる方式を導入可能
address = "0.0.0.0:8080" # Rurocoサーバーが待ち受けるアドレス (systemd/ruroco.socket を使わない場合)
config_dir = "/etc/ruroco/" # 設定ファイルが保存されるパス
[commands]
# SSHを開く (リクエスト元のIPアドレスに対してのみ)
open_ssh = "ufw allow from $RUROCO_IP proto tcp to any port 22"
# SSHを閉じる (リクエスト元のIPアドレスに対してのみ)
close_ssh = "ufw delete allow from $RUROCO_IP proto tcp to any port 22"
- サーバーでこのようにRurocoを設定し、クライアント側で次のコマンドを実行
ruroco-client send --address host.domain:8080 --private-pem-path /path/to/ruroco_private.pem --command open_ssh --deadline 5 - サーバーはRSAを使用して、クライアントにそのコマンドを実行する権限があるかを確認し、"open_ssh" の下に定義されたコマンドを実行
--deadline引数は、コマンド実行後5秒以内にサーバーでコマンドが開始されなければならないことを意味する- SSHポートへのアクセスは、UDPパケットが送信されたIPに対してのみ許可
- もちろん、SSHポートがインターネットに公開される場合と同様、他のすべてのセキュリティ強化も行う必要がある
- 設定ファイルにさらに多くのコマンドを追加して、必要な数だけコマンドを定義できる
まだコメントはありません。