セキュリティエンジニアの業務内容
はじめまして、株式会社アカツキでセキュリティエンジニアをしている小竹泰一 (@tkmru)です。
セキュリティエンジニアという職種は、比較的新しくできた職種なので、他のエンジニア職から転身して働いているセキュリティエンジニアの方も多く、 まだキャリアプランや業務内容というものが確立されていない印象を受けています。 また、私のように新卒から非セキュリティ企業でセキュリティエンジニアとして働いている人はまだ業界には少ないように思います。 そんなセキュリティエンジニアの中でも珍しいキャリアを積んでいる私がキャリアについて書くのも面白いかなと思い、筆を執りました。
今回は、脆弱性診断業務に従事している私が仕事を楽しむために考えていること、おすすめの書籍やWebサイトを紹介したいと思います。
セキュリティエンジニアの業務の種類
一言でセキュリティ業務といっても、様々な業務があります。
- アプリケーションをセキュアにするために脆弱性を探す脆弱性診断業務
- 社内ネットワークに侵入できるか、侵入後どこまでシステムを侵害できるかを検証するペネトレーションテスト業務
- 社内の通信に不審なものがないか監視したり、EDR(Endpoint Detection and Response)が出すアラートなどを分析したりするSOC業務
- インシデント発生時に攻撃者による痕跡を探すフォレンジック業務
- 攻撃者が使用した不正なプログラムを解析するマルウェア解析業務、など
私は、脆弱性診断と社内ネットワークに対するペネトレーションテストに従事しています。 また、脆弱性診断業務といっても対象はいろいろあり、考え方には共通している部分もあるのですが、それぞれ求められる知識は異なります。
- 脆弱性診断の対象
- Webアプリケーション
- スマートフォンアプリ
- IoT機器など
中でも、スマートフォンアプリの中でもゲームアプリは手間がかかります。なぜ手間がかかるのかは次の節で解説します。
脆弱性診断業務に必要な言語知識・スキル
開発言語を覚えておくのが望ましい
例えば、Webアプリケーション、スマートフォンアプリの脆弱性診断を行うのに必要な知識・スキルには次のようなものがあります。
- 1.脆弱性に関する知識
- 2.何らかのWebアプリケーションを開発した経験
- 3.HTTPに対する深い知識
- 4.プロキシツールに関する知識、など
他にもIoT機器を対象とする場合はまた追加の知識・スキルが必要になります。
さて、ざっくりとした表現ですが、『脆弱性診断は開発者が想定していない挙動を引き起こす方法を探すテスト』なので、どのようにアプリケーションが動作しているのが理解しておく必要があります。
そのため、脆弱性に関する知識に加えて、何らかのアプリケーションを開発した経験があるのが望ましいです。
アプリケーションを外から操作しているだけでは脆弱性かどうか判断できなかった時などに、ソースコードを読む機会もあるので、RubyやGoなど、Webアプリケーションを開発するのによく使われている言語をいくつか覚えておくと良いでしょう。
Webアプリケーションやシンプルなスマートフォンアプリの大多数の脆弱性はプロキシツールを用いて中間者攻撃を行い、リクエスト/レスポンスを確認、改ざんすることで発見できます。
▲診断の仕組み
低レイヤーの知識を勉強しておくと仕事の幅が広がる
ゲームアプリに対する診断では、低レイヤーの知識も求められます。
ゲームアプリは、ゲームロジックをクライアント側に実装していることが多く、クライアント側を解析、改ざんされチートされることがよくあります。 そのため、サーバーとの通信を確認するだけではなく、クライアント側も確認する必要があります。
また、チート対策として、指定した証明書以外では通信できないようにするSSL Pinningが実装されていたり、通信内容をあらかじめ暗号化した上でHTTPS通信を行っていたりすることも多いです。
SSL Pinningが実装されていた場合はまずこれをリバースエンジニアリングによって無効化し、通信が暗号化されている場合はリバースエンジニアリングによって暗号アルゴリズムを解き明かし、暗号化を解くプロキシツールの拡張機能を開発する必要があります。
このようにゲームアプリに対する診断では、通信内容をプロキシツールで確認するだけでも手間がかかります。
私はあまり経験がないのですが、IoT機器に対する脆弱性診断でも、BLE(Bluetooth Low Energy)のプロトコルの知識や、ファームウェアを解析するためのリバースエンジニアリング力など、横断的な知識が求められます。 このようにWebに関する高レイヤーな知識だけではなく、リバースエンジニアリングに関する低レイヤーの知識まであると仕事の幅が広がります。
仕事の幅を広げるために開発スキルもあると良い
自作のツール開発をして脆弱性診断に役立てる
セキュリティエンジニアの中には開発経験が全く無い方もいるので、必ずしも必須のスキルでは無いかもしれませんが、コードを書けるようになっておくと仕事がより楽しくなります。例えば、自作のツールで脆弱性を発見できるとなかなか感慨深いです。
脆弱性診断は対象となるアプリケーションに対し、診断項目に記載されている攻撃をひたすら試す、単なる反復作業と思われがちです。 もちろん、それだけでもクリティカルな脆弱性が見つかった時など、達成感が得られることもあります。 しかし、本当は新しい攻撃手法を考えたり、診断ツールを作ったりできるクリエイティブな仕事だと私は考えています。
ゲームアプリでの事例
ゲームアプリに対する診断の際に確認する項目のひとつにメモリ改ざんがあります。 メモリ改ざんは最も簡単なチート方法で、UI上に表示されている値を端末のメモリ上から検索し、見つけた値を改ざんする手法です。
脆弱性診断の際には実際にメモリ上のデータを改ざんをすることでチートできるかどうか確認しています。メモリ改ざんを行うツールは存在していたのですが、CUIで動作し、非ルート化端末でも動作するものはありませんでした。
そのため、私はapk-meditというAndroid向けのメモリ改ざんツールを開発し、実際にゲームアプリの脆弱性診断で使用しています。 このツールに関しては、Black Hat USA 2020 Arsenalで発表し、CODE BLUE 2020 Blueboxでも発表予定です。
Webセキュリティに関するおすすめの書籍やWebサイト
脆弱性診断を行うのに必要な知識を身につけたい人に、おすすめの書籍やWebサイトをWebセキュリティとリバースエンジニアリングで分けて紹介します。
まず、Webセキュリティに関しておすすめの書籍やWebサイトは次の4つです。
それぞれ説明していきます。
体系的に学ぶ 安全なWebアプリケーションの作り方 第2版
体系的に学ぶ 安全なWebアプリケーションの作り方 第2版は、Webセキュリティに関して網羅的に解説しているとても有名な書籍です。 実習環境が用意されており、手を動かしながら学ぶことができます。 全くの初心者であれば、まずはこの本を読むことをおすすめします。
- 著者:徳丸浩
- Amazon
WEB+DB PRESS vol.118「特集3 はじめての脆弱性調査」
これは、私がWEB+DB PRESS Vol.118に寄稿した特集です。 開発者の方でも難なく使えるようなツールの紹介を主とすることでハードルを下げつつ、最新の話題にも触れています。
Webセキュリティに関して網羅している訳ではありませんが、nginxの設定ミスによって発生しうる脆弱性やSubdomain Takeoverの解説など他の書籍には載っていない最新の情報が載っています。 ぜひ読んでみてください!
- 著者(該当箇所):小竹泰一
- Amazon
PortSwigger Research
PortSwigger ResearchはPortSwigger社がリサーチした最新のWebセキュリティに関する記事を公開しているWebサイトです。
脆弱性診断の現場で広く使われるプロキシツール、Burp Suiteを開発しているPortSwigger社のエンジニアが書いているだけあって、読み応えがあります。 私は、PortSwigger社のエンジニアが毎年Black Hat USAに登壇した後に投稿してくれる自身の発表の解説記事を楽しみにしています。
tl;dr sec
tl;dr secは、Webセキュリティを中心に最近話題になった記事をまとめて配信してくれるWebサイトです。定期的に旬の話題を知ることができて便利です。 このサイトのRSSフィードをSlackで購読して、自動的に記事がSlackに投稿されるようにしておくと便利です。
リバースエンジニアリングに関するおすすめの書籍やWebサイト
私がおすすめしたいのは次の3つの書籍・サイトです。
それぞれ説明していきます。
たのしいバイナリの歩き方
たのしいバイナリの歩き方は、アセンブリ言語の基本から、バイナリへの攻撃手法やOSの防御機構まで、初心者にも読めるよう噛み砕いて説明している本です。 もう7年前の本なので、今となっては少し情報が古いですが、低レイヤーを勉強する時の最初の1冊としてとてもいい本です。
- 著者:愛甲健二
- Amazon
ももいろテクノロジー
ももいろテクノロジーはセキュリティに関する記事が多く投稿されているブログです。 面白い記事ばかりなのですが、特にExploit カテゴリの記事が素晴らしく、 日本語でここまで丁寧にバイナリへの攻撃手法を解説している記事は他にありません。 低レイヤーの攻撃手法が知りたい方はぜひ読んでみてください。
Practical Malware Analysis
Practical Malware Analysisは、マルウェア解析について解説した書籍です。 かなりボリュームがある書籍ですが、日本語の書籍には載っていないような実践的な内容が掲載されています。 サンプルのバイナリを解析しながら、リバースエンジニアリングを学べるところも素晴らしいです。
- 著者:Michael Sikorski, Andrew Honig
- Amazon
積極的な情報発信で副業に繋げる
同人誌の出版が書籍の商業誌としての出版に繋がる
よく言われていることですが、エンジニアにとってブログなどで情報発信することは大切です。 手軽に存在感を業界に示せますし、情報発信することで自分に情報が集まってきやすくなります。
これはセキュリティエンジニアにも例外ではありません。 情報発信していると副業に繋がることもあります。
例えば、技術書典にAllsafeという同人サークルから出したGhidraを使ったリバースエンジニアリングの本を出したところ、当日会場内で出版社に声をかけてもらい、大幅に加筆して商業誌として出版できました。
▲著書『リバースエンジニアリングツールGhidra実践ガイド』
Ghidraの基本的な使い方から、マルウェアの解析方法やAPKの解析方法まで学べるようになっており、初心者から上級者まで楽しめる書籍になっています。 ぜひ読んでみてください!
ブログから講師としての副業案件に繋がることも
もうひとつのエピソードとして、勤めている会社の技術ブログを見た知り合いに誘ってもらい、セキュリティ・キャンプ全国大会2020 オンラインでの講師の依頼を受けました。
「Learn the essential way of thinking about vulnerabilities through post-exploitation on middlewares」という4時間の講義をもうひとりの担当の方と2人で行う予定です。
世間では日々セキュリティインシデントが起きていますが、その中には設定ミスにより意図しないファイルが見えてしまったりサーバに侵入されてしまったりといったものも多数存在します。しかし、取得できたファイルやサーバには攻撃者にとって重要な情報がないこともあります。その場合、攻撃者は侵入したサーバの管理者権限を取得したり別サーバに侵入したりと侵害範囲や被害の拡大を試みます。このような侵入後の攻撃者の活動のことを広義にPost-Exploitationと呼びます。
講義では私がペネトレーションテストで実際に脆弱性を発見した経験を元に、Post-Exploitationの題材としてDB等のミドルウェアやDockerコンテナへの侵入を取り上げ、これらの内部からホストマシンの管理者権限奪取を試みる演習を行う予定です。
セキュリティ・キャンプは独立行政法人情報処理推進機構(IPA)と一般社団法人セキュリティ・キャンプ協議会が中心となって行っている、セキュリティ人材を育成するためのイベントです。 セキュリティ・キャンプは学生時代に参加してお世話になったイベントなので、講師として戻れてうれしいですね。
セキュリティエンジニアを楽しもう
セキュリティエンジニアの仕事にはどんなものがあって、 どんなことをしていれば仕事の幅が広がって、楽しくなるかをざっくりと紹介してきました。
冒頭で述べたとおり、セキュリティエンジニアといっても幅広く、この記事が全てのセキュリティエンジニアにとって参考になるものではないと思いますが、 脆弱性診断を業務と中心とするセキュリティエンジニアの方や、セキュリティエンジニアを志している方の助けになればうれしいです。