白”雪姫”の雑なエンジニアブログ

ダイアリーがなくなってしまったため、エンジニアブログとして再出発

JAWS-UG 福岡 #18: JAWS-UGクラウド女子会共催スペシャルに登壇してきました。

登壇経緯

去る6月29日にJAWS-UG クラウド女子会に参加した際に運営の五味さんとお話ししてて

私「運営入りたいです~」

五味さん(以下:な)「おぉ~、まじでー、一緒にやりましょう」

な「そういえば、7月に福岡で私登壇しないと行けないのだけど、実は自社の外せない用事入っちゃってさー。。誰か登壇できる人いる?」

私「内容によります。。」

な「re:Inforceのre:Capなのだけど、誰か出来る?」

せ「それ、白"雪姫"さん特化じゃないですかー」

な「じゃあ、せっかくなので宜しく!」

私「はーい」

という感じで代理登壇が決まりました。

登壇内容

勢いで登壇が決まってしまったので、

「Re:Capの中でどんなこと話せば良いのかな・・・?」

なんて思ってて、当該のJAWS-FUKのConpassを見てみる・・・あれ・・・?何も決まってない・・・?

それなら、私はやってみたかった、今回の新機能

Amazon GuardDuty Malware Protection for Amazon S3

を試してみようではないか! と言うことで、実際に試して、資料を作ることにしました。

登壇資料はこちら

結果

資料の中でも書いてますが、実際サクッと設定が可能です。

とても簡単です。IAMの設定さえ気をつければ・・・

安心感が持てます。

一つ言うなら、オンデマンドスキャンが遅い と言うことでしょうか。

登壇で発表した中で先送りにしてる「既にバケット内に存在して居るオブジェクトのスキャン」が遅いです。

登壇後5日経ちますが、今回の設定でまだ終わってません。。

もう少し早くなると嬉しいなとちょっと思いました。

この状態でもバケットにテストデータをアップロードしたら、15分くらいで検知してくれたのでそこは素晴らしいなと思います。

AWS Summit Japan 2024 参加レポート

AWS Summitって?

Amazon Web Serviceの国内最大のイベントです。 毎年この時期に行われています。 最近だと、

AWS re:InforceAWS Summit Japan 2024AWS re:Invent

みたいな流れになることが多いですね。

re:Inforceとre:Inventはアメリカで行われているイベントですが、AWS Summit Japanは日本で行われています。 ※AWS Summitそのものは世界各国で行われてます

参加したセッション

セッション情報はこちら

参加したのは

  • 両日10時から行われているKeynote
  • 20日AWS JAM
  • 事例セッションCUS-46

参加した時のレポートの前に・・・・

はい、実は前日に自宅の環境を切り替えていたため、日付的には当日の2時30分まで、換装作業してて完全に寝不足になっていました。。 こちらがそのポストです

そんなわけで、演出のため暗めになっているDAY1のKeynoteに関しては、会場内では寝落ちしかねないので、途中からで認定者ラウンジで聴講しました。

DAY1のKeynote

AI系を強化していくと言うのがやはり流行のようです。 AWSももれなく強化していくよという事だった感じです。

認定者資格も追加したよとのこと

また、毎年このタイミングでローンチが大体あるのですが、今回は、 Amazon Qというサービスが日本語検索ができるよというローンチ情報でした。

DAY 1はこの後AWS JAMでした。

AWS JAM

前回、お仕事で参加してみませんか?という事で参加したときはそこそこ難しい と言う感じだったのですが、今回はレベルが違う・・・。

AWSに記載しているレベルで言うと 100が入門レベル 200が中級レベル 300が上級レベル と言う感じです。詳細はこちら(セッションレベルではありますが参考にはなるかと思います)

また、問題の内容等は言えませんが複数の問題が出てくる感じです。

前回は レベル100が4問 レベル200が3問 レベル300が1問 みたいな感じでした。

なので、少しは解けたな。楽しかったなと言う感想です。

もちろん、時間数や問題集は、その時その時で変わる物になります。 その上での今回。

レベル100が4問 レベル200が4問 レベル300が2問

流石Summitですね。もちろん、私も過去の記事に上げているようにレベルアップはできているかなと思って挑戦をしてきました。

結果は、当時と違って全然低かったけど、1問だけ苦手な物があり、全く分からなかったです。 が、それ以外はこうすればできるかね?みたいな感じになりました。 お陰様で、ほぼノーヒント、チームメンバーの力もあり、バグを除けば、残り30分でレベル300が1.5問と言った感じでした。

Day 2 Keynot

この日はちゃんと朝から入れました。 きちんと事例で、こういうことでAIが使われる、活用できる。 だからAIもAWSでみんなで勉強していこう みたいな感じです。

事例セッションCUS-46

タイトルは、「より良い視聴体験を求めて、ニコニコ動画の配信基盤刷新の裏舞台」 ・・・今、話題ですね。 ニコニコ動画等角川サービスサイバー攻撃 こちらの復旧作業の中、登壇される(多分こちらが先に決まっていた)とのことで、満員御礼、立ち見も限界まで と言う感じでした。

話を聞いてて「おー、凄い、こんなにアップデートしてたんだ」となっていました。 この事例周りはまた見てみたいなと思っています。

全体的感想

やはり、インプットは良い物です。 もちろん、簡単なアウトプットしかできてないのはありますがレポートを書いてる状態ですが、全く書かないより良いかなと思ってます。

勿論きちんと参加したのは上記のみなのですが、企業ブースやミニセッションはいくつか参加してきました。 そのインプットができてとても良かったです。

余談

  • バズりました。 1日の並びが凄すぎて呟いたら、バズりました。 自分でも驚いています。

  • X上でのリアルタイムレポート X上で、検索する際に 「#AWSSummit @yuri_snowwhite」 と検索していただければ、私のアカウントリアルタイムレポートが見れます

  • 笑い話 KeyNoteは英語で話される事が多いので同時翻訳は必須だったりするのですが使わずにレポートしてたら、初日に夕食をご一緒していただいた方々に「翻訳はやない?というか、Xしながら見てたんだけど話してることの翻訳よりTweet早かったけど何が起きた?」と言われました。(笑)

vuls脆弱性スキャナをインストールして使ってみた。

経緯

自宅のサーバ(CentOS 7.9)のリプレースに伴って、共用で入れていたOpenVASが無くなるので、それを機に新しいツールを使ってみようと思ったので立ち上げてみました。

今までのマシンを止めてリプレースに至った理由

  • セキュリティを担当しているのに長年自宅で使っているサーバが、サポート期限が切れていた事(理由は後述)
    • OpenVASが何故かバージョンを上げると動かない
    • 元々別用途として使っていた個人の音楽ストリーミングシステムがCentOS8以降(もしくは互換OS)が非対応なこと
    • 色々なOSSを駆使して、WAFとLoggingの要塞と化していたこと

がありました。

一番メインで作ってるストリーミングのOSSCentOSの8以降は動かない、個人で保有している音楽要領が数百GBに及んでクラウドで稼働させるにはちょっと金額がという状態だったため、リプレースを踏み悩んでいたのですが、少し前(前々職)で退職の際に、古いSynologyのDS916+と引っ越し後にGMKTecという最新機を手に入れていたのでちょっとずつ機能移管をして先日リプレースが完了したので入れたという状態です。

余談

それでもCentOS7系はもうだいぶ古いでしょって突っ込みがあるかも知れませんが、記載しているWAFとrsysglogが少しやっかいで、内部及び外部からのアクセス時に特定通信をウィルススキャンをする様にしていたので簡単に止められた無かったのもあります。 ですが、今回CentOS7の当該システムのサポート及び定義データの更新が終了に伴って停止するという事も必要でした。

リプレース時に使ったOS

今回、色々ベースOSについては悩んだのですが、どうしても移管しないと行けない物で

  • DNS(bind, bind-utils, bind-chroot)
  • streaming system(Subsonic互換で今回はJPSonicへ移管しました)

は必須で必要だったので、こちらが対応している物という前提条件があったので、Almah Linux 9を使うことにしました。

インストール

vulsは、OSSでできている脆弱性スキャナになります。 今後も利用するという事を前提にDockerとかではなく、Manualインストールを行います。 インストール手順はリンク先そのままを利用しましたが、詳細を軽く書いておこうと思います。 また、実際にやるときはsudo権限を保有しているユーザで実施してください。 記載しているユーザなどは各位で変えていただく必要があります。

GOのインストール

GOの最新版URLはこちら

$ export latest_version=1.14.2 # Latest Go release as of writing
$ sudo yum -y install sqlite git gcc make wget
$ wget https://dl.google.com/go/go$latest_version.linux-amd64.tar.gz
$ sudo tar -C /usr/local -xzf go$latest_version.linux-amd64.tar.gz
$ mkdir $HOME/go

環境変数にパスを通して、再ログインしても平気な設定を追加

$ sudo vi /etc/profile.d/goenv.sh
下記を追加して保存
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
変数読み込み
$ source /etc/profile.d/goenv.sh

脆弱性スキャナーと基本的な脆弱性情報をインストール 1

$ sudo mkdir /var/log/vuls
$ sudo chown <user> /var/log/vuls
$ sudo chmod 700 /var/log/vuls
$ mkdir -p $GOPATH/src/github.com/vulsio
$ cd $GOPATH/src/github.com/vulsio
$ git clone https://github.com/vulsio/go-cve-dictionary.git
$ cd go-cve-dictionary
$ make install
$ cd $HOME
$ go-cve-dictionary fetch nvd
$ ls -alh cve.sqlite3
$ cd $HOME
$ go-cve-dictionary fetch jvn
$ ls -alh cve.sqlite3
$ mkdir -p $GOPATH/src/github.com/vulsio
$ cd $GOPATH/src/github.com/vulsio
$ git clone https://github.com/vulsio/goval-dictionary.git
$ cd goval-dictionary
$ make install
$ ln -s $GOPATH/src/github.com/vulsio/goval-dictionary/oval.sqlite3 $HOME/oval.sqlite3

各OSごとの脆弱性情報のインストール

記載しておきますが、必要な物だけインストールすれば良いかと思います。 私は以下をインストールしましたが、それぞれ必要な物を公式Githubを参照にインストールしてください

Redhat系向け
$ goval-dictionary fetch redhat 5 6 7 8 9
Ubuntu向け
$ goval-dictionary fetch ubuntu 14.04 16.04 18.04 20.04 21.04 21.10 22.04 22.10 23.04 23.10 24.04
Amazon Linux向け
$ goval-dictionary fetch amazon 1 2 2022 2023

脆弱性スキャナーと基本的な脆弱性情報をインストール 2

$ sudo mkdir /var/log/gost
$ sudo chown <user> /var/log/gost
$ sudo chmod 700 /var/log/gost
$ mkdir -p $GOPATH/src/github.com/vulsio
$ cd $GOPATH/src/github.com/vulsio
$ git clone https://github.com/vulsio/gost.git
$ cd gost
$ make install
$ ln -s $GOPATH/src/github.com/vulsio/gost/gost.sqlite3 $HOME/gost.sqlite

こちらも派閥ごと単位で取得してます。 私は以下を取得

Redhat系
$ gost fetch redhat 
Ubuntu系
$ gost fetch ubuntu 
Windows系
$ gost fetch microsoft

侵入検査ツールのインストール

$ sudo mkdir /var/log/go-exploitdb
$ sudo chown <user> /var/log/go-exploitdb
$ sudo chmod 700 /var/log/go-exploitdb
$ mkdir -p $GOPATH/src/github.com/vulsio
$ cd $GOPATH/src/github.com/vulsio
$ git clone https://github.com/vulsio/go-exploitdb.git
$ cd go-exploitdb
$ make install
$ ln -s $GOPATH/src/github.com/vulsio/go-exploitdb/go-exploitdb.sqlite3 $HOME/go-exploitdb.sqlite3
$ go-exploitdb fetch exploitdb
$ go-exploitdb fetch awesomepoc
$ go-exploitdb fetch githubrepos
$ go-exploitdb fetch inthewild
$ sudo mkdir /var/log/go-msfdb
$ sudo chown <user> /var/log/go-msfdb
$ sudo chmod 700 /var/log/go-msfdb
$ mkdir -p $GOPATH/src/github.com/vulsio
$ cd $GOPATH/src/github.com/vulsio
$ git clone https://github.com/vulsio/go-msfdb.git
$ cd go-msfdb
$ make install
$ ln -s $GOPATH/src/github.com/vulsio/go-msfdb/go-msfdb.sqlite3 $HOME/go-msfdb.sqlite3
$ go-msfdb fetch msfdb
$ sudo mkdir /var/log/go-kev
$ sudo chown <user> /var/log/go-kev
$ sudo chmod 700 /var/log/go-kev
$ mkdir -p $GOPATH/src/github.com/vulsio
$ cd $GOPATH/src/github.com/vulsio
$ git clone https://github.com/vulsio/go-kev.git
$ cd go-kev
$ make install
$ ln -s $GOPATH/src/github.com/vulsio/go-kev/go-kev.sqlite3 $HOME/go-kev.sqlite3
$ go-kev fetch kevuln
$ sudo mkdir /var/log/go-cti
$ sudo chown <user> /var/log/go-cti
$ sudo chmod 700 /var/log/go-cti
$ mkdir -p $GOPATH/src/github.com/vulsio
$ cd $GOPATH/src/github.com/vulsio
$ git clone https://github.com/vulsio/go-cti.git
$ cd go-cti
$ make install
$ ln -s $GOPATH/src/github.com/vulsio/go-cti/go-cti.sqlite3 $HOME/go-cti.sqlite3
$ go-cti fetch threat
$ mkdir -p $GOPATH/src/github.com/future-architect
$ cd $GOPATH/src/github.com/future-architect
$ git clone https://github.com/future-architect/vuls.git
$ cd vuls
$ make install
$ rm -rf $GOPATH/pkg/linux_amd64/github.com/future-architect/vuls/
$ rm -rf $GOPATH/src/github.com/future-architect/vuls/
$ cd $GOPATH/src/github.com/future-architect
$ git clone https://github.com/future-architect/vuls.git
$ cd vuls
$ make install

インストールをしたマシンをスキャン

$ cd $HOME
$ vi config.toml
以下を記載して保存
[servers]

[servers.localhost]
host    =       "localhost"
port    =       "local"

作成したconfigの正常性確認

$ vuls configtest

実際のスキャン

$ vuls scan

レポートの取り出し

$ vuls report -format-one-line-text

レポートの出し方は色々あります。 公式ページを参照して出してみてください。

  • サンプルレポート
One Line Summary
================
localhost       Total: 496 (Critical:5 High:77 Medium:398 Low:16 ?:0)           0/496 Fixed     994 installed   60 poc  0 exploits      cisa: 0, uscert: 0, jpcert: 0 alerts

こんな感じで出ます。

リモートにスキャン

こっちがちょっと面倒です。条件は以下

  • 鍵認証でSSHできること
  • 接続先のユーザがsudo権限を持っていること
  • 鍵のパスワードが無い事

となります。 設定を実施の上、ローカルスキャンをしたときに作ったconfigデータに追記します。

末尾に以下を追記

[servers."remote servername"]
user    =       "remote username"
host    =       "remote host"
port    =       "SSH port"
keyPath =       "secrets_authorized_key"

そしてスキャンを実行

$ vuls scan "remote servername"

レポートの出し方は同じです。

雑談2

vuls tui という物もあり、こちらを用いるとグラフィカルだったりCLIでも比較的見やすい状態でレポートを確認することができます。 試してみてください。

所感

OSSAWS Inspectorと言った感じでした。 内部脆弱性スキャンを行うときには少し重宝しそうです。

良くないなって思う点

リモートスキャンはSSHが必須となっているみたいです。 そのため、SSHが出来ない物にはスキャンでいないなー不便だなぁとは思いました。 なにか別の方法有るのかな?ともちょっと思って居ます。

良いなと思う点

比較的、設定は大変ですが一度設定してしまえば定期的スキャンは簡単だなぁと思っています。 また、同時に通知などもメールだけでは無くSlack等に飛ばせるというのはとても良いなと思いました。

総合的に思うこと

OpenVASが比較的動かない環境では動かない みたいな状態になっているのもあって、可能ならOpenVASの代替になる物が欲しいなと思っています。 完全AgentLess、外部や内部にスキャンをかけられるもの(SSH等も不要)

スペックとか確認してだけど、元々OpenVASから袂別れしたNessusが再びCommunity Editonを出したと効いているので、実施してみたいなとも思ってたりします。

第33回SecurityJAWSに登壇しました。

  • 概要

JAWSUGのコミュニティの1つであるSecurityJAWSに登壇してきました。 私の最近の専門分野の所です。

  • 登壇のきっかけ

実は、去るJAWS DAYSのCfXで申し込みをした際に、内容的に「Security JAWSで登壇してみませんか?」とご興味を頂いたのです。 JAWS DAYSは残念ながら落選となってしまったのですが、同時にこちらの登壇が決まるみたいな状態でした。

もちろん、2つ返事で「是非、登壇させてください」とお願いをさせていただきました。

  • 発表内容

CfXには実は2種類のお話しを申し込みしていました。 ところが、「うまくまとめて20分くらいの登壇をお願いしたい」という話だったので、まとめて 「AWS LambdaとAmazon API GatewayPCI DSSに準拠したお話」 とさせていただきました。

発表資料はこちら

  • 感想

もの凄く、緊張しました。 なぜならブログにもアフターレポートとして記事にしており、何度か色々登壇させてもらっていますが、20分という長丁場のLTは今回が初挑戦でした。 実は、壁打ちしたときは26分だったので、このスライドでよゆーっしょと思ったのですが、話して居る間に原稿も半分以上飛んで行きまして、実際は16分で終了に・・・・。 今度からは20分と言われたときは、1.3〜1.5倍の枚数くらいは用意しておこうと思った次第です。 ですが、質問とかにはきちんとお答えできたと思います。 懇親会でも色々お話ししてて、新たに勉強になるなぁと思いました。

  • ネタばらしというなの関連記事として

今回、JAWS DAYSの落選をきっかけに登壇前に、ブログ記事を先行して書いています。そちらを記載させていただければと思います。

こんな感じです。

  • 運営の吉江さんから出ている登壇の際にお出ししてた要件系の情報

では。

EventBridgeによるEC2インスタンスの自動起動・停止のやり方。

本日のお話

先日、JAWS女子会に参加した時のレポートにも記載したEventBridgeでEC2インスタンス自動起動・停止を行おう

と言う記事です。

利用するサービス

  • IAMロール
  • EventBridge

だけです。

事前準備

]

  • EventBridge scheduler用のIAMロールの作成

カスタム信頼ポリシーで以下を登録、権限はEC2 fullAccess(実際は、EC2:Stop Instance,EC2:Start Instanceだけで動きます。)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

実際に設定をして見ます。

  1. EventBridgeの左ペインからスケジュールを選択

  1. 右ペインの下の方にある「ルール作成」を選択

スケジュール名・説明・スケジュールのパターンを設定して次へ遷移します。

 

この時、注意することとして、最下部にある

  • フレックスウィンドウタイム

は、ご自身の環境に合わせて必ず設定を行ってください。

  • cron方式

を選択の場合は、AWS独自の書き方があります。参照して登録しましょう。

  1. 「すべてのAPI」に切り替えます。

  2. 検索窓で、 EC2と検索を行い、結果に出てきてる Amazon EC2を選択

  3. 起動ならstart、停止ならstopを検索し選択

  4. 選択すると自動で下の方に遷移するので、MyDataとなっているところを事前準備で調べていたInstanceIDへ書換(この時インスタンスIDを""で囲い,で区切ると複数台の設定が可能です。)

  5. 最後の遷移で、IAMロールのプルダウンがあるため、事前準備で作成したIAMロールを紐付けます。  

動作確認

実行時間後にInstanceが停止、起動をしていることを確認します。 ※今回は設定のみの説明のため、記載はしていません

所感

本件はセキュリティ関係なく、基幹システムや開発用などのコスト削減には有用だなと思っています。 理由としては、いくつかありますが、「利用していない時間の停止が可能だから」が全てになります。 勿論、繁忙期などがあれば、スケジュールの停止なども可能です。 クラウド破産などという言葉が出てきているくらいですので、おさえられるところは抑えた方が良いのかな。なんて思ってこの記事を改めて書かせてもらいました。