と。

Github: https://github.com/8-u8

データ分析から遠そうで近い本たち

あけましておめでとうございます

2021も早くてもう2月も半ば!という感じでね。
皆さんお元気でしたでしょうか。きぬいとはそうでもないです。
メンタルをやられて3ヶ月が経とうとしていますが、ここに来て繁忙度が加速しています。
大変ですね。

今年の目標は「無理をしない」ということにしましたので、
明確にこれになる、とかよりはできることをやっていく感じで一つ、みたいなところです。

近くても遠からじな話

さて、ここ1〜2ヶ月の僕の仕事は大体が

  • プロジェクトで動くコンピュータ同士の通信プロトコルの話
  • それに関連したセキュリティの話
  • コンピュータにおけるディレクトリ参照の話
  • コンピュータプログラムにおけるメモリ割当ての話*1

で、データ分析以前のお話が大変多くなってきました。なぜだ。

バックグラウンドを理由に言い訳したくはないですが、
僕は別段コンピュータ科学を専攻して来たわけでもないので、 ほぼ素人なぼくに何ができるんだ、という気持ちで向き合っています。
しかしながら、昨今のクラウド環境だのリモート開発だの"DX"だの「でえぷらあにんぐ」だので、
こうした領域が「近からずも遠からじ」な存在なんだなあと悟り、諦めがついたところです *2

2021年1発目の記事は
「データ分析に直接関わらないけど知っておくと追々役に立つかも知れない本たち」を列挙することにします。
コンピュータ科学を修めてデータ分析してる人にとっては
「こんなことも知らないでデータ分析してるとかきぬいとはクソザコなんだな」
と思っちゃうかも知れないですが、そうなんです。という記事です。

ネットワーク・通信

もはやインターネットは人々の生活どころか人類の秩序維持には欠かせない基盤となってます。
インターネットの利用はもはや呼吸みたいなものです。
我々が意識せずとも呼吸することが可能なように、インターネットはプロバイダと契約さえ結んでいれば
モデムとルータをつないで、ケーブルをPCに挿すか、Wi−Fi設定すれば簡単につながります。
しかもわりかし安全に。絶対的な安全はどこにもありませんが、我々はそこそこセキュアにインターネットを利用できてしまいます。
しかし、それがどうして実現できているのかは誰も気にしません。
僕は仕事をやってて気にせざるを得なかったので、これらを参考にしました。

ハッカーの学校』

www.amazon.co.jp

結構前から持っている(なぜ?)のですが、買った当初はモチベーションもなくダンボールに入れっぱなしでした。
このご時世ですから自宅から安全な接続を確立してプロジェクトを進めたいという話があり、「安全な接続ってなんだ」って思ったので参考にしています。
そもそもの「コンピュータネットワーク」の話から気になったので*3TCP/IPのレベルから思い切って詰め込んでいます。
「コンピュータ同士の通信にはどのような方法があって、それぞれどのように『安全』で、どのように『脆弱』なのか」が分かっておけばまずは及第点なのかなと思っています。

プログラムの実行とメモリ・CPUの挙動

データ分析で……気にする人は、その……多くないんじゃないかなって……思ってます……
データ分析に使う言語・ツールはRかPythonの特定のライブラリ群(pandas/numpy/各種機械学習モデルAPI)か、
Excelはじめとするスプレッドシート系プラットフォームが大多数だと思います*4
これらの言語・ツールを使っていると「コンパイル」という概念を失うなあと感じます。
僕は最初に覚えた言語がRなので、そもそも「コンパイル」という概念のないまま、Rで計算をしていました。
でも最近のRは裏でC/C++が動くことも多く、Pythonにも同様のライブラリでCythonなどが有名です。
C言語での(理想的なコーディングでの)実行速度は、とても速いらしく、RやPythonでの処理の高速化にはよく「裏でC/C++動いてっからw」と言っている自分は、
なぜCやC++が「速い」のか、よく分かっていません。
それどころか、大きなデータに対して「メモリ効率よく載せよう」とはいいながら、
「そもそもメモリにはどのようにデータが入っているのか」が分からないですし、
IntelAMDはどっちが性能がいいのか」という話をしつつ、実際のところCPUでプログラムが実行されるしくみを理解していないなあと思って、大変に反省しています。
結局自分の使っているコンピュータは、本当はホワイトボックスで、ある程度全容を理解できる構造なはずなのに、知識のせいでブラックボックス化してしまっているのは、
なんだかもったいないなあ、と思ったわけです。
そこで、そういうのを2%くらいでも理解するためにこんな本を読んでます。

Hacking 美しき策謀 第二版

www.amazon.co.jp

またハッキング系か

大学時代に買っていたんです……ハッカーかっこいいなあって思いながら……
でも中身を見て「ああ、難しいなあ」つって諦めてたんです……あの頃は……
あとVSCodeのような強力なエディタもなかったか認知していなくて、
プログラミングをするにはVimという難しいエディタか、Emacsという難しいエディタを使うしかないと思い込んでいました*5

当時の僕はWindowsを消してLinuxを導入する勇気もなく、
ただ夢の中にある薄暗い部屋で黒い画面に緑色の文字でカタカタとコードを入力しているだけでした。

あれから数年。コーディング環境としてVSCodeは確固たる地位を得て、
僕のような俄でもコードをそれっぽく書ける時代が到来しました。
そうして自分の仕事にも関連して「あんな本あったなあ」と思い出して手にとった本でございました。
昔よりはCのコードも何をやっているのか理解できるようになりましたし、多少は読み進められそうです。
とはいえこの本は別にC言語の本ではないのですが、僕に必要な「コンパイル」という概念を詳細に教えてくれています。
また「バッファオーバーフロー」とか、セキュリティやTwitterのネタであがるような概念についても、
「なぜそれが起こるのか」を詳細に記述しています*6
ネットワークの話ももちろん書いていて、ここにはより実践的な方法(と言ってもポートスキャンなどこれまた基本的な内容)が盛り込まれています。
全容を理解するには時間がかかりますが、手元に置いておきたい1冊です。

ちなみに副読本はこちらです。結局Cがわからんとなんもわからんのと一緒。僕は雰囲気で数値計算をしています。

www.amazon.co.jp

クラウドコンピューティング脆弱性

個人的には利用してきましたが、いよいよ会社でもクラウドの導入が検討されてきました。
経営やセキュリティ部門は、当たり前のように「外部のコンピュータに情報を乗せる」ということに対して保守的だったりします。
大手のクラウドであればそれこそ専門家集団がセキュアな体制を作れるようなサービスを展開していますし、「通信」においては安全だと思います。
ただ、「運用」にあたってはどうなんかな、と思ったのです。
例えばAWSでは、IAMユーザに権限を与えたりクレデンシャルでウンタラカンタラするわけですが、
上記2冊の「ハッキング」本で知ってしまった概念に「権限昇格」というものがありました。
つまるところ正規の手段を取らずに、与えられた権限以上のことができてしまうかも知れない、ということです。
試すつもりはない(試したら間違いなく社会的におわるので)ですが、クラウドを初めて導入するような会社です。
運用がガバガバになるような可能性が高く、大きな損失を被る可能性があります。
そうならないようにするにはガバガバ運用がもたらす悲劇を知り、回避策を持たなければなりません。

そこで買ったのがこちら

ハッカーの技術書

www.amazon.co.jp

どうせハッキング本だと思ったよ。

ペネトレーションテスト(システムなどにあえて攻撃を仕掛けて脆弱性などがないか探すテスト)の立場で、
フィッシングからサーバのハッキングの具体的方法が書かれています。
その中にはもちろんクラウドサーバも対象となっており、権限昇格の穴などについて説明があります。
本来はクラウド側でもこうした攻撃に対する防衛策を多く持っているのだと思いますが、
クラウドの責任範囲とそのユーザの責任範囲を十分に理解しないと、してやられることがよく分かりました。

おわりに

何も言っていないのと同じ!!!!

結局のところ、今やっているプロジェクトでの仕事においては、
「悪いことを考える人たちはどういう知識をどう使って隙を突こうとするのか」を知ることが
労力のかからない最短ルートになってしまっています。

ただ、僕の中では「完全な」ブラックボックスだったPCが、2%くらい白くなりました。

データ分析も結局は数値の計算、あるいは数理最適化であり、
その効率的・高速な計算には、アルゴリズムはもちろんのこと、
メモリやCPUの挙動について理解するのも重要だなあと思ったり、
それを乗せる基盤において、提供側がどこまで責任を持ち、利用側がどこまで責任を負い、
何に気をつけなければならないか、ということをある程度理解できた気がします。

自己満足にならないよう、還元できる範囲で還元し、自己満足でいい部分は大学時代の自分に「今お前が諦めた本、数年後に多少分かるようになるぞ」って
理解できずとも捨てなかった自分を褒めようと思います。

最後に、当たり前ですし、上記の本にも徹底して注意書きが書かれているのですが、
上記で紹介した書籍を実際の現場で特に意味もなく使うといろいろの法律(不正アクセス禁止法ほか)に引っかかる可能性があります。
僕はこれらを紹介することで犯罪の助長をする意図はないですし、
どんな損害・不利益を被ったとしても僕は責任を負いません。
ただ、知識は開かれているので、気になる方はぜひ買って読んでみると良いと思います。

*1:ここに関しては半分趣味もありますが

*2:多くの場合公式のドキュメントや専門のベンダに相談できる環境ではあるので、 「この理解で正しいですか?」とかお伺いを立てながら進められるので、自分で実装とかはまれです。 が、できておいたほうがいいだろうと思い、自分なりに環境立ててワチャワチャやっているわけですが

*3:実際ここまで深く理解する必要はないのでしょうが

*4:医療系であればSAS、教育であればSPSSなどあるかも知れませんが、そこはそれ。

*5:今もこの2つは使えません。

*6:バッファオーバーフローは今も致命的な脆弱性として話題になりますが、それは非常に有名な脆弱性であることを意味するので、 この本をそのまま写経してコンパイルしても、gcc側でバッファオーバーフローを事前に検知して、書籍の通りのコンパイル結果を示さないようになっています。