pseudowire

調べたことを書き残す

ネットワークセキュリティメッシュについてChatGPTに聞いてみた

ネットワークセキュリティメッシュとゼロトラストネットワークの違いはなに?

ネットワークセキュリティメッシュ(Network Security Mesh)は、ネットワーク内の各コンポーネントやサービスにセキュリティ機能を組み込むアプローチです。ネットワーク内のエンドポイントやサーバーにセキュリティ機能を配置し、データの流れや通信パターンを監視・制御します。このアプローチでは、ネットワーク内の各コンポーネントがセキュリティの責任を持ち、統合的なセキュリティを提供します。

一方、ゼロトラストネットワーク(Zero Trust Network)は、信頼性を前提とせず、すべてのネットワーク通信を厳密に検証するセキュリティモデルです。ゼロトラストの考え方では、ネットワーク内のユーザーやデバイスが自動的に信頼されるわけではなく、ユーザーの認証、エンドポイントのセキュリティ評価、トラフィックの暗号化などの厳格なセキュリティ制御を行います。このアプローチにより、ユーザーがネットワークに接続している限り、常に検証とアクセス制御が行われます。

ネットワークセキュリティメッシュと多層防御の違いはなに?

簡潔に言えば、ネットワークセキュリティメッシュはネットワーク内のコンポーネントにセキュリティ機能を組み込むアプローチであり、多層防御は複数のセキュリティ対策を重ねるアプローチです。ネットワークセキュリティメッシュはネットワーク内の統合的なセキュリティを強化するために使用され、多層防御は攻撃者の侵入を防ぐために複数のセキュリティレイヤーを組み合わせるために使用されます。

上記の違いの観点を踏まえて、ネットワークセキュリティメッシュの実現方法を、より具体的に述べよ

  • エンドポイントセキュリティ

  • アプリケーションセキュリティ:アプリケーションレベルのセキュリティ機能や認証・認可

  • マイクロセグメンテーション

  • サービスメッシュ:NW内のマイクロサービスやコンテナ環境におけるサービス間通信へのセキュリティ機能の組み込み
  • それって結局、異なるレイヤーでセキュリティ対策してるってことになるんじゃないの?

    ネットワークセキュリティメッシュはネットワーク内のコンポーネントにセキュリティ機能を組み込んで統合的なセキュリティを提供し、多層防御は異なるレイヤーに複数のセキュリティ対策を組み合わせて攻撃を防ぎます。

    アプローチやコンセプトが違うとしても、結局やることは一緒なんでしょ?

    ご指摘いただいた通り、ネットワークセキュリティメッシュと多層防御は、セキュリティを強化するために共通の目標を持っており、同様のセキュリティ対策を実施する場合もあります。 両者の違いは、アプローチやコンセプトにあります。 ただし、結果として実施されるセキュリティ対策は一部共通しているかもしれません。例えば、エンドポイントセキュリティやファイアウォール、侵入検知システム、アンチウイルスソフトウェア、パッチ管理などは、両方のアプローチで一般的に使用されるセキュリティ対策です。

    共通していないものはなに?

    セキュリティ制御の範囲: ネットワークセキュリティメッシュでは、ネットワーク内のコンポーネント間の通信やデータの流れに対するセキュリティ制御を重視します。一方、多層防御では、エンドポイントからネットワーク全体まで、幅広い範囲でセキュリティ対策を展開します。

    上記を踏まえて、アプローチやコンセプトの違い以外で、ネットワークセキュリティメッシュ独自の実装方法はなに?

  • マイクロサービスアーキテクチャへの適用:マイクロサービスアーキテクチャやコンテナ化された環境に特に適しています。

  • サイドカーコンテナの使用:サイドカーコンテナと呼ばれる追加のコンテナをネットワーク内の各サービスにデプロイしてトラフィックの監視や制御を担当します。代表的なサイドカーコンテナとしては、EnvoyやLinkerdがあります。

  • プロキシベースのセキュリティ制御

  • 動的な構成管理: ネットワークセキュリティメッシュでは、セキュリティポリシーやルールの管理を動的に行うことができます。
  • どのように動的にルールやポリシーを変更するの?

  • セキュリティメッシュコントロールプレーンの使用:ルールの適用や変更を制御し、ネットワーク内のコンポーネントにポリシーを伝達します。

  • APIやコンソールを介した管理:管理用APIや管理コンソールを利用して、ルールやポリシーを動的に変更します。APIを介してプログラムで変更を行うことも可能です。

  • 自動化とオーケストレーション:変更のトリガーとなるイベントや条件を設定し、必要な変更を自動的に反映させることができます。

  • コンテキストに基づくポリシーの適用:コンテキスト情報(ユーザー、デバイス、場所など)に基づいてポリシーを適用することが可能です。
  • セキュリティメッシュにAIはどのように関係している?

  • セキュリティ分析と検知:機械学習ディープラーニングの手法を使用して、ネットワークトラフィックやログデータを監視し、異常なパターンや攻撃シグネチャを検出することが可能です

  • 自動化とオーケストレーション:自己学習や自己修復の機能を組み込むことで、状況や攻撃の変化に適応し、自動的にポリシーを調整したり、攻撃への対応を行ったりすることが可能です。

  • 脅威インテリジェンスと予測分析:AIによるデータ解析やパターン認識により、新たな脅威や攻撃手法を早期に検知し、適切な対策を講じることができます。

  • 自己学習と適応性:通常のトラフィックと異常な振る舞いを区別し、未知の攻撃やマルウェアに対しても効果的な防御を行うことができます。
  • 自己修復とはどのようなテクノロジー

  • オートリカバリー: 自己修復の一つのアプローチは、システムが障害や攻撃に遭った場合に自動的に回復する能力を持つことです。例えば、障害が発生した場合にシステムが自動的にバックアップから復元する、攻撃が検出された場合に攻撃元をブロックするなどのオートリカバリー機能があります。

  • セルフヒーリング: セルフヒーリングは、システムが自身の状態や構成を監視し、問題を検出して自動的に修復する能力です。セキュリティメッシュにおいては、サイドカーコンテナやプロキシを使用して、ネットワークトラフィックの監視やセキュリティポリシーの適用を行い、問題が検出された場合に自動的に対応することができます。

  • ダイナミックポリシーアップデート: 自己修復の一つの手法は、システムのポリシーやルールを動的に更新することです。セキュリティメッシュでは、攻撃の検出やセキュリティインテリジェンスの収集に基づいて、ポリシーやルールをリアルタイムで変更し、セキュリティの強化や脅威への対応を行います。
  • セルフヒーリングは具体的にどのようなコンポーネントによって実現される?

  • サイドカーコンテナ: セルフヒーリングの一つのアプローチは、ネットワーク内の各サービスにデプロイされるサイドカーコンテナです。サイドカーコンテナは、トラフィックの監視や制御、セキュリティ機能の提供を担当します。障害や攻撃の検出を行い、必要に応じて自動的にサービスの再起動やリカバリーを行うことができます。

  • ヘルスチェック: セルフヒーリングを実現するためには、各サービスのヘルスチェックが重要です。ヘルスチェックは、サービスが正常に動作しているかどうかを監視するための機能です。ヘルスチェックには、ネットワークトラフィックの可用性や応答時間、エラーレートなどを監視することが含まれます。ヘルスチェックによって、異常な状態が検出された場合に自己修復措置がトリガーされます。

  • オーケストレーションフレームワーク: セルフヒーリングを実現するためには、オーケストレーションフレームワークが使用されることがあります。オーケストレーションフレームワークは、システムの自動化や制御を担当し、サービスのデプロイ、監視、スケーリング、再起動などの操作を自動化します。障害や攻撃の検出を受けて、オーケストレーションフレームワークが自動的に必要な処理をトリガーします。

  • 監視ツールとログ分析: セルフヒーリングには、ネットワークトラフィックやシステムの監視が不可欠です。監視ツールやログ分析ツールを使用して、ネットワークやサービスの状態をリアルタイムで監視し、異常なパターンやエラーを検出します。これによって、自己修復が必要な場合に迅速に対応することができます。
  • Envoy、Linkerd、Trivy。ほかにも面白いものはある?

  • Falco: Falcoは、ランタイムセキュリティのためのオープンソースのプロジェクトであり、コンテナやオーケストレーション環境での異常な活動や侵入を検出するために使用されます。Falcoは、カーネルシステムコールのトレースとイベント監視を組み合わせて、リアルタイムのセキュリティ監視を提供します。

  • Open Policy Agent (OPA): OPAは、クラウドネイティブ環境でのアクセス制御ポリシーを管理するためのフレームワークです。OPAは、柔軟なポリシーの定義と評価を可能にし、APIリクエストの承認やアクセス制御などのタスクを処理します。クラウドネイティブなアプリケーションやマイクロサービスにおいて、セキュリティポリシーの統一的な管理に役立ちます。

  • Zeek (旧称: Bro): Zeekは、ネットワークトラフィックの監視、分析、セキュリティイベントの検出に使用される強力なネットワークセキュリティモニタリングツールです。Zeekは、パケットキャプチャとプロトコル解析を組み合わせて、ネットワーク上での様々なセキュリティイベントや攻撃を検出し、詳細なログやレポートを生成します。

  • Wazuh: Wazuhは、セキュリティイベント管理および脅威検出のためのオープンソースプロジェクトです。Wazuhは、ホストベースの侵入検知システム(HIDS)とセキュリティ情報およびイベント管理(SIEM)を統合し、リアルタイムのセキュリティモニタリング、ログ解析、脅威インテリジェンスを提供します。
  • オープンソースのUEBAってなにがある?

  • Apache Metron: Apache Metronは、大量のデータをリアルタイムで収集し、異常なユーザーやエンティティの振る舞いを検出するためのオープンソースのUEBAプラットフォームです。Metronは、ログデータ、ネットワークトラフィック、セキュリティイベントなどからデータを収集し、機械学習やリアルタイムのルールエンジンを使用して異常な活動を検知します。

  • Wazuh: 先ほども言及したWazuhは、セキュリティイベント管理や侵入検知だけでなく、ユーザーやエンティティの振る舞い分析にも利用できるオープンソースのプロジェクトです。Wazuhは、ログやイベントデータを収集し、異常なユーザーのアクティビティや振る舞いを検知するためのルールベースのエンジンを提供します。

  • MLflow: MLflowは、機械学習のライフサイクルを管理するためのオープンソースプラットフォームであり、UEBAにも活用できます。MLflowは、モデルのトレーニング、追跡、デプロイ、モデルのバージョン管理などをサポートし、異常検出などのユーザーやエンティティの振る舞いを予測するためのモデル開発に役立ちます。
  • おわり

    結局、ESXi上でSelenium実行環境を動かすことにした

    ラズパイ非力、、、 GCP(AlwaysFree枠内)非力、、、

    時間かかって処理が間に合わないので、ESXiにUbuntu22.04構築。 もはやDockerをインストールする気力も湧かないので、 ダイレクトにSelenium実行環境を構築した。

    後日譚

    さらに結局、ESXiをアンインストして、ホストOSとしてUbuntu22.04をインスト。 その上でDockerを動かす形で、新しく仮想環境を作り直した。

    • ESXi 6.7が60日間の期限切れ
    • ESXi 6.7の無償版ライセンス発行画面が消滅
    • ESXi 7.0では自分のサーバが使っているRealtekNICがサポートされなくなっていた
    • そもそも個人利用なら、もうESXiいらなくない?

    参考サイト

    zenn.dev

    XPATH内の特定のステータスに応じた条件分岐

    XPATHの特定のステータスを条件にして処理を分岐

    XPATHをアンド条件で検索する、など方法を考えたが、結局whileで回すのがシンプルだった。

    # statusがokではない限り、https://hogehogeにアクセスし続ける
    # statusがokになった時、hogehogeを出力する
    
    import datetime
    
    while len(driver.find_elements(By.XPATH, "//a[@status='ok']")) == 0:
      driver.get('https://hogehoge')
    
    else:
      now = datetime.datetime.now()
      print('{0:%m%d-%H:%M:%S}_hogehoge'.format(now))
    

    作ったプログラムをバックグラウンドで実行させる方法

    #シンプルに動かす場合
    nohup python sample.py &
    
    # ログファイルをカレントディレクトリに出力させる場合
    nohup python sample.py > log.txt 2> error.txt &

    以下のpsコマンドで動作を確認

    ps x
    ps -aux | grep python

    参考リンク

    qatechhub.com

    pg-chain.com

    blog.mktia.com

    akiniwa.hatenablog.jp

    blog.katsubemakito.net

    cronの基本操作など

    CRONの初期操作

    # CRONのインストール
    apt install -y cron
    
    # CRONの起動状況確認
    /etc/init.d/cron status
    
    # CRONの起動
    /etc/init.d/cron status
    

    CRONの基本操作

    # crontabを別名でコピー
    $ crontab -l > crontab-custom
    
    # 別名コピーしたファイルを編集
    $ vi crontab-custom
    
    #編集したファイルをcrontabに読み込ませる
    $ crontab crontab-custom 
    
    #反映されたことを確認
    $ crontab -l

    CRONの基本設定

    #Pythonの絶対パスの確認
    $ which python3
    
    /usr/local/bin/python3
    
    
    # CRON実行結果をログ出力(日時をログ名にしてログ出力)
    $ vi crontab-custom
    
    * * * * * [python3 Full Path] [program Full Path] >> [logfileのパス]/[logfile name]-`date +\%Y-\%m-\%d-\%H-\%M-\%S`.log 2>&1
    
    # 例)4時から7時の間、5分おきに実行
    */5 4-7 * * *

    参考リンク

    nishinatoshiharu.com

    qiita.com

    Docker for DesktopでSeleniumを動かしてハマった部分

    立ち上げ時にやること

    タイムゾーンがズレているとサイト訪問時にタイムゾーン変更を促すポップアップが上がってきてSeleniumの動作が止まる。 そのため、Seleniumを動かすマシンでタイムゾーンの設定をしようとした。 かなり手こずったので備忘録を残す。
    apt-upgradeを初手で行うとusrmergeがない、と言われハマる。

    docker run -e TZ=Asia/Tokyo --rm -it -p 4444:4444 -p 5900:5900 -p 7900:7900 --shm-size 2g seleniarm/standalone-chromium:initimage
    
    sudo apt update
    sudo apt install python3-pip
    sudo apt install python3-selenium

    忘れそうなので、これもメモ

    VNCブラウジング動作を確認する方法

    Docker Seleniumwebブラウザ操作を表示する。
    5900ポートでVNCサーバに繋げられる。
    
Finderを開いて command + k

    vnc://localhost:5900 
    XPATHでもCSS_Selectorでも選択できない要素のクリック

    普通にクラスを指定してもダメ。
    XPATHでもCSS_Selectorで指定してもクリックできない。

    * driver.find_element(By.CLASS_NAME, "btn_close").click()
    * driver.find_elements(By.CSS_SELECTOR, “a[href*=“#”]”).click()

    ずっとこんな感じの同じエラーが出てくる。

    * selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted:
    * selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
    * AttributeError: 'list' object has no attribute 'click'

    試行錯誤の末、マウスオーバーさせたらClickが成功した。

        push = driver.find_element(By.CLASS_NAME, "btn_close")
        actions = ActionChains(driver)
        actions.move_to_element(push)
        actions.click()
        actions.perform()
        time.sleep(2)

    さらに試行錯誤の末、こうなった。

        push = driver.find_element(By.XPATH, "コピーしたxpath")
        actions = ActionChains(driver)
        actions.click(push).perform()
    Docker Imageを保存する方法
    docker ps
    docker commit --pause=false ttfb2dagaa0 seleniarm/standalone-chromium:hogehoge
    
    docker commit --[OPTION] [CONTAINER ID] [Repository:Tag]
    

    参考リンク

    gihyo.jp

    qiita.com

    zenn.dev

    qiita.com

    qiita.com

    posipochi.com

    zenn.dev

    holiday-programmer.net

    qatechhub.com

    GCP Always Free 備忘録

    GCP Always Free範囲でGCE作成

    個人的に注意が必要だと思ったのがNetwork Service。プレミアムのほうが課金されそうだが、逆にスタンダードにすると無料枠の対象外になるという罠がある。

    GCPを頂点として見て、GCPの外が下流、という見方。 上り通信(Inbound:ダウンロード通信)は課金対象外。 1GBまでの下り通信(Outbound:アップロード通信)は無料。

    • 上り:Ingress(Inbound)

    • 下り:Egress(Outbound)


    設定備考

    • us-west1

    • e2-micro

    • Disk Type: 標準永続ディスク

    • External IP Address: ephemeral

    • Network Service Tier: Premium

    • OS: ubuntu-2004-focal-v20230616


    参考リンク

    se-abeaver.com

    cloud.google.com

    qiita.com

    qiita.com

    qiita.com


    Selenium 4.10 を使った自動ログイン

    ひさびさにSeleniumを触ったらバージョンが変わってコードも変わっていたので備忘録。 自動予約をしてくれるプログラムを作成中。

    環境

    参考リンク

    Selenium NameError: name 'By' is not defined - Qiita

    【Python】スクレイピング: SeleniumとBeautiful Soupの主なメソッド一覧 | masayanblog

    Ubuntu 20.10 on Raspberry Pi 4B にSeleniumの環境を構築してスクレイピング その2:ログインしてページ遷移 - Bye Bye Moore

    Selenium webdriverよく使う操作メソッドまとめ - Qiita

    コード

    import time
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.by import By
    
    #Chromeドライバの設定
    options = webdriver.ChromeOptions()
    service = Service(executable_path=r'/usr/bin/chromedriver')
    options = webdriver.ChromeOptions()
    #options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    driver = webdriver.Chrome(service=service, options=options)
    
    
    #画面遷移
    driver.get('https://www.amazon.co.jp/')
    
    # ログイン画面へ遷移
    driver.find_element(By.ID, "nav-link-accountList").click()
    
    # ログインIDを入力
    login_id = driver.find_element(By.ID, "ap_email")
    login_id.send_keys('example@example.com')
    
    # 「次に進む」をクリック
    nextb = driver.find_element(By.CLASS_NAME, "a-button-input")
    nextb.click()
    time.sleep(1)
    
    # パスワードを入力
    password = driver.find_element(By.NAME, "password")
    password.send_keys('example')
    
    # 「ログイン」をクリック
    nextb = driver.find_element(By.ID, "signInSubmit")
    nextb.click()
    time.sleep(1)