ハッカー(エンジニア)は黒い画面で何をやっているか

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

ふと思い立ったので書いてみる。知識のある方に前置きすると、ハッカーはここでは「ITに詳しい人」という意味で使う。いいことをする意味でも、悪いことをする意味でも、である。

イメージ

もう映画「Matrix」が公開されて20年。黒い画面上に意味不明な文字列が延々と流れていた。Matrixの主人公は銃弾を避けるイメージが根強いが、仮想世界上では「ネオ」という天才ハッカーという設定がある。そこから、ハッカーは黒い画面を覗き込んでキーボードをカタカタ叩くイメージがついてきた。

その前からハッカーは暗い部屋でパソコンを叩くイメージはあったかもしれない。(ちなみに私の好きな映画「The Internet」はあまり黒い画面は出てこなかった。)彼らは黒い画面で何をしているのか。マウス操作と何が違うのか。

CLI

黒い画面のことをCLI(Command Line Interface)と呼ぶ。Windowsだとコマンドプロンプトであったり、Mac/Linuxだとターミナルと呼ぶが、それらは総称してCLIである。CLIは基本的にはキーボードだけで操作する。今はマウスと組み合わせて操作することもあるが、基本的にマウス操作はあまり使わない。コピペしたいときくらいだろうか。

CLIで何ができるか

CLIで何ができるかというと、基本的にはPCの基本操作であれば何でもできる。もちろん、絵を描いたり写真を加工したりすることはとても難しい。難しいという言葉にとどめておいているのは、全くできないわけではないからだ。ただ、マウス操作のほうが圧倒的に楽だ。それはマウス操作するのに最適化されているためであるといえる。

例えば、PCでよくやるファイルの作成、テキストファイルの編集、ファイルのコピーや移動などはすべてCLIでできる。メールの送受信もサイトをみることもできる。Twitterにツイートすることもタイムラインをみることもできる。要するに、普通にPCでしてることができるのだ。

そもそも論はあまり語りたくないが、軽く話すと元々は黒い画面しかなかった。それがウィンドウシステムというシステムの進化により、マウス操作が主流になったのだ。「マウス操作の裏側ではCLIが動いている」と説明する場合もある。

またCLIにはコマンドが用意されていて、コマンドを実行することでファイルをコピーしたり移動したりと、様々な操作を行うことができる。また、スクリプトと呼ばれる実行したいコマンドを並べて書いたファイルを用意することで、いくつかのまとまった処理をスクリプト一つで実行できるのである。例えば、MacでAというフォルダにあるファイル1.txt〜ファイル100.txtというファイルをBというフォルダに移動したいときには次のように書くことでできる。

for f in `ls A/`; do
	mv A/$f B/;
done

「100個のファイルを移動するくらい、マウスのほうが速い」と思ったかもしれない。そのとおりである。しかし、「100個のファイルを作成する」となると少しむずかしいかもしれない。それもCLIだと簡単にできる。

for i in `seq 1 100`; do
	echo > A/ファイル$i.txt;
done

これでAフォルダにファイル1.txt〜ファイル100.txtが作成される。100を10000に変えれば10000個のファイルが作成される。様々な活用方法がありそうだ。

今までは操作しているPCのファイルを操作したが、CLIでかなり多くの頻度で使われるのは、サーバーと呼ばれるインターネットなどのネットワークの先にあるファイルをPCのような操作をするときである。SSH(Secure SHell)というシェルを使って通信し、ログインしてサーバー内部の操作を行う。サーバーにはWindowsやMacといったものではない、Linuxというシステムが使われていることが多い。しかし、手元のPCがWindowsやMacであっても、Linuxにログインして操作することが可能である。もちろん、サーバーでもマウス操作できるようにすることができるが、マウス操作をする場合にはサーバーにビデオカードと呼ばれる部品が必要であったり、また画像でやり取りする必要があるため通信速度や通信データ量が膨大に増加する。そのため、サーバーはCLIだけで操作できるようになっている場合が多い。

ハッカーやエンジニアはCLIで何をするか

先程も言ったとおり、CLIはサーバーに接続する目的でよく使われる。ハッカーやエンジニアはサーバーに接続して、サーバーの設定を行ったりプログラムを設置して実行させたりする。

ここでサーバーに関して注意となるが、今まで使っていたサーバーはハードウェア(機器)という意味でのサーバーという意味で使用していた。しかし、サーバーにはソフトウェアとしての意味もあり、例えばWebサーバーというとこのブログのようにサイトを公開する目的で使われ、メールサーバーはメールを送信したり受信したりする目的で使われる。それらはハードウェアとしての意味のサーバーにインストールすることができるのである。

そのため、エンジニアであればWebサーバーやメールサーバーなどの構築のためにCLIを使い、またハッカーであれば公開されているサイトの情報を書き換えたいときにはサーバーにログインしてファイルを書き換えたりするためにCLIを使ったりする。

攻撃時にハッカーがやっていることとは?

ハッカーがやっていることといえばハッキングだろう。では、ハッキングとは具体的に何をしているのか?
ハッキングしている最中にカタカタキーボードを叩いているのは何をしているのか?少し分類して見てみよう。

侵入

ハッキングといってもいろいろあるが、代表的なものは対象のPCであったりサーバーに侵入することだろう。しかし、侵入とひとえにいっても様々である。例えば、相手のユーザー情報を取得しログインする、というのが一番シンプルだが、相手のユーザー情報やパスワードを調べるのは難しい。セキュリティの弱い会社で、全社員のユーザー名とパスワードの情報を書いたファイルがおかれていたりすればそれを盗むだけでできることもあるが。そのようなときには、ブルートフォースアタックと呼ばれる総当たり攻撃である。ユーザー名やパスワードをランダムに生成し、とにかくログインを試みるのである。もちろん、これは手動ではとてもできない。ランダムにユーザー名やパスワードを生成するプログラムを作成してログインを試行するのだ。つまり、プログラムを作成するときにキーボードをカタカタしている。事前準備というわけだ。そしてそのプログラムを実行するときに「ターン」とエンターキーを押すのである。

もう一つの侵入方法として、プログラムの脆弱性(脆弱性)をつくという方法がある。たびたびWindowsアップデートなどに悩まされている人もいるとは思うが、これはWindowsにある穴、いわゆるセキュリティホールから侵入を試みるのである。プログラミングをやったことがない人にはなかなか実感を持ってもらえないが、プログラミングで書く文字の量は膨大で、ましてやWindowsやMacのように様々なソフトを動かすためのプログラムであれば凄まじい量の文字数となる。物語を長く書けば長く書くほど誤字が増えたり前の設定とのズレが生じたりするように、プログラムもミスが増えてしまう。これがいわゆるバグである。ハッカーはそのようなバグをみつけ、利用できるかどうかを調べる。具体的には、あるメールソフトには受信したコマンドを実行してしまうというプログラムが実行してしまう脆弱性があったとする。ハッカーはその大量にPCのハードディスクを消去してしまうコマンドを含んだメールを大量に送信し、そのソフトを使っている人がメールを受信した瞬間にコマンドを実行し、ハードディスクを消去してしまうのである。これはとても極端な例ではあるが、このようなことは日々起きている。アップデートは重要である。脆弱性は悪意のあるハッカーが先に見つけるかソフトウェア開発者が先に見つけるかよってユーザーの影響が受ける影響は180°変わる。ハッカーはプログラムを入手して解析し、プログラムに脆弱性がないかをとにかく検証する。プログラムに脆弱性がないかどうかをチェックするプログラムを使うかもしれないし、地道に手動で探す場合もあるだろう。映画ではそのシーンが描かれているのかもしれない。

踏み台

これも侵入の一つではあるが、侵入することが目的ではない。ハッカーが直接、自分のパソコンから対象の機器を攻撃すると自分が攻撃したことがバレてしまう。そのため、ある侵入できるPCやサーバーを探し、そこから攻撃を試みるのである。そうすることで自分が攻撃したことを隠すことができる。これが踏み台である。

が、そう簡単でもない。なぜなら、その踏み台となったPCにも当然自分が新入した形跡が残ってしまう。そのため、踏み台をするための踏み台を探す。更にその踏み台を探すための踏み台を探す。更に……とやっていく。それが単なる数珠つなぎになっているとは限らない。ハッカー自身のPCから多数の踏み台サーバーにログインし、それぞれからまた更に多数の踏み台サーバーにログインし、とやっていくと膨大な量の踏み台サーバーが発生し、特定が困難になる。そのように、ある目的を達成するために行う攻撃もあるのである。

方法としては、上で紹介したブルートフォースアタックのような攻撃だったり脆弱性を探したりして踏み台を探す。それらは膨大な作業となるため、自動化するプログラムを作成して侵入を試みるだろう。そうすると侵入を試みるときには、プログラムを実行するだけとなる。画面には、ログインに失敗した、もしくは成功したのような履歴が残るかもしれない。ちなみに以下の画像は私のサーバーにログインを試みたログである。

DoS攻撃/DDoS攻撃

サイトを公開しているWebサーバーなどを稼働させなくすることを目的としたDoS攻撃(Denial of Service attack)DDoS(Distributed Denial of Service attack)という攻撃がある。DoS攻撃は、あるサーバーに大量のデータを送信することでサーバーが処理しきれなくなりダウンしてしまうことを狙う攻撃である。DDoS攻撃は更に強力で、DoS攻撃を上で紹介した大量の踏み台を使って対象に一気に攻撃を仕掛けることである。今では、DDoS攻撃をDoS攻撃と呼ぶこともある。というのもDDoS攻撃をしないとほぼ影響が出ないからである。Webサーバー以外にもよく攻撃されているのが、スマホなどのゲームで使用しているサーバーである。サーバーがDDoS攻撃を受けたことによりメンテナンスになってしまうことも割とある。(なので、あまり詫び石詫び石といわないでほしいと思っている。)

DoS攻撃に関しては、2018年に多くのエンジニアが利用しているGithubというサービスが1.7Tbpsというデータ量の攻撃を受けてサービスが停止した。1.7Tbpsとは、スマホのデータ量で使うギガバイト換算すると、1秒間に210ギガバイト受けた計算となるため、7GBでデータ制限がかかるとすると0.03秒で上限に達してしまうデータ量となる。恐ろしい。

DoS攻撃には綿密な準備が必要だが、実際に実行するときにはプログラムを実行するだけ、のような気がしている。そこまでカタカタカタカタする必要がないかもしれない。

一方、エンジニアは何をしているのか

ハッカーから攻撃を受けたエンジニアは何をするのか。ハッカーは今までに話したとおり、準備には時間がかかるが実際に攻撃するときには意外とすることがない。しかしエンジニアは、意外と事件が起こったときにはカタカタすることが多い。こちらも分類してみる。

問題の切り分け

サーバーがダウンしたとしても、ハッカーによる攻撃でダウンしたのか故障でダウンしたのかしたかがわからない。また、サーバーが故障したとしても、サーバーのソフトウェア部分がダウンしたのか、機器自体が故障したのか、通信している場合にはネットワーク機器が故障したのかなど、切り分けるところは多数ある。それらを調べるのにはCLIがよく使われる。総合的にチェックするプログラムを用意している場合もあるし、手動で一つ一つの機器に入って調べることもある。常にカタカタカタカタしているのである。

セキュリティのチェック

もしサーバーのダウンの原因がハッカーが原因だった場合、発見のタイミングにもよるが基本的にサーバーの機器自体の電源を落とさないといけない。「ハッカーの侵入経路を特定しそこを塞げばいい」と思ってしまうかもしれないが、そうもいかないのだ。というのも侵入された段階で、何らかの悪意のあるプログラムを設置してセキュリティホールを作成していたり、自動的にサーバーの設定を書き換えて侵入しなくてもなんでも自由にできるようにされてしまったりする。そのため、サーバーをダウンさせることが一番の得策となっていまうわけである。もちろん、あとでネットワークを遮断した状態でサーバーを起動し、何が原因で侵入されたかなどを検証する必要があるし、サーバーは同じ設定を複数台に施している場合もあるため、他のサーバーも侵入されないように対策する必要がある。

振り返って

ハッカーは事前準備の方が黒い画面をカタカタし、エンジニアは攻撃されているときにカタカタすることが多いというのが私の印象である。もちろん映画では事前準備の風景を重点的に描いてしまっては単なるドキュメンタリーになってしまうし、また攻撃されているエンジニアがサーバーの電源を落とし、機器を交換している風景を描いてもなんの面白みもないだろう。ただ、ちょっとだけ映画と現実のギャップをお伝えしてみたかったのである。

前の会社でデザイナーの人の前でCLIで操作していたときに「CLI触る人って、どこになんのファイルが有るのか全部覚えているんですか?」と聞かれたことがある。私の答えとしては、割と「なんとなく」だ。設定ファイルはどこにあり、プログラムの本体はどこにあり、ログファイルがどこにあるなどは割と決まっている。設定ファイルの中にどこに必要なファイルが書いてあるといったことも覚えてはいる。そのため、大方の操作はCLIの文字情報だけで操作できるのである。

もちろんGUIでのマウス操作は日々便利になっている。WindowsにしろMacにしろ(Linuxにしろ)、バージョンを上げるごとに使いやすくなっていっているというのが私の印象だ。よく「Windows10になって使いづらくなった」というのは単に変わったばかりで慣れていないだけである。本当に変わらない操作がほしいのであれば、CLIをおすすめする。CLIは変わらないよ。

Related posts

コメントを残す