やっつけ不定記

好きなときに好きなことをちゃっちゃと書いてます

VOICE BE AMBITIOUS LIVE Vol.3

去る6月5日(土)に
山寺宏一 presents "VOICE BE AMBITIOUS LIVE Vol.3" やまちゃんもうすぐ還暦祭りに林原めぐみ参上SP!"
という配信ライブがありました。
時間の都合で先ほどアーカイブで視聴したのですが、とにかくびっくりもの。
そして、山ちゃんいつ見ても若い。

漏れ聞こえてたTwitter実況から、相当なライブと予想していましたが、はるか上を行っていました。
山寺さんのステージは、過去に生ゲストやライブビューイングで拝見したことがありますが、
そもそも最強のエンターティナー。
https://chocopurin.hatenablog.com/entry/20170312/1489327647
https://chocopurin.hatenablog.com/entry/2021/03/28/203859
https://chocopurin.hatenablog.com/entry/2019/02/03/151128

これに長年の戦友である林原さんがゲストという時点で反則のライブイベントです。
二人の共演作品を見て育った身としては、全身鳥肌ものでした。
アーカイブは6月11日までとのことで、あの頃を知っている世代は見ておいて決して損なしです。

円盤出たらマジ買おうかしら。

OWASP ZAP Automation FrameworkでActive Scanしてみた

しばらく前からOWASP ZAPのCUI実行を探っていました。
いわゆるシフトレフトの実現に役立つのではないかなと思った次第です。

zap.shのコマンドヘルプやググって出てきたオンラインドキュメント(★)
https://www.zaproxy.org/docs/desktop/addons/quick-start/cmdline/
からして、-quickxxxなオプションを-cmdもしくは-daemonオプションと
組み合わせて実行すればいいのだなと認識したのですが、いざ診断してみると、
Passive Scan(非破壊検査)しかやっていないように見受けられました。
やりたいのはActive Scanです。
話を簡単にするため、入力した値をそのまま表示するPHP(明らかにXSSがある)を
適当に拾ってきて、それで試してみても同様。

他にもオプションを探ってみたり、zap-cli
https://github.com/Grunny/zap-cli
というプロジェクトも眺めてはみたのですが、最終更新日が数年前。
情報が古そうな印象でしっくりこない。

あーだこーだ悩んでは、Twitterで実況していると海外の方から
Automation Framework(☆)
https://www.zaproxy.org/docs/automate/automation-framework/
を見てみるべしとのメンションを頂戴しました。
こういうときのアウトプットって本当に重要ですね。
アドバイスを踏まえて改めて調査してみると、もともと見ていた★は、
自動実行のドキュメント
https://www.zaproxy.org/docs/automate/
のごく一部にすぎず、
「Quick Start command line - quick and easy, but only suitable for simple scans」
とのこと。
zap-cliに至ってはサードパーティモジュールの扱いで、ZAP公式としては
Automation Frameworkを推奨しているようです。

以下、Automation Frameworkを使ってCUIからActive Scanをやってみたのですが、
このフレームワーク自体がアドオンだったり、設定ファイル書いたりでなかなかの暴れ馬。
忘れないうちにズシャーっとメモしておきます。
使ったOWASP ZAPのバージョンは、これを書いている時点の最新版の2.10です。
zap.shベースで書いていますが、Windowsだとzap.batでも同様と思います。

【診断実行までの流れ】
(初回のみ)アドオン導入

ZAPの設定

診断用YAMLファイル作成

診断実行

(1)アドオン導入
GUIでもCUIでもかまわないので、Automation Frameworkを導入する。
これにより、CUIではオプションとして-autorun,-autogenmin,
-autogenmax,-autogenconfが追加される。

GUIの場合
ZAP起動→ヘルプ→アップデートのチェック→マーケットプレイス
→Automation Frameworkにチェックを入れる→選択済みをインストール

CUIの場合

$ cd [ZAPのディレクトリ]
$ ./zap.sh -cmd -addoninstall automation

(2)ZAPの設定
ZAPを起動して、診断対象URLへのクロールやコンテキストの設定など、
普通に診断用の設定を行ったうえでセッションをファイルに保存する。

(3)診断用YAMLファイル作成
-autogenconfで現在の状態を生成し、これを-autogenminや-autogenmaxで
生成したサンプルや上記☆のドキュメントと照らし合わしながら、
やりたい診断内容に合わせて調整する。

・最大構成のYAMLサンプル生成

$ ./zap.sh -cmd -autogenmax [任意のディレクトリ]/[ファイル名].yaml

・最小構成のYAMLサンプル生成

$ ./zap.sh -cmd -autogenmin [任意のディレクトリ]/[ファイル名].yaml

・現在の状態をYAMLで生成した後、中身を調整

$ ./zap.sh -cmd -autogenconf [任意のディレクトリ]/[ファイル名].yaml
$ vi [任意のディレクトリ]/[ファイル名].yaml

とりあえずlocalhost:3080上のPHPにPassive ScanとActive Scanだけ動かした場合の
YAMLはこんな感じ。
追加アドオンの組み合わせ次第では、さらにいろんなことができるかもしれません。

--- # OWASP ZAP automation configuration file, for more details see https://www.zaproxy.com/docs/(TBA)
env:                                   # The environment, mandatory
  contexts :                           # List of 1 or more contexts, mandatory
    - name: test                       # Name to be used to refer to this context in other jobs, mandatory
      url: http://localhost:3080/      # The top level url, mandatory, everything under this will be included
      includePaths:                    # TBA: An optional list of regexes to include
      excludePaths:                    # TBA: An optional list of regexes to exclude
      authentication:                  # TBA: In time to cover all auth configs
  parameters:
    failOnError: true                  # If set exit on an error         
    failOnWarning: false               # If set exit on a warning
    progressToStdout: true             # If set will write job progress to stdout

jobs:
  - type: addOns
    name: addOns
    parameters:
      updateAddOns: true
    install:                           # A list of non standard add-ons to install from the ZAP Marketplace
    uninstall:                         # A list of standard add-ons to uninstall

  - type: passiveScan-config
    name: passiveScan-config
    parameters:
      maxAlertsPerRule: 0
      maxBodySizeInBytesToScan: 0
      scanFuzzerMessages: false
      scanOnlyInScope: false

  - type: passiveScan-wait
    name: passiveScan-wait
    parameters:
      maxDuration: 0

  - type: activeScan
    name: activeScan
    parameters:
      addQueryParam: false
      context: 
      defaultPolicy: 
      delayInMs: 0
      handleAntiCSRFTokens: false
      injectPluginIdInHeader: false
      maxRuleDurationInMins: 0
      maxScanDurationInMins: 0
      scanHeadersAllRequests: false
      threadPerHost: 2

(4)診断実行
作成した材料を使って診断を実行する。ここではアドオン周りを常に最新の状態にする
-addonupdateオプションと、最新の診断結果をHTML出力する-last_scan_report
オプションを追加しています。
Active Scanを実行すると、Passive Scanの結果に追記されてレポーティングされます。
この辺りはGUIで診断したときと同じですね。

$ ./zap.sh -cmd -addonupdate -session [セッション保存先]/[セッションファイル名].yaml -autorun [設定ファイル保存先]/[設定ファイル名].yaml -last_scan_report [結果保存先]/[レポートファイル名].html

・Passive Scanのみのレポートイメージ f:id:chocopurin:20210606150932j:plain

・Active Scan実行のレポートイメージ f:id:chocopurin:20210606150928j:plain

Active Scanではガチで攻撃を行います。ヘタすると、診断によってWebアプリが
再起不能になる恐れもあります。バックアップと復元手順の確立は必須です。
先に★で触れたオプションなし状態での文言
「Quick Start command line~」
には、そういう背景も含んでいる気がしています。

今回診断したのはDBを使っていない非常に単純なものですが、DBアクセスが入ってくると、
SQLインジェクションの診断も実行されるため、DBデータの並びをどうするかなど、
診断発生都度、攻撃されるアプリ側の方でテストデータの仕様決めや
データ投入(もしくは洗い替え)作業が発生します。

この辺りも含めて考えると、仮にCIの中でActive Scanを実行するとなると、
確実にCI渋滞が発生しそうな気がします。
世のZAPでCIやってる方々って、どういう運用でやっているのかなあ。
そもそも、Active Scanは開発フェーズではCIではなく手動で行って、
運用フェーズにおいて時間駆動で動かすのがカタいのでしょうか。

高価なモンブランを買ってみた

以前から気になっていた高級モンブランの店。
イートインもテイクアウトも、土日祝は大行列で近寄ることすらできないのですが、
先日、時間ができたので行ってみました。
平日のAMなだけでなく、結構な雨模様。
さすがにこれで行列はないだろうと予想していたらビンゴ。
まったく並ばずに購入することができました。

モンブランとその下には白玉とあんこという構成で、なかなかの美味。
コーヒーと合わせるとなお良しでした。1980円はダテじゃない。

f:id:chocopurin:20210606150535j:plain

<戦利品>
キャプテン翼MEMORIES(1)
HGに恋する二人(3)

MY LITTLE PLANET

岩泉舞さんの短編集が発売。
かつてジャンプで読んだとき、王道少年マンガ盛りだくさんの連載陣の中、
独特の雰囲気を醸し出していたのが強烈に記憶に残っていました。
まさか新刊が発売されるとは。
1件目の書店で見つからず少し焦りましたが、すぐさま別のお店を検索。
在庫があるのを確認して急行、何とかゲットと相成りました。
これはまさに保存版ですわ。

f:id:chocopurin:20210530204145j:plain

<戦利品>
岩泉舞短編集 MY LITTLE PLANET
Sing My Pleasure(ヴィヴィ(Vo.八木海莉)
United Sparrows(FLOW)
おもいでしりとり(DIALOGUE+)
ないない(ReoNa)

ドラゴンクエスト35周年

35年前の今日、ドラゴンクエストの一作目が発売されました。
本日、それを記念した配信イベントがありました。
このご時世のはたらき方も相成って、平日の昼休みにガン見ですよ。
あ、日頃やってるドラクエウォークも記念モードです。

f:id:chocopurin:20210527213127j:plain

配信イベントの中身はいろんなところで出まくってるので、
もはや書くまでもありませんが、12はもちろん、3のリメイク、10のオフライン版、
そしてトレジャーズも注目したいところです。
https://twitter.com/DQ_PR/status/1397762966188040194
https://twitter.com/DQ_PR/status/1397761756814921729
https://twitter.com/DQ_PR/status/1397764253612789765

3はFC,SFC,Android
https://chocopurin.hatenablog.com/entry/20141001/1412170352
https://chocopurin.hatenablog.com/entry/20141019/1413727536
と散々やり込みました。
オクトパストラベラーのような雰囲気ですが、画像だけで既にやりたいモード。
そして、Android版で消えたすごろくの復活をお願いしたいところです。

ドラクエはソロでじっくりやりたい派のため、10は避けていたのですが、
11で元ネタがわからないことがあり、悔しい思いもしていました。
まさかここでオフライン版とは嬉しい不意打ち。これもたぶん買う。

新たなスピンオフのトレジャーズは、どんなゲームかわからず
今後の展開待ちですが、とりあえずカミュとマヤしゃべれ。

サンデーコラボリアルゴールド

少年サンデーとコラボしたリアルゴールドが売られています。
https://www.cocacola.co.jp/press-center/news-20210301-11
完全にノーマークだったのですが、ちょっと前にドラッグストアでたまたま発見。
いくつかデザインバリエーションがあったのですが、脳内に流れてきたのは
「まったく!ハヤテはまったく!」
の釘宮ボイス。迷うことなくナギを選択しました。

しばらく冷蔵庫で眠らせていたのですが、本日開封
当たり前ですが、中身はリアルゴールドです。
そもそも飲んだこと自体久しぶりかも。

これを書くにあたって少しリサーチしてみたのですが、ヒナギクバージョンも出てたとは。
https://twitter.com/hatakenjiro/status/1370693705087086598
https://www.cocacola.co.jp/press-center/image-library/news-20210301-11-rg-hinagiku-190ml

キャンペーンが始まってだいぶ経ってしまってますが、探すだけ探してみますか。

f:id:chocopurin:20210526204859j:plain

<戦利品>
人生イージー?(DIALOGUE+)
五等分の気持ち(中野家の五つ子)
永遠のAria雨宮天

Amazon Lookout for Metricsハンズオンに参加してみた

先週
https://chocopurin.hatenablog.com/entry/2021/05/15/211846
に引き続き、AWSエバンジェリストシリーズのハンズオンイベント(実行待ち時間中はLT聴講)に参戦してみました。
今回の題材は異常検知で、Amazon Lookout for Metricsというサービスを使います。
https://aws.amazon.com/jp/lookout-for-metrics/

キーワードだけでカオスエンジニアリングのような運用系のサービスなのかなと思って
申し込んでいたのですが、参加してみると中身は機械学習
大量のデータセットを学習させて分析ができるというものです。
異常検知ってそっちのことか。

機械学習は絡んだことも理論的なところも全く経験がなかったのですが、
公開された手順
https://github.com/harunobukameda/Amazon-Lookout-for-Metrics
をChimeのライブ中継を見ながらなぞっていったら、一通りのことは完了。
Lookout for Metrics上のゴールステータス
「Backtest in progress」
まで行くことはできました。
わからんなりに印象に残ったやり取りやワードを書き並べるとこんな感じ。

  • たくさんのデータをS3へアップロードするときは、CloudShellを経由させた方がよい
$ aws s3 sync [上げたいディレクトリ] s3://[バケット名]/[上げ先ディレクトリ(任意)]
  • 理由がわかっていて明らかに異常値扱いしていいデータはLookout for Metrics上で除外設定できる
    →定期メンテ等規則性のある停止など、除外の理由付けには注意が必要

  • ハンズオンではDetector ModeをBacksetにしているが、実際の現場で使う場合はContinurousを選択するべし(本来は固定のデータセットではなく、ライブデータになる場面の方が多い)

  • Lookout for Metricsのステータスが「Backtest complete」にならないと環境の削除ができない
    →イベント終わって50分程度経過後、分析開始から90分後くらいにようやく変わりました。

  • このイベントに限らず、学んだことのアウトプットは重要
    →別途JAWSのイベントで
     「アウトプットしないのは知的な便秘」
     という名言を知りましたが、ほんこれとしか。

前回もそうですが、このテのイベントは手順、Chime、AWSコンソール、 手元メモほか諸々、複数のウィンドウを同時進行するので、 可能であれば大きなディスプレイあった方がいいですね。