Power Automate から SOAR のWeb APIをたたいてみた

XSOARには Web APIが用意されていて、コマンドプロンプトから以下のようなコマンドを実施すると、”palybookId”で指定したプレイブックを起動したり、”details”で指定した情報をインシデント情報として記録できます。(プレイブックのインプットデータとしても活用可能)

% curl -kv 'https://XX.XXX.XX.X:XXXX/incident' -X POST -H 'Authorization: XXXXXXXXXX' -H 'Accept: application/json' -H 'Content-Type: application/json,application/xml' -d '{"name": "test 20231201","type": "Access","owner": "admin","details": "http://k2-ornata.com/%22,%22playbookId": "59daa471-0cc5-495a-8567-1a252fd020c6"}'

この情報を元に Power Automate for Desktopの「Webサービスを呼び出します」を使って、同じ様に XSOAR にアクセスしてみました。

1.まずはChatGPTに相談

curlのコマンド情報からから Webリスクエストを作成してくれるサイトはいくつかあるようですが、どれも今一つだったので、そういえばと思い ChatGPT に相談してみました。(別のコマンドを相談した時のものですが。)

ChatGPT

上記は少し違うコマンドについて相談したときのものですが、かなりいい感じで答えてくれていることがわかります。

2.Power Automateを設定

そこで 上記の ChatGPT の回答も踏まえながら、以下の通り各パラメータを設定してみました。

Power Automate – Webサービスを呼び出します

3.レスポンスエラーへの対処(400, 403)

しかしながらすんなりとはいかず、SOARからの以下のようなレスポンスエラーが頻発しました。

{"id":"bad_request","status":400,"title":"Bad request","detail":"Request body is not well-formed. It must be JSON.","error":"unexpected EOF","encrypted":false,"multires":null}

こういったエラーが XSOAR から返ってくるようであれば、以下の3点を見直してみる必要があります。

<正しくWeb APIにアクセスするポイント>
1.Authorization: に認証情報が正しく設定されているか?
2.「要求本文」に記載したデータが正しく JSON フォーマットで描かれているか?
3.「詳細」設定にて以下の図の通り「要求本文をエンコードします」がOFFになっているか?

Power Automate – Webサービスを呼び出します(詳細)

特に2.のJSONフォーマットはかなりシビアな感じなので、念入りに確認する必要があります。たとえば以下のように同じ”でくくっているように見えて実は”になっていたりするので要注意です。

"59daa471-0cc5-495a-8567-1a252fd020c6”

これらを修正することで、ようやく正常に XSOAR にアクセスすることができました。

CAMBLY で AI とのレッスンが無料で受けられると聞いてアカウント登録してみた

最近、Youtube や ブログなどで CAMBLY の AI との英語レッスンがすごい!との噂を聞きました。

しかもその AI レッスンは、CAMBLY のアカウントを作成するだけで無料で使えるとのことなので、試しにアカウントを作成しました。その時の記録をここに残しておきます。

結論としては、アカウントを登録する際にクレジットカードの情報を入れる必要もなく、手軽に使えることがわかりました。

以下にアカウント作成時の手順を記載しておきます。

CAMBLY のアカウント作成手順

まず以下のサイトにアクセスします。

CAMBLY
https://www.cambly.com/

するとCAMBLYのトップページが表示されますので、右上の「登録する」ボタンを押します。

CAMBLY トップページ

1.アカウントを登録する

アカウントの登録方法を選択する画面が表示されますので、好きな方法をアカウント登録を行います。

私は、お試しでアカウントを作成してみたいだけなので、右下のメールのアイコンを選択しました。

CAMBLY登録画面1

次にメールアドレスをパスワードを選択します。

CAMBLY登録画面2

最後に名前(ニックネーム)を登録します。

CAMBLY登録画面3

2.個人の情報を入力

ここから2ページに渡り、個人の情報をいれていきます。

まずは自分の英語力についてです。

CAMBLYパーソナライズ画面1

次に学習目標などを聞いてきます。

CAMBLYパーソナライズ画面2

3.勧誘ページをスキップ

最後に勧誘の画面が表示されます。

ここは興味がなければどんどんスキップしていきましょう。

CAMBLY勧誘画面1

次も勧誘ですのでスキップします。

CAMBLY勧誘画面2

4.CAMBLY ミニレッスンを選択

ここまでログインが完了したので、画面左下の「Camblyミニレッスン」を選択します。

CAMBLYログイン後トップ画面

するとAIとのレッスン画面に無事アクセスすることができました。

CAMBLY AI レッスン画面

こらから実際に使ってみたいと思います。

Virus Totalのsearch APIを使ってURLのカテゴリ情報を検索してみた

Virus TotalのWebサイトで URL を調査すると、こんな感じで「Details」タブにそのURLのカテゴリ情報が表示されます。

Virus Totalサイト

この情報を、Virus Totalから提供されている API を使って取得できないかと思い調べていたところ、以下のAPIで取得できることがわかりました。

api/v3/search?query=

curl --request GET \
  --url 'https://www.virustotal.com/api/v3/search?query=<検索したいURL>' \
  --header 'x-apikey: <自分のAPIキー>'

試しに1つこのAPIを使ってURLを調べてみたところ、実行結果は以下の通りとなりました。

結果の最初の方にCluster25からのレポートが記載されており、MIRAI のボットネットで利用されていることがわかります。

Virus Total – search API 実行結果1

また結果の最後の方を見ると、Sophosなど各社がこのURLのカテゴリをどう判定しているかを確認することが可能です。

Virus Total – search API実行結果2

このAPIを使えば、セキュリティ調査の効率化につながりそうです。

SOARのVirus Totalコマンドで通信先のカテゴリが取得できるか確認してみた

XSOARに提供されている Virus Totalのコマンドをつかって通信先のカテゴリを調べるには以下のコマンドを使えばいいことがわかりました。

vt-search コマンド

このコマンドはPlaygroundにて以下のようにコマンドを実行します。

!vt-search query=<調査したいURL>

その結果、下図のようにカテゴリを取得することができました。

XSOAR – Playground

今回のURLについては、
・Forcepoint ThreatSeeker
・Sophos
・Xcitium
の3社からの報告が上がっているようですが、個人的にいくつかURLを調べてみたところ、Sophos が結構いろいろなURLに対して報告を上げているような気がします。

iMac の純正マウスがある日突然つながらなくなったので、マウスの裏にあるスイッチをオフ・オンしたら再接続できた件

ある日突然、iMac で使っていた純正マウスが Bluetoothで接続されなくなりました。

しばらくは原因がわからず、有線のマウスで対応していましたが、そのあとマウスの裏にスイッチ(下図の赤枠部分)があることに気がつき、一度そのスイッチをオフ・オンしたところ無事に再接続されました。

Mac純正マウス

なお、上記のオフ・オンのタイミングで、Macの「システム環境設定」にある「マウス」の設定画面に「System Administrator’s Mouse」が表示され、接続済みとなりました。

iMac マウス設定画面

マウスのオフ・オンでもダメな場合は、上記の設定を確認してみることをおすすめします。

Open Interpreter を Macにインストールしようとしたらエラーがでた話

最近 Open Interpreterの記事をいろいろ見つけたので自分のMacにもインストールしようとしてみたところ、以下のようなエラーが出ました。

エラーが大量発生

% pip install open-interpreter
ERROR: Ignored the following versions that require a different python version: 0.0.1 Requires-Python >=3.10,<4.0; 0.0.2 Requires-Python >=3.10,<4.0; 0.0.21 Requires-Python >=3.10,<4.0; 0.0.22 Requires-Python >=3.10,<4.0; 0.0.221 ・・・
・・・
Requires-Python >=3.10,<4.0; 0.1.4 Requires-Python >=3.10,<4.0
ERROR: Could not find a version that satisfies the requirement open-interpreter (from versions: none)
ERROR: No matching distribution found for open-interpreter

Pythonのバージョンを3.10.0にアップして成功

結論としては、どうやら Macの Pythonのバージョンが Python 3.8.3 のままになっていたのが原因のようでした。

以下の要領で 3.10.0 にアップしたところ、Open Interpreterを正常にインストールすることができました。

% python --version
Python 3.8.3
% pyenv install -list
Available versions:
・・・
  3.10.0
  3.10-dev
  3.11-dev
・・・
  stackless-3.7.5
% pyenv install 3.10.0
python-build: use openssl@1.1 from homebrew
・・・
Installed Python-3.10.0 to /・・・/.pyenv/versions/3.10.0
% pyenv local 3.10.0
% Python -V
Python 3.10.0
% pip install open-interpreter
Collecting open-interpreter
  Downloading open_interpreter-0.1.4-py3-none-any.whl (35 kB)
・・・
WARNING: You are using pip version 21.2.3; however, version 23.2.1 is available.
You should consider upgrading via the '/Users/katsuhiro.kurita/.pyenv/versions/3.10.0/bin/python3.10 -m pip install --upgrade pip' command.

Marmaid でシーケンス図を作成してみた

シーケンス図とか最初はPower Pointで作っていましたが、条件分岐とか複雑なものをつくり始めたらつらくなってきたので、Marmaidというツールを試しに使ってみました。

1.mermaid live editorにアクセス

mermaid live editorはオンラインにてフリーで利用でき、アカウントも作成する必要がないので、誰でも自由に Markdown形式の記述からシーケンス図を作成できてしまいます。

mermaid live editor
https://mermaid-js.github.io/mermaid-live-editor/edit

2.Markdown形式でシーケンスを作成

Markdown形式ってなんだか難しそうに聞こえますが、意外と簡単です。

初めて作成した私でも下記の記述程度であれば、見よう見までで30分〜1時間程度でかけてしまいました。

sequenceDiagram ← シーケンズ図であることを宣言
    Ar->>Xs: data ← ArからXsにメッセージ(data)を渡す場合はこう書く
    Note right of Ar: IoC etc ← 黄色い付箋にノートが書ける
    Xs->>Xs: data check
    alt C2 ← 条件分岐を記載
        Xs ->> Xs: transparent check;
        alt blocked
            Xs->>Xs: write down
        else passed
            Xs->>So: investigation request
        end
    else phishing
        Xs ->> Xs: transparent check
        alt blocked
            Xs->>Xs: write down
        else passed
            Xs->>So: investigation request
        end
    else others
        Xs ->> Vi: evaluation check
        Vi ->> Xs: result
        Xs ->> Xs: result check
        alt benign
            Xs ->> Xs: write down
        else malignant
            Xs ->> So: investigation request
        end
    end
    Xs ->> Ar:investigation result
    So ->> So:investiogate
    So ->> Cs:investigation result
    So ->> Ar:investigation result
    Cs ->> Cs:traffic number check
    alt over N
        Cs ->> Si: white regist
    else under N
        Cs ->> Cs: block request
    end
    Cs ->> Ar: result

3.できあがったシーケンス図を確認

mermaid live editorの左ペインで、2.に掲載したMarkdown形式のシーケンスを書いていると、右ペインにリアルタイムでシーケンス図が描かれます。

これはおもった以上に便利ですね。

mermaid live editor

いきなりPower Point でこのシーケンス図を描こうとするとかなり難儀ですが、一旦、mermaid live editorで作成しておいて、後で Power Point で清書するという使い方もありかと思います。

Power Point 形式でデータ出力してくれるとありがたいですが。。。。

参考サイト:

・エクセルでシーケンス図書くのやめませんか?mermaidが便利ですよ(Qiita)
https://qiita.com/naoki114/items/f46082e488fcb1562662

・markdownでシーケンス図を書こう
https://qiita.com/konitech913/items/90f91687cfe7ece50020

サンプル2:

sequenceDiagram
    Ar->>Xs: data
    Note right of Ar: IoC etc
    alt C2
        Xs->>Xs: write down
    else phishing
        Xs ->> Xs: transparent check
        Xs->>Xs: write down
    else others
        Xs ->> Vi: evaluation check
        Vi ->> Xs: result
        Xs ->> Xs: result check
    end
    Xs ->> So:investigation request
    Xs ->> Ar:investigation result
    So ->> So:investiogate
    So ->> Cs:investigation result
    So ->> Ar:investigation result
    Cs ->> Cs:remediation dicision
    alt benign
        Cs ->> Cs: block request
    else malignant
        Cs ->> So: quarantine request
        Cs ->> As: quarantine report
        So ->> So: quarantine execute
        So ->> Ci: quarantine fin report
        As ->> Cs: status report
    end
    Cs ->> Ar: result

MACでスクリーンショットを撮った後も画面が暗いままになっている場合の対処方法

先日、Macにて control+shift+5 でスナップショットを撮ってみたところ、スナップショットを撮り終わっているにもかかわらず、画面が暗いままになっている事象が発生しました。

しばらくは Macのバグだろうとおもっていたのですが、どうやら使い方を間違っているようでしたのでここに記録しておきます。

スナップショットではなく録画になっている可能性あり

もし上記の現象が発生している場合は、control+shift+5 を押した時に下部に表示されるツールバーの右端が、「収録」ではなく「取り込む」になっているか確認してください。

もし「収録」となっている場合は「スナップショットモード」ではなく「録画モード」になっていますので、そのツールバーの左から3番目(選択部分を取り込む)などを選択し直すと改善されます。

すごくささいなミスですが、意外と気がつかないですね。

Python で requests を使って Webサイトにアクセスする際に、タイムアウトを設定してみた

前のブログで bandit を利用し、Webサイトのスクレイピングを行っている pythonプログラムのセキュリティチェックを行ってみました。

http://k2-ornata.com/python_security_check_with_bandit/

すると、上記ブログにも記載したとおり「Requests call without timeout」という警告が出てしまった為、警告の指示通り、requests の部分に timeout を設定してみることにしました。

1.修正前

修正前は、ただ「requests.get(url)」としているだけでした。

response = requests.get(url)
html = response.content.decode("utf-8")

2.修正後

「requests.get(url)」としていた部分を「requests.get(url, timeout=(6.0, 10.0))」とし、タイムアウトが発生した際の例外処理を行っています。

from requests.exceptions import Timeout
・・・
# Get the HTML content of the top page
try:
    response = requests.get(url, timeout=(6.0, 10.0))
    html = response.content.decode("utf-8")
except Timeout:
    print(f"\n[Timeout {url}]")

なお、timeout の後ろに2つ数字を書いている理由ですが、
timeoutには、connect timeout(前) と read timeout(後) の2種類がある為です。

この2種類のタイムアウトについては、以下のサイトで詳しく説明されていますのでご紹介しておきます。(ありがとうございました!)

【Python】requestsを使うときは必ずtimeoutを設定するべき(Cosnomi Blog)https://blog.cosnomi.com/posts/1259/

3.bandit 実行結果

以下が修正後の pythonプログラムに対する実行結果です。

「Test results:」が「No issues identified.」となっており、問題が解消されたことが確認できました。

% bandit test.py
[main]	INFO	profile include tests: None
[main]	INFO	profile exclude tests: None
[main]	INFO	cli include tests: None
[main]	INFO	cli exclude tests: None
[main]	INFO	running on Python 3.8.3
[node_visitor]	WARNING	Unable to find qualified name for module: test.py
Run started:2023-08-14 08:04:48.814175

Test results:
	No issues identified.

Code scanned:
	Total lines of code: 53
	Total lines skipped (#nosec): 0

Run metrics:
	Total issues (by severity):
		Undefined: 0
		Low: 0
		Medium: 0
		High: 0
	Total issues (by confidence):
		Undefined: 0
		Low: 0
		Medium: 0
		High: 0
Files skipped (0):
%

bandit を使って pythonコードのセキュリティチェックを行ってみた

python言語ってC言語などにくらべると安全そうなイメージがありますが、やはりセキュリティには気をつけないといけない、ということで 開発した python コードが安全かどうか調べるツールがないか調べてみました。

すると、bandit というツールが無償で利用できることがわかりました。

そこでこのツールを使って自分で開発した python プログラムのセキュリティチェックを行ってみましたのでここに記録しておきます。

なお、この bandit でチェックする前に、python のコーディング規約チェッカーである PEP 8 を使ってある程度(- -; コーディング規約に従うようにプログラムを修正しております。

この PEP 8 の PyCharm での利用方法については以下のサイトに記載しております。

http://k2-ornata.com/pychart_pep-8_check/

それでは bandit をインストールするところから行きたいと思います。

1.bandit のインストール

bandit のインストールは非常に簡単です。

pip がインストールされていれば、以下のコマンドを実行するだけです。

$ pip install pandit

なお、私の環境では pythonのバージョンがデフォルトで 2.X系になってしまっていた為、以下のような警告が出てしまいました。

bandit インストール時の警告

これを3系に変えようと思い pyenv を利用してみましたが一筋縄ではいかず、以下のサイトに助けていただきうまくいきました。ありがとうございました。m(_ _)m

pyenvでPythonのバージョンが切り替わらないときの対処方法【Mac Apple silicon環境】(ヒトリセカイ)https://hitori-sekai.com/python/error-pyenv/

2.banditの実行

bandit の実行も非常に簡単です。以下のとおりコマンドを打つだけです。

$ bandit <プログラム名>

実際に自分で作成したスクレイピングを行う pythonプログラムに対して実行してみた結果は以下の通りです。

bandit 実行結果

ちょっと上の画像は見にくいので、テキストでも掲載しておきます。

% bandit test.py
[main]	INFO	profile include tests: None
[main]	INFO	profile exclude tests: None
[main]	INFO	cli include tests: None
[main]	INFO	cli exclude tests: None
[main]	INFO	running on Python 3.8.3
[node_visitor]	WARNING	Unable to find qualified name for module: test.py
Run started:2023-08-14 01:37:45.050500

Test results:
>> Issue: [B113:request_without_timeout] Requests call without timeout
   Severity: Medium   Confidence: Low
   CWE: CWE-400 (https://cwe.mitre.org/data/definitions/400.html)
   More Info: https://bandit.readthedocs.io/en/1.7.5/plugins/b113_request_without_timeout.html
   Location: test.py:31:11
30	# Get the HTML content of the top page
31	response = requests.get(url)
32	html = response.content.decode("utf-8")

--------------------------------------------------
>> Issue: [B113:request_without_timeout] Requests call without timeout
   Severity: Medium   Confidence: Low
   CWE: CWE-400 (https://cwe.mitre.org/data/definitions/400.html)
   More Info: https://bandit.readthedocs.io/en/1.7.5/plugins/b113_request_without_timeout.html
   Location: test.py:62:15
61
62	    response = requests.get(link)
63	    html = response.content.decode("utf-8")

--------------------------------------------------

Code scanned:
	Total lines of code: 46
	Total lines skipped (#nosec): 0

Run metrics:
	Total issues (by severity):
		Undefined: 0
		Low: 0
		Medium: 2
		High: 0
	Total issues (by confidence):
		Undefined: 0
		Low: 2
		Medium: 0
		High: 0
Files skipped (0):
%

3.bandit 実行結果の考察

どうやら「Test results:」という部分にプログラムの問題点が列挙されているようです。

2つ「Issue」が記載されていますが、どちらも Requests call without timeout となっています。

実際このプログラムでは指定したWebサイトからデータを取ってきているのですが、その時にタイムアウトの処理をしていませんでした。

たしかにこのままだと、Webサイトから応答が返ってくるまで繋ぎっぱなしになってしまい、そのまま何度もこのプログラムを実行するとサーバもクライアントもリソーズ不足になってしまいそうです。

改めて、こういったセキュリティチェック(ツール)の重要性を認識することができました。