サヌバヌセキュリティを保護するPiAlertV1

ある日、私は考えを持った。このアむデアは、PiAlertプロゞェクトで具䜓化されたした。あなたはそれからであるかを調べるこずができたす。このビデオ。䞀蚀で蚀えば、PiAlertは、サヌバヌに䟵入しようずするず、色付きのラむトが点灯するデバむスです。システムは、そのようなむベントの総数を蚈算したす。私は䞻に、サヌバヌのポヌト22SSHに接続しようずしおいるのを芋おきたした。通垞、これらのむベントはボットアクティビティの結果です。日䞭、通垞のログむンシステムが有効になっおいる私のVPSの1぀で、1,633回の䟵入の詊みが蚘録されたした。SSHキヌを䜿甚したパスワヌドなしのログむンを䜿甚した別のサヌバヌでは、9回の攻撃が蚘録されたした。WordPressプロゞェクトダッシュボヌドぞの䞍正なログむン詊行が1回怜出されたした。前述のビデオは、システムを皌働させる前のシステムのテストを瀺しおいたす。



そしお、ここにいく぀かのショットがありたす。





PiAlertの動䜜





オフになっおいるデバむス、正面図





無効化されたデバむス、偎面図



私が埗たものは、せいぜい、デバむスのアルファ版ず呌ぶこずができるず蚀わなければなりたせん。私は、パブリックドメむンでケヌスを3D印刷するためのプロゞェクトコヌドずモデルを共有したした。誰かが私のプロゞェクトに興味を持った堎合、圌らが私が公益のためにプロゞェクトを改善するのに圹立぀こずを願っおいたす。



プロゞェクトの抂芁



最近、サヌバヌの1぀でむンシデントが発生した埌、ログを調べお䜕が起こったのかを把握するのが本圓に奜きだず気付きたした。私は通垞、次のコマンドを䜿甚したす。



tail -n 80 -f /var/log/apache2/error.log
tail -n 80 -f /var/log/apache2/access.log
tail -n 80 -f /var/log/auth.log


ボットがどこからでもアクセスしようずしおいるペヌゞや、SSH経由でログむンしようずしおいるアカりントを確認するのは興味深いこずです。ハッカヌ映画のようにも芋えたす。それから、タヌミナルりィンドりよりもはるかに魅力的に芋えるものを䜜成できるず思いたした。この瞬間、私がここで話しおいるプロゞェクトが生たれたした。



ログオン詊行の監芖結果は最近倉曎されたした。これは、より厳密なログむン手順を実装した埌に発生したした。぀たり、システムぞのログむン詊行回数が倧幅に枛少したした。これは、私が䜜成したサヌバヌ監芖システムが24時間実行された埌に明らかになりたした。以䞋でこれに぀いお話したす。



この資料は3぀のセクションに分かれおいたす。1぀目はハヌドりェア、2぀目はサヌバヌのセットアップ、3぀目はRaspberryPiのプログラムに関するものです。



ハヌドりェア



私のデバむスは、次のコンポヌネントから組み立おられおいたす。





これが接続図です。





ボヌド



ぞのコンポヌネントの接続図BlinktLEDパネルをRaspberryPiに接続するには DuPont接続ワむダヌが䜿甚されたした。䞀方では、それらをカットしお、パネルの40ピンGPIOポヌトの察応するピンにはんだ付けしたした。ディスプレむを接続する必芁があったため、ボヌドに盎接接続できたせんでした。



パネルが機胜するたでに長い時間がかかりたした。最初は、私のむンスタンスがコネクタの接続䞍良に悩たされおいるず思いたした。そしお、これを理解するために、私は詊行錯誀を繰り返し、それに費やしたいよりもはるかに倚くの時間を費やさなければなりたせんでした。私はに䌞ばした埌Pimoroni経由のTwitter、Blinktの初期バヌゞョンであるこずが刀明したしたpinout.xyzに瀺されおいるように、ピン4ではなくピン2を5Vに䜿甚したす。しかし、私はそれを理解するたで、私のものが機胜しおいなかった堎合に備えお、急いで別のBlinktLEDパネルを泚文したした。そしお今、最初のプロゞェクトを立ち䞊げた埌、2番目のプロゞェクトを䜿甚できる新しいプロゞェクトに぀いお考える必芁がありたす。Tinkercadで蚭蚈し



たケヌスにこれらすべおのコンポヌネントを配眮したした..。本䜓は私のEnder3 Pro3Dプリンタヌで印刷されたした。私はケヌスを手に入れたしたが、パヌツが互いにぎったりずはたるように、たたはラッチで互いに固定されるようにパヌツを䜜成する方法をただ考えるこずができたせんでした。その結果、完成したデバむスを組み立おるために䜿甚したM5ネゞ甚に蚭蚈された、ボディパヌツの1぀に䞀察の支柱を圢成したした。これらの支柱は、ラズベリヌパむ甚のケヌスに十分なスペヌスがあるように、端に沿っお配眮されおいたす。



本䜓の印刷には、メヌカヌ䞍明のPLAプラスチックを䜿甚したした印刷枩床-217°C、充填率-10。YouTubeで色々な動画を芋 た埌、通垞の蚭定を適甚したした。





コヌパスを印刷するためのいく぀かの詊みの結果





ボディアセンブリ



私は9回目の詊行で、たずもな倖芳のフロントパネルを䜜成するこずができたした。入力するたびに、䜕かを少し動かす必芁があるか、少しではありたすがどこかに修正する必芁があるこずがわかりたした。モデルの線集䞭にTinkercadを数回䜿甚しただけで、ほずんど最初から䜜業を開始する必芁がありたした。 Blinkt LEDバヌを盎したかったスナップを䜿甚したしたが、䜕床か倱敗した埌、このアむデアをあきらめ、グルヌガンで問題を解決したした私はこれが倧奜きです。結局、ディスプレむずRaspberryPiボヌド自䜓の䞡方を保護するためにそれを䜿甚するこずになりたした。ケヌスの䜜業を終えお、ボヌドをケヌスに入れる問題を解決しおいたした。最初は、ボヌドをケヌスに固定しおいたせんでしたが、そのため、USBケヌブルを接続するのは倧倉な冒険になりたした。ケヌスの最終バヌゞョン䞀郚のバヌゞョンが「最終」になるず蚀える堎合では、ネゞ、ネゞの穎、ケヌス内の支柱を取り陀き、ケヌスのパヌツを接続する方法を芋぀けたいず思いたす。ラッチを䜿甚したす。誰かがコヌパスの䜜業に参加しお、その䞭のすべおを倉曎したい堎合は、倧歓迎ですたた、ケヌスのフロントパネルを半透明のガラスやアクリルで閉じたいず思いたす。これにより、デバむスの倖芳が完成し、「技術的な」詳现が隠されたす。誰かがコヌパスの䜜業に参加しお、その䞭のすべおを倉曎したい堎合は、倧歓迎ですたた、ケヌスのフロントパネルを半透明のガラスやアクリルで芆いたいず思いたす。これにより、デバむスの倖芳が完成し、「技術的な」詳现が隠されたす。誰かがコヌパスの䜜業に参加しお、その䞭のすべおを倉曎したい堎合は、倧歓迎ですたた、ケヌスのフロントパネルを半透明のガラスやアクリルで芆いたいず思いたす。これにより、デバむスの倖芳が完成し、「技術的な」詳现が隠されたす。



このプロゞェクトのベヌスずなっおいるRaspberryPiボヌドは、ボヌドの背面に40ピンGPIOポヌトを取り付ける必芁がある別のプロゞェクトですでに䜿甚されおいたす。それはプラスであるこずが刀明したした。ボヌドはケヌスにしっかりず固定されおいるので、他のプロゞェクトでは䜿甚しないず思いたす。そのため、すべおをケヌスにうたく配眮するために、いく぀かのピンを曲げたした。





すべおがフィットしたす



結局、私は別のアむデアを思い぀きたした。それは、デバむスに少なくずも2぀のボタンを装備する必芁があるずいうこずです。たぶんそれらを匕き出すこずすらしないが、単にケヌスのどこかにそれらを隠す。さたざたな皮類の固定攻撃を切り替えお、その数を衚瀺するために1぀必芁です。2぀目は、短く抌すずディスプレむがオフになり、長く抌すずRaspberryPiを静かにシャットダりンする必芁がありたす。必芁に応じお、い぀でもSSH経由でデバむスに接続できたす。本圓に必芁な堎合は、コマンドを呌び出すURLルヌトを䜜成できたすsudo halt。



サヌバヌ構成



䞊蚘の事件の埌、サヌバヌの保護を匷化し、監芖を蚭定しおいるずきに、fail2banプログラムがサヌバヌにむンストヌルされるこずを確認したした。これは玠晎らしいFOSSです-事業。 Fail2banはサヌバヌ䞊のログを監芖し、SSHログむンの耇数回の詊行の倱敗など、通垞の状態では発生しおはならないこずに関する情報を蚘録したす。次に、プログラムは、疑わしい芁求の発信元のIPアドレスを犁止したす。これは、重倧な問題が発生する可胜性がある堎合、たたは䞀郚のむベントが所定の期間内に繰り返される堎合に実行されたす。デフォルトでは、fail2banはSSHトラフィックを監芖したすが、404゚ラヌの数や、WordPressプロゞェクトの管理パネルぞのログむンの倱敗回数など、他の䜕かを監芖するようにプログラムを構成できたす。



Fail2banを䜿甚するず、さたざたなむベントが発生したずきに呌び出される独自のアクションを䜜成できたす。単玔なカヌルリク゚ストのようなこずをするよりも耇雑であるこずが刀明したので、私は結局GitHubに助けを求めたした。䜕をしおも、システムを正垞に動䜜させるこずができたせんでした。同様の問題を簡単に解決できるようにするために、私が最終的にどのようにしおすべおを蚭定したかに぀いお説明したす。぀たり、Debianベヌスのサヌバヌでfail2banを䜿甚するこずに぀いお話しおいたす。



ファむルjail.localを䜜成しお、それに以䞋を远加したしょう。



[sshd]
enabled = true
port = ssh
banaction = pinotifyred[myhost="SCRIPTHOSTSERVER"]


ここSCRIPTHOSTSERVERでは、適切なURLたずえば、-onに眮き換える必芁がありたすdev.testing:8080。このURLの先頭にはプロトコル情報がなく、末尟にパスがなく、アドレスがスラッシュで終わっおはならないこずに泚意しおください。



その結果、SSHDに関連する通垞のアクションが発生し、プログラムは匕き続き疑わしいIPアドレスを犁止したすが、远加のアクションを䜜成するこずもできたす。残念ながら、ここで実行されるコマンドを簡単に説明するこずはできたせんこれが私の問題でした。代わりに、実行するアクションをシステムに正確に䌝える必芁がありたす。アクションは、フォルダヌに保存されおいるファむルから呌び出されたすaction.d。このフォルダ内の.confファむルの名前は、アクションの名前この堎合はthis pinotifyred.confに察応しおいたす。これらのファむルは次のようになりたす。



[Definition]
#  get-  "http://example.com/red"

actionban = curl --fail "http://<my-host>/red" >> /dev/null

[Init]
#     jail-    :
my-host = SCRIPTHOSTSERVER


ここでも、ファむルの説明で前述したのず同じルヌルに埓っおSCRIPTHOSTSERVER、適切なURLの䞀皮dev.testing:8080に倉曎する必芁がありたすjail.local。



コヌドはアクションを呌び出し、倉数を倉曎したすmy-host。そのような倉数がなければ、すべおを機胜させるこずはできたせんでした。



このコヌドは、必芁なコマンドを実行したす。これは、fail2banが機胜するために必芁ないく぀かの倉数を宣蚀したす。さらに、これを構成する方法は、さたざたなパラメヌタヌを䜿甚しおcurlたたはwget芁求を送信できるこずを意味したす。これらのパラメヌタの䞭には、たずえば、どのIPが犁止されたか、正確にい぀発生したかに関する情報が含たれおいる堎合がありたす。したがっお、私の堎合のように、攻撃の数に関するデヌタだけではなく、攻撃に関するより詳现な情報を受け取りたい堎合は、これを䜿甚できたす。぀たり、これを行うにaction.dは、次の内容のファむルをフォルダに配眮できたす。



[Definition]
# get-  "http://example.com/ban.php?jail=sshd&ip=192.0.2.100":

actionban = curl -G --data-urlencode "jail=%(name)s" --data-urlencode "ip=" --fail "http://<my-host>/ban.php"

[Init]
#     jail-    :
my-host = SCRIPTHOSTSERVER


アクションが2回呌び出されるためIPがブロックされおいるずきずブロックが解陀されおいるずき、おそらくここにバグがあるこずを指摘したいず思いたす。私は埌でこれに取り組む぀もりです、おそらくこれは攻撃の数の倍増に぀ながるでしょう。



RaspberryPi゜フトりェア



正盎なずころ、私のコヌドは完党に混乱しおいたす。 Pythonを知らないが、むンタヌネットで質問の答えを怜玢できる人私によっおPython3で曞かれたした。これは、䞀般的なプログラミングの知識ず盞たっお、Pythonでプログラムを曞くこずを可胜にしたした。倚くの人



がすでにこれに぀いお話しおいるので、SSH䜜業のためのRaspberryPiの準備に぀いおはここでは話したせん。問題のコヌドはGitHubでホストされおいたす。それはいく぀かのファむルで衚されたす。最初のファむルはこれでpialert.py、システムの起動時に開始されたす。 2番目のファむルtm1637.pyは、RaspberryTipsサむトのこの資料から取埗したラむブラリです。



私のPythonプログラムは、すべおの芁求をリッスンするHTTPサヌバヌずしお機胜したす本番甚ではないこずはわかっおいたすが、それでも単玔なホヌムプロゞェクトです。これはシングルスレッドプログラムであるため、リク゚ストが倚い堎合は倱敗する可胜性がありたす。プログラムはURLが到着するのを埅ち、URLが登録されおいる堎合は、アクションを実行したす。アクションは、BlinktのLEDをLarson Scannerスタむルでオンにし、カりンタヌを増やすこずです。LEDの色の遞択は、URLによっお異なりたす。



私は4色を䜿甚しおいたす



  1. 青-WordPressサむトで攻撃が行われたこずを瀺したす。
  2. èµ€-サヌバヌAに察するSSH攻撃。
  3. 玫-サヌバヌBに察するSSH攻撃。
  4. 緑-サヌバヌCに察するURL攻撃。


おそらく、時間の経過ずずもに、デバむスによっお蚘録された䞀連の攻撃を拡倧しおいきたす。しかし、珟圚でも、サヌバヌに接続せずにむベントに遅れないようにするこずができたす。



私のコヌドでは、゚ラヌは凊理されず、発生する可胜性のあるカりンタヌオヌバヌフロヌは監芖されたせん。このプログラムは、ずりわけ、私のホヌムネットワヌクでさえ、特別なURLの芁求ずいう圢で絶えず攻撃されおいるこずを瀺しおいたす。攻撃者は、発芋した脆匱性を介しおネットワヌクにアクセスしようずしたすこれにより䟋倖がスロヌされたすが、プログラムは停止したせん。



プロゞェクトの䜜業䞭に解決しなければならなかった最埌のタスクの1぀は、RaspberryPiのセットアップでした。぀たり、ロヌド盎埌にスクリプトを起動するボヌドが必芁でした。そうすれば、すべおが正垞に機胜したす。この問題は、ファむル/etc/rc.localを線集するこずで解決されたす。私はvi゚ディタヌを䜿甚しお、プログラムの起動に通垞䜿甚されるコマンドをファむルに远加したした。



python3 /home/pi/PiAlert/pialert.py &


その埌、私が解決しなければならない問題は1぀だけ残っおいたした。それは、ホヌムネットワヌク䞊にあり、ファむアりォヌルの背埌にあり、動的IPアドレスを持぀RaspberryPiぞのVPSぞの䞭断のないアクセスを提䟛するこずでした。ダむナミックDNS、たたはそこにある無数のサヌビスのいずれかを䜿甚できたす。ただし、セルフホストのRedditコミュニティの誰かが無料のサヌビスfreemyip.comを䜜成したした、これは私が解決する必芁のある問題を正確に解決したす。そしお圌はそれをうたく解決したす。このサヌビスはただあたり人気がなく、無料であるため、長い間このサヌビスが維持されるこずはないず確信しおいたす。しかし、䜜業がいかに簡単かを考えるず、喜んでお金を払いたす。同じコミュニティで別の興味深いサヌビスsliceport.comを芋぀けたした。い぀かやっおみたす。



結果









PiAlertデモンストレヌションは、映画からクヌルなハッキングの事のいく぀かに比范するこずはできたせんデバむスです。その目的は、毎日䜕千ものボットがアクセスしおはならないものにアクセスしようずしおいるこずを思い出させるこずです。私が䜜成したデバむスは、そのような詊みに関する情報を珟実の䞖界に転送するだけで、それらを思い出させたす。可愛く出おきたした。



PiAlertに぀いお他にどのような良いこずが蚀えたすかデバむスはニュヌトラルに芋​​え、非垞に柔軟性がありたす。珟状では䞍芁になった堎合は、コヌドを曞き盎しお時蚈に倉えるこずができたす。たたは、自分のサむトのペヌゞぞのアクセスのカりンタヌに倉えるこずもできたす。実際、RGBLEDず4桁のディスプレむを䜿甚するためのオプションはたくさんありたす。さらに、私のデバむスはコンパクトであるこずが刀明したした。コヌドを曞くず、机の前に立っお、䞖の䞭に悪いこずをしおいる人がいるこずを思い出させおくれたす。 PiAlertは動䜜に必芁な電力が非垞に少ないため、バッテリヌで実行できたす。 WiFiネットワヌクに接続できる限り、家のどこにでも配眮できたす。そこでは単にその仕事をしたす。たた、別のネットワヌクが必芁な堎合は、SSH経由でRaspberry Piに接続するか、新しいファむルを䜜成するだけで十分です。wpa_supplicant.confで/boot。



結果ずしお、私のコヌドはもちろんあたり芋栄えが良くないこずに泚意したいず思いたす。リファクタリングするこずができ、リファクタリングする必芁がありたす。Pythonを孊んだこずがあれば、すぐにそれを行いたす。ボディも改善できたす。たた、ある皮の3Dモデリングプログラムをマスタヌすれば、ボディに取り組みたす。しかし、これを考慮に入れなければ、私は自分のしたこずに満足しおいるず蚀えたす。



PiAlertのようなデバむスを䜜るこずを蚈画しおいたすか



All Articles