【TryHackMeウォークスルー】Windows PowerShell

 

Introduction

ようこそ!

このページにたどり着いたということは、PowerShell の魅力を耳にして、もっと深く知りたいと思っているか、あるいは「コマンドラインモジュール」の第一章(Windowsコマンドライン)から航海してきたのかもしれません。

いずれにせよ、これからWindowsシステムの秘密を解き明かす旅が始まります。さあ、出航の時です!

学習目標

このルームは「コマンドラインモジュール」の第2章にあたります。PowerShell についての入門的な内容を扱っており、Windows向けに開発された2番目のコマンドラインツールです。

  • PowerShellとは何か、その機能を学ぶ
  • PowerShellの基本的な構文や構造を理解する
  • 基本的なPowerShellコマンドを実行してみる
  • PowerShellがサイバーセキュリティ分野でどのように活用されているかを知る

What Is PowerShell

PowerShellは、Microsoftが提供するタスク自動化と構成管理のためのツールです。コマンドラインシェル、スクリプト言語、構成管理フレームワークの3つの要素で構成されており、.NETフレームワークの上に作られています。

従来のコマンドラインツールとは異なり、PowerShellは「オブジェクト指向」で動作します。これにより、複雑なデータの操作やシステムとの連携がしやすくなっています。もともとはWindows専用でしたが、現在ではmacOSやLinuxにも対応しており、さまざまな環境で利用できます。

PowerShellの歴史

PowerShellは、従来のコマンド(cmd.exeやバッチファイル)では対応しきれなかった複雑な管理作業を効率化するために、2000年代初頭に開発されました。

開発の中心となったのは、MicrosoftのエンジニアであるJeffrey Snoverです。彼は、Windowsでは構造化データとAPIが中心である一方、Unixではテキストが中心であるという違いに注目しました。そして、.NETの機能を活かしつつ、スクリプトでも扱いやすい「オブジェクト指向のシェル」を作るという発想から、PowerShellが生まれました。

2006年に最初のバージョンがリリースされ、その後、IT環境の多様化に対応する形で、2016年にはWindows以外のOSでも動作する「PowerShell Core(オープンソース)」が登場しました。

PowerShellの特徴

PowerShellの特徴のひとつは「オブジェクトを扱えること」です。

たとえば、車を例にすると「色」「モデル」「燃料の量」などの情報がプロパティ(属性)で、「走る」「クラクションを鳴らす」「給油する」といった操作がメソッド(動作)になります。PowerShellでも同様に、ファイル名やサイズ、ユーザー情報などをプロパティとして持ち、コピーや削除といった操作をメソッドとして実行できます。

従来のコマンドラインではすべての出力が文字列(テキスト)でしたが、PowerShellではコマンドを実行するとオブジェクトが返ってきます。そのため、余計な文字列の加工をせずに、効率的に情報を操作できます。

今後のセクションでは、PowerShellで使えるコマンド(cmdlet)について、より詳しく見ていきます。

What do we call the advanced approach used to develop PowerShell?

object-oriented

PowerShell Basics

PowerShellの学習を進める前に、ラボ環境に接続しましょう。

PowerShellの起動方法

PowerShellは、利用する環境や目的に応じて、いくつかの方法で起動できます。Windowsのグラフィカルユーザーインターフェース(GUI)から操作する場合、主な起動方法は以下の通りです。

・スタートメニューから

スタートメニューの検索バーに「powershell」と入力し、表示された「Windows PowerShell」または「PowerShell」をクリックします。

・「ファイル名を指定して実行」から

Windowsキー + R を押して「ファイル名を指定して実行」ダイアログを開き、「powershell」と入力して Enter キーを押します。

・エクスプローラーから

任意のフォルダーを開き、アドレスバーに「powershell」と入力して Enter キーを押すと、そのフォルダーをカレントディレクトリとしてPowerShellが起動します。

・タスクマネージャーから

タスクマネージャーを開き、「ファイル」→「新しいタスクの実行」を選択し、「powershell」と入力して Enter キーを押します。

また、コマンドプロンプト(cmd.exe)を使っている場合は、「powershell」と入力して Enter キーを押すことでPowerShellを起動できます。

Terminal
captain@THEBLACKPEARL C:\Users\captain>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows

PS C:\Users\captain> 

PowerShellが起動すると、現在の作業ディレクトリを示す「PS」プロンプトが表示されます(「PS」はPowerShellの略です)。

基本構文:動詞-名詞の形式

先述のとおり、PowerShellのコマンドは「コマンドレット(cmdlet)」と呼ばれます。従来のWindowsコマンドに比べて、cmdletはより強力で、複雑なデータの操作も可能です。

PowerShellのcmdletは、基本的に「動詞-名詞(Verb-Noun)」の形式で命名されています。この命名規則により、それぞれのコマンドが何をするのかが直感的に理解しやすくなっています。

・動詞(Verb):どのような動作を行うか

・名詞(Noun):その動作の対象となるもの

例:

Get-Content

→ ファイルの内容を取得し、コンソールに表示します。

Set-Location

→ 作業ディレクトリ(カレントディレクトリ)を変更します。

このように、PowerShellのコマンドは一貫した構文を持っており、学習しやすくなっています。

基本的なコマンドレット(cmdlet)

現在のPowerShellセッションで使用できるコマンドレット、関数、エイリアス、スクリプトを一覧表示するには、次のコマンドを実行します。

 Get-Command

このコマンドは、どのような操作が可能かを確認するための基本的な手段であり、PowerShellを使い始める際に非常に役立ちます。

Terminal
PS C:\Users\captain> Get-Command

CommandType     Name                                               Version    Source 
-----------     ----                                               -------    ------ 

Alias           Add-AppPackage                                     2.0.1.0    Appx                                                                                                                                       
Alias           Add-AppPackageVolume                               2.0.1.0    Appx                                                                                                                                       
Alias           Add-AppProvisionedPackage                          3.0        Dism                                                                                                                                       
[...]
Function        A:
Function        Add-BCDataCacheExtension                           1.0.0.0    BranchCache                                                                                                                                
Function        Add-DnsClientDohServerAddress                      1.0.0.0    DnsClient
[...]
Cmdlet          Add-AppxPackage                                    2.0.1.0    Appx
Cmdlet          Add-AppxProvisionedPackage                         3.0        Dism                                                                                                                                       
Cmdlet          Add-AppxVolume                                     2.0.1.0    Appx
[...]

このコマンドレットによって取得される各コマンド情報(CommandInfoオブジェクト)には、いくつかの基本的な情報(プロパティ)がコンソールに表示されます。

表示されたプロパティの値を使って、コマンドの一覧を絞り込むことも可能です。たとえば、「関数(function)」タイプのコマンドだけを表示したい場合は、以下のように入力します。

 Get-Command -CommandType “Function”

このように条件を指定することで、必要なコマンドだけを効率よく確認できます。

Terminal
PS C:\Users\captain> Get-Command -CommandType "Function"

CommandType     Name                                               Version    Source                                                                                                                                     
-----------     ----                                               -------    ------
Function        A:
Function        Add-BCDataCacheExtension                           1.0.0.0    BranchCache
Function        Add-DnsClientDohServerAddress                      1.0.0.0    DnsClient
Function        Add-DnsClientNrptRule                              1.0.0.0    DnsClient
[...]

今後の課題では、cmdletの出力をより効率的にフィルタする方法について学んでいきます。

もう一つ、ぜひ覚えておきたい重要なコマンドレットが「Get-Help」です。

このコマンドは、各cmdletの使い方やパラメータ、実行例などの詳しい情報を表示してくれるもので、PowerShellの使い方を学ぶうえで欠かせない存在です。

PowerShellコマンドの使い方に迷ったときは、まずこのGet-Helpを使うのが基本です。

Terminal
PS C:\Users\captain> Get-Help Get-Date

NAME
    Get-Date

SYNOPSIS
    Gets the current date and time.

SYNTAX
    Get-Date [[-Date] <System.DateTime>] [-Day <System.Int32>] [-DisplayHint {Date | Time | DateTime}] [-Format <System.String>] [-Hour <System.Int32>] [-Millisecond <System.Int32>] [-Minute <System.Int32>] [-Month <System.Int32>] [-Second <System.Int32>] [-Year <System.Int32>] [<CommonParameters>]

    Get-Date [[-Date] <System.DateTime>] [-Day <System.Int32>] [-DisplayHint {Date | Time | DateTime}] [-Hour <System.Int32>] [-Millisecond <System.Int32>] [-Minute <System.Int32>] [-Month <System.Int32>] [-Second <System.Int32>] [-UFormat <System.String>] [-Year <System.Int32>] [<CommonParameters>]

DESCRIPTION
        The `Get-Date` cmdlet gets a DateTime object that represents the current date or a date that you specify. `Get-Date` can format the date and time in several .NET and UNIX formats. You can use `Get-Date` to generate a date or time character string, and then send the string to other cmdlets or programs.
        
        `Get-Date` uses the current culture settings of the operating system to determine how the output is formatted. To view your computer's settings, use `(Get-Culture).DateTimeFormat`.

RELATED LINKS
    Online Version: https://learn.microsoft.com/powershell/module/microsoft.powershell.utility/get-date?view=powershell-5.1&WT.mc_id=ps-gethelp
    ForEach-Object
    Get-Culture
    Get-Member
    New-Item
    New-TimeSpan
    Set-Date
    Set-Culture xref:International.Set-Culture

REMARKS
    To see the examples, type: "get-help Get-Date -examples".
    For more information, type: "get-help Get-Date -detailed".
    For technical information, type: "get-help Get-Date -full".
    For online help, type: "get-help Get-Date -online".

前述の結果にあるように、Get-Help コマンドは、基本構文にオプションを追加することで、さらに有用な情報を得られることを教えてくれます。たとえば、「-examples」というオプションを付けることで、そのcmdletがどのように使われるかの具体的な例を確認できます。

PowerShellは、既存のWindowsユーザーやITエンジニアが移行しやすいように、「エイリアス(alias)」と呼ばれる別名(ショートカット)を多数用意しています。これは、従来のコマンドラインに慣れているユーザーにとって非常に便利な機能です。

エイリアスの一覧を確認するには、次のコマンドを使います。

 Get-Alias

たとえば、「dir」は「Get-ChildItem」のエイリアスであり、「cd」は「Set-Location」のエイリアスです。つまり、昔ながらのコマンドに近い書き方でもPowerShellを扱えるようになっています。

Terminal
PS C:\Users\captain> Get-Alias

CommandType     Name                                               Version    Source 
-----------     ----                                               -------    ------
Alias           % -> ForEach-Object
Alias           ? -> Where-Object
Alias           ac -> Add-Content
Alias           asnp -> Add-PSSnapin
Alias           cat -> Get-Content
Alias           cd -> Set-Location
Alias           CFS -> ConvertFrom-String                          3.1.0.0    Microsoft.PowerShell.Utility
Alias           chdir -> Set-Location 
Alias           clc -> Clear-Content
Alias           clear -> Clear-Host
[...]

コマンドレットの入手方法とダウンロードについて

PowerShellの特徴のひとつに、オンラインリポジトリから追加のコマンドレットをダウンロードして、機能を拡張できる点があります。

※注意:このセクションで紹介するコマンドレットを使うには、インターネット接続が必要です。

PowerShell Galleryのようなオンラインリポジトリでモジュール(複数のコマンドレットを含むパッケージ)を検索するには、次のコマンドを使います。

 Find-Module

モジュール名がはっきり分からない場合は、部分的な名前でも検索できます。「Name」プロパティを指定し、モジュール名の一部のあとにワイルドカード(*)を付けて検索することで、似た名前のモジュールを探せます。

標準的なPowerShellの書き方は次のとおりです。

 コマンドレット名 -プロパティ名 "部分名*"

モジュール名をうろ覚えのときなどに便利な方法です。

Terminal
PS C:\Users\captain> Find-Module -Name "PowerShell*"   

Version    Name                                Repository           Description 
-------    ----                                ----------           ----------- 
0.4.7      powershell-yaml                     PSGallery            Powershell module for serializing and deserializing YAML

2.2.5      PowerShellGet                       PSGallery            PowerShell module with commands for discovering, installing, updating and publishing the PowerShell artifacts like Modules, DSC Resources, Role Capabilities and Scripts.                                                   
1.0.80.0   PowerShell.Module.InvokeWinGet      PSGallery            Module to Invoke WinGet and parse the output in PSOjects

0.17.0     PowerShellForGitHub                 PSGallery            PowerShell wrapper for GitHub API  

目的のモジュールが見つかったら、Install-Module コマンドを使ってリポジトリからダウンロードおよびインストールすることができます。これにより、そのモジュールに含まれる新しいコマンドレットが使用可能になります。

Terminal
PS C:\Users\captain> Install-Module -Name "PowerShellGet"

Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from 'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): 

これらの基本的なツールを身につけたところで、いよいよPowerShellのさまざまな機能を探っていきましょう。

Answer the questions below

How would you retrieve a list of commands that start with the verb Remove? [for the sake of this question, avoid the use of quotes (" or ') in your answer]

Get-Command -Name Remove*

What cmdlet has its traditional counterpart echo as an alias?

Write-Output

What is the command to retrieve some example usage for the cmdlet New-LocalUser?

Get-Help New-LocalUser -examples

Navigating the File System and Working with Files

PowerShellには、ファイルシステムの移動やファイル操作に使えるコマンドレットが多数用意されています。これらの多くは、従来のWindowsコマンドライン(CLI)にあるコマンドと似た機能を持っています。

たとえば、コマンドプロンプトの「dir」や、Unix系システムの「ls」に相当するのが「Get-ChildItem」です。このコマンドレットは、-Path パラメータで指定した場所のファイルやフォルダーを一覧表示します。

ディレクトリの中身を確認したいときに使える便利なコマンドです。Pathを省略した場合は、現在の作業ディレクトリの内容が表示されます。

Terminal
PS C:\Users\captain> Get-ChildItem 

    Directory: C:\Users\captain

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-r---          5/8/2021   9:15 AM                Desktop
d-r---          9/4/2024  10:58 AM                Documents
d-r---          5/8/2021   9:15 AM                Downloads
d-r---          5/8/2021   9:15 AM                Favorites
d-r---          5/8/2021   9:15 AM                Links
d-r---          5/8/2021   9:15 AM                Music
d-r---          5/8/2021   9:15 AM                Pictures
d-----          5/8/2021   9:15 AM                Saved Games
d-r---          5/8/2021   9:15 AM                Videos

別のディレクトリへ移動したい場合は、「Set-Location」コマンドレットを使用します。これは現在の作業ディレクトリを変更し、指定したパスに移動するためのコマンドです。コマンドプロンプトで使う「cd」と同じような働きをします。

Terminal
PS C:\Users\captain> Set-Location -Path ".\Documents"
PS C:\Users\captain\Documents> 

従来のWindowsコマンドラインでは、ディレクトリやファイルなどの項目ごとに別々のコマンドを使って作成・管理していましたが、PowerShellではそれらをひとつのコマンドレットでシンプルに扱えるようになっています。

新しい項目を作成するには、「New-Item」コマンドレットを使用します。作成する項目のパスと、ファイルかディレクトリかといった種類を指定する必要があります。

Terminal
PS C:\Users\captain\Documents> New-Item -Path ".\captain-cabin\captain-wardrobe" -ItemType "Directory"

    Directory: C:\Users\captain\Documents\captain-cabin

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          9/4/2024  12:20 PM                captain-wardrobe

PS C:\Users\captain\Documents> New-Item -Path ".\captain-cabin\captain-wardrobe\captain-boots.txt" -ItemType "File"     

    Directory: C:\Users\captain\Documents\captain-cabin\captain-wardrobe

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          9/4/2024  11:46 AM              0 captain-boots.txt  

同様に、「Remove-Item」コマンドレットを使えば、ディレクトリとファイルの両方を削除できます。従来のWindowsコマンドラインでは、「rmdir」と「del」という別々のコマンドを使い分けていましたが、PowerShellではひとつのコマンドで対応できます。

Terminal
PS C:\Users\captain\Documents> Remove-Item -Path ".\captain-cabin\captain-wardrobe\captain-boots.txt"
PS C:\Users\captain\Documents> Remove-Item -Path ".\captain-cabin\captain-wardrobe" 

ファイルやディレクトリをコピーしたり移動したりするには、それぞれ「Copy-Item」(copyコマンドに相当)と「Move-Item」(moveコマンドに相当)を使います。どちらもファイルとディレクトリの両方に対応しています。

Terminal
PS C:\Users\captain\Documents> Copy-Item -Path .\captain-cabin\captain-hat.txt -Destination .\captain-cabin\captain-hat2.txt
PS C:\Users\captain\Documents> Get-ChildItem -Path ".\captain-cabin\" 

    Directory: C:\Users\captain\Documents\captain-cabin

Mode                 LastWriteTime         Length Name 
----                 -------------         ------ ----
d-----          9/4/2024  12:50 PM                captain-wardrobe
-a----          9/4/2024  12:50 PM              0 captain-boots.txt
-a----          9/4/2024  12:14 PM            264 captain-hat.txt
-a----          9/4/2024  12:14 PM            264 captain-hat2.txt
-a----          9/4/2024  12:37 PM           2116 ship-flag.txt 

最後に、ファイルの内容を読み取って表示するには、「Get-Content」コマンドレットを使います。これは、コマンドプロンプトの「type」コマンドや、Unix系システムの「cat」に相当する動作をします。

Terminal
PS C:\Users\captain\Documents\captain-cabin> Get-Content -Path ".\captain-hat.txt"
 _           _   
| |         | |
| |__   __ _| |_
| '_ \ / _ | __|
| | | | (_| | |_
|_| |_|\__,_|\__|

Don't touch my hat!

Answer the questions below

What cmdlet can you use instead of the traditional Windows command type?

Get-Content

What PowerShell command would you use to display the content of the "C:\Users" directory? [for the sake of this question, avoid the use of quotes (" or ') in your answer]

Get-ChildItem -Path C:\Users

How many items are displayed by the command described in the previous question?

4

Piping, Filtering, and Sorting Data

パイプ(piping)は、コマンドライン環境でよく使われるテクニックのひとつで、あるコマンドの出力結果を、次のコマンドの入力として渡す方法です。これにより、複数の処理を連続して実行することができ、データが一連のコマンドの中を流れていくような仕組みになります。パイプは「|」という記号で表され、WindowsのコマンドラインやUnix系のシェルでも広く使われています。

PowerShellでは、このパイプ処理がさらに強力になっており、単なるテキストではなく「オブジェクト」を渡すことができます。オブジェクトは、データだけでなく、そのデータに関する属性(プロパティ)や操作(メソッド)も含んでいます。

たとえば、あるディレクトリ内のファイル一覧を取得して、それをサイズ順に並べ替えたい場合は、次のようなコマンドをPowerShellで実行します。

 Get-ChildItem | Sort-Object Length

このように、パイプを使うことで処理の流れを効率的に構築できます。

Terminal
PS C:\Users\captain\Documents\captain-cabin> Get-ChildItem | Sort-Object Length

    Directory: C:\Users\captain\Documents\captain-cabin

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          9/4/2024  12:50 PM              0 captain-boots.txt
-a----          9/4/2024  12:14 PM            264 captain-hat2.txt
-a----          9/4/2024  12:14 PM            264 captain-hat.txt
-a----          9/4/2024  12:37 PM           2116 ship-flag.txt
d-----          9/4/2024  12:50 PM                captain-wardrobe

この例では、Get-ChildItem がファイルをオブジェクトとして取得し、パイプ(|)を使ってそれらのオブジェクトを Sort-Object に渡します。Sort-Object は、そのオブジェクトの Length(サイズ)プロパティを基に並べ替えを行います。

このように、PowerShellではオブジェクトを扱うことで、より詳細で柔軟なコマンドの組み合わせが可能になります。

上記の例では、Sort-Object コマンドレットを使って、指定したプロパティを基準にオブジェクトを並べ替えました。PowerShell にはこれ以外にも、パイプと組み合わせて使える便利なコマンドレットが多数用意されており、高度なデータ操作や分析が可能です。

特定の条件に合致するオブジェクトだけを抽出(フィルタ)したい場合は、「Where-Object」コマンドレットを使います。

たとえば、あるディレクトリ内の .txt ファイルだけを一覧表示したい場合は、次のように入力します。

 Get-ChildItem | Where-Object {$_.Extension -eq ".txt"}

このように、条件を指定することで、目的のファイルやデータだけを効率よく抽出できます。

Terminal
PS C:\Users\captain\Documents\captain-cabin> Get-ChildItem | Where-Object -Property "Extension" -eq ".txt" 

    Directory: C:\Users\captain\Documents\captain-cabin

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          9/4/2024  12:50 PM              0 captain-boots.txt
-a----          9/4/2024  12:14 PM            264 captain-hat.txt
-a----          9/4/2024  12:14 PM            264 captain-hat2.txt
-a----          9/4/2024  12:37 PM           2116 ship-flag.txt

上記の例では、Where-Object コマンドレットがファイルの Extension プロパティ(拡張子)を基にフィルタを行い、拡張子が ".txt" のファイルだけを表示しています。

ここで使われている「-eq」演算子は、「等しい(equal)」という意味で、Bash や Python など他のスクリプト言語にも共通する比較演算子のひとつです。

PowerShellのフィルタ機能の幅広さを示すために、よく使われる比較演算子をいくつか紹介します。

 -ne:等しくない(not equal)
  指定した条件に合わないオブジェクトを除外するときに使います。

 -gt:より大きい(greater than)
  指定された値より大きいオブジェクトだけを抽出します。等しいものは含まれません(厳密な比較)。

 -ge:以上(greater than or equal to)
  -gt と -eq の組み合わせで、指定値以上のオブジェクトを抽出します(非厳密)。

 -lt:より小さい(less than)
  指定された値より小さいオブジェクトだけを抽出します。等しいものは含まれません。

 -le:以下(less than or equal to)
  -lt と -eq の組み合わせで、指定値以下のオブジェクトを抽出します。

さらに、特定のパターンに一致するプロパティを基にフィルタすることもできます。その際は「-like」演算子を使います。以下にその例を示します。

Terminal
PS C:\Users\captain\Documents\captain-cabin> Get-ChildItem | Where-Object -Property "Name" -like "ship*"  

    Directory: C:\Users\captain\Documents\captain-cabin

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          9/4/2024  12:37 PM           2116 ship-flag.txt

次に紹介するフィルタ用のコマンドレット「Select-Object」は、オブジェクトから特定のプロパティだけを抜き出したり、出力されるオブジェクトの数を制限したりするために使います。

必要な情報だけを表示したいときに、出力内容を絞り込むのに便利なコマンドレットです。

Terminal
PS C:\Users\captain\Documents\captain-cabin> Get-ChildItem | Select-Object Name,Length 

Name              Length
----              ------
captain-wardrobe
captain-boots.txt 0
captain-hat.txt   264
captain-hat2.txt  264
ship-flag.txt     2116

PowerShellのパイプラインは、2つのコマンドレットだけでなく、さらに多くのコマンドをつなげて拡張することができます。

練習として、次のような課題にチャレンジしてみましょう。

C:\Users\captain\Documents\captain-cabin フォルダー内で、最もサイズの大きいファイルを表示するようなコマンドレットのパイプラインを作ってみてください。

この課題では、並べ替えやフィルタを活用して、出力結果を目的の情報に絞り込む練習になります。

課題の答え
Get-ChildItem | Sort-Object Length -Descending | Select-Object -First 1

    Directory: C:\Users\captain\Documents\captain-cabin

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          9/4/2024  12:37 PM           2116 ship-flag.txt

今回紹介するフィルタ系コマンドレットの最後は「Select-String」です。

このコマンドレットは、ファイル内のテキストパターンを検索するために使われます。Unix系システムの「grep」や、Windowsのコマンドプロンプトにある「findstr」と同じような働きをします。

ログファイルやドキュメントの中から特定の内容を探したいときによく使われる便利なコマンドレットです。

Terminal
PS C:\Users\captain\Documents\captain-cabin> Select-String -Path ".\captain-hat.txt" -Pattern "hat" 

captain-hat.txt:8:Don't touch my hat!

Select-String コマンドレットは、正規表現(regex)に完全対応しています。

この高度な機能を使うことで、より複雑なパターンでの検索が可能になり、ファイル内のテキストデータを柔軟かつ強力に調査・分析することができます。

Answer the questions below

How would you retrieve the items in the current directory with size greater than 100? [for the sake of this question, avoid the use of quotes (" or ') in your answer]

Get-ChildItem | Where-Object -Property Length -gt 100

System and Network Information

PowerShellは、システム管理者やIT技術者のために、より強力な自動化および管理ツールが必要とされていたことを背景に開発されました。

そのため、システムの構成やネットワーク設定などに関する詳細な情報を取得できるコマンドレットが数多く用意されています。

その中のひとつ「Get-ComputerInfo」は、オペレーティングシステムの情報、ハードウェアの仕様、BIOSの詳細など、システム全体の構成情報を一括で取得できるコマンドレットです。

従来の「systeminfo」コマンドも似た機能を持ちますが、取得できる情報は限定的であり、「Get-ComputerInfo」の方がはるかに多くの詳細を提供します。

Terminal
PS C:\Users\captain> Get-ComputerInfo

WindowsBuildLabEx                                       : 20348.859.amd64fre.fe_release_svc_prod2.220707-1832
WindowsCurrentVersion                                   : 6.3
WindowsEditionId                                        : ServerDatacenter
WindowsInstallationType                                 : Server Core
WindowsInstallDateFromRegistry                          : 4/23/2024 6:36:29 PM
WindowsProductId                                        : 00454-60000-00001-AA763
WindowsProductName                                      : Windows Server 2022 Datacenter
[...]

ローカルユーザーアカウントの管理や、システムのセキュリティ設定を把握するうえで重要なのが「Get-LocalUser」コマンドレットです。

このコマンドを使うと、システム上に存在するすべてのローカルユーザーアカウントを一覧表示できます。

標準の出力では、各ユーザーについて「ユーザー名」「アカウントの状態」「説明」などの情報が表示されます。

Terminal
PS C:\Users\captain> Get-LocalUser

Name               Enabled Description 
----               ------- -----------
Administrator      True    Built-in account for administering the computer/domain
captain            True    The beloved captain of this pirate ship.
DefaultAccount     False   A user account managed by the system.
Guest              False   Built-in account for guest access to the computer/domain
WDAGUtilityAccount False   A user account managed and used by the system for Windows Defender Application Guard scenarios.

従来の「ipconfig」コマンドと同様に、システムのネットワーク構成に関する詳細な情報を取得するためのコマンドレットがいくつか用意されています。

そのひとつが「Get-NetIPConfiguration」です。このコマンドレットを使うと、IPアドレス、DNSサーバー、デフォルトゲートウェイなど、ネットワークインターフェースに関する詳細な情報を確認することができます。

Terminal
PS C:\Users\captain> Get-NetIPConfiguration

InterfaceAlias       : Ethernet
InterfaceIndex       : 5
InterfaceDescription : Amazon Elastic Network Adapter
NetProfile.Name      : Network 3
IPv4Address          : 10.10.178.209
IPv6DefaultGateway   :
IPv4DefaultGateway   : 10.10.0.1
DNSServer            : 10.0.0.2

ネットワークインターフェースに割り当てられているIPアドレスの詳細を確認したい場合は、「Get-NetIPAddress」コマンドレットを使用します。

このコマンドレットを実行すると、現在アクティブでないものも含めて、システムに設定されているすべてのIPアドレスの情報が表示されます。

Terminal
PS C:\Users\captain> Get-NetIPAddress

IPAddress         : fe80::3fef:360c:304:64e%5
InterfaceIndex    : 5
InterfaceAlias    : Ethernet
AddressFamily     : IPv6
Type              : Unicast
PrefixLength      : 64
PrefixOrigin      : WellKnown
SuffixOrigin      : Link
AddressState      : Preferred
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : ActiveStore

IPAddress         : ::1
InterfaceIndex    : 1
InterfaceAlias    : Loopback Pseudo-Interface 1
AddressFamily     : IPv6
[...]

IPAddress         : 10.10.178.209
InterfaceIndex    : 5
InterfaceAlias    : Ethernet
AddressFamily     : IPv4
[...]

IPAddress         : 127.0.0.1
InterfaceIndex    : 1
InterfaceAlias    : Loopback Pseudo-Interface 1
AddressFamily     : IPv4
[...]

これらのコマンドレットを使うことで、IT担当者は重要なシステム情報やネットワーク情報をコマンドラインから素早く取得できます。

その結果、ローカルマシンだけでなく、リモートマシンの監視や管理もより効率的に行えるようになります。

Answer the questions below

Other than your current user and the default "Administrator" account, what other user is enabled on the target machine?

p1r4t3

This lad has hidden his account among the others with no regard for our beloved captain! What is the motto he has so bluntly put as his account's description?

A merry life and a short one.

Now a small challenge to put it all together. This shady lad that we just found hidden among the local users has his own home folder in the "C:\Users" directory. 

Can you navigate the filesystem and find the hidden treasure inside this pirate's home?

THM{p34rlInAsh3ll}

Real-Time System Analysis

より高度なシステム情報、特に実行中のプロセスやサービス、アクティブなネットワーク接続といった動的な情報を取得するには、静的なマシン情報とは異なる一連のコマンドレットを活用することができます。

そのひとつ「Get-Process」は、現在実行中のすべてのプロセスを詳細に表示し、CPU使用率やメモリ使用量なども確認できます。システムの監視やトラブルシューティングに非常に便利なコマンドレットです。

Terminal
PS C:\Users\captain> Get-Process

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName 
-------  ------    -----      -----     ------     --  -- -----------
     67       5      872        500       0.06   2340   0 AggregatorHost
     55       5      712       2672       0.02   3024   0 AM_Delta_Patch_1.417.483.0
    309      13    18312       1256       0.52   1524   0 amazon-ssm-agent
     78       6     4440        944       0.02    516   0 cmd
     94       7     1224       1744       0.31    568   0 conhost
[...]

同様に「Get-Service」コマンドレットを使うと、システム上のサービスの状態に関する情報を取得できます。たとえば、どのサービスが実行中か、停止中か、一時停止中かといった情報が確認できます。

このコマンドは、システム管理者によるトラブルシューティングに広く使われているだけでなく、フォレンジックの現場でも、異常なサービスがインストールされていないかを調べる目的で活用されています。

Terminal
PS C:\Users\captain> Get-Service

Status   Name               DisplayName                           
------   ----               -----------
Stopped  Amazon EC2Launch   Amazon EC2Launch
Running  AmazonSSMAgent     Amazon SSM Agent
Stopped  AppIDSvc           Application Identity
Running  BFE                Base Filtering Engine
Running  CertPropSvc        Certificate Propagation
Stopped  ClipSVC            Client License Service (ClipSVC)
[...]

アクティブなネットワーク接続を監視するには、「Get-NetTCPConnection」コマンドレットを使います。

このコマンドレットは、現在のTCP接続を一覧表示し、ローカルおよびリモートの接続先情報を確認することができます。

インシデント対応やマルウェア解析の場面でも非常に役立つコマンドで、外部の攻撃者が管理するサーバーとの隠れた接続やバックドアの存在を発見する手がかりになります。

Terminal
PS C:\Users\captain> Get-NetTCPConnection

LocalAddress        LocalPort RemoteAddress       RemotePort State       AppliedSetting OwningProcess 
------------        --------- -------------       ---------- -----       -------------- -------------
[...]
::                  22        ::                  0          Listen                     1444          
10.10.178.209       49695     199.232.26.172      80         TimeWait                   0
0.0.0.0             49668     0.0.0.0             0          Listen                     424
0.0.0.0             49667     0.0.0.0             0          Listen                     652
0.0.0.0             49666     0.0.0.0             0          Listen                     388
0.0.0.0             49665     0.0.0.0             0          Listen                     560
0.0.0.0             49664     0.0.0.0             0          Listen                     672           
0.0.0.0             3389      0.0.0.0             0          Listen                     980
10.10.178.209       139       0.0.0.0             0          Listen                     4
0.0.0.0             135       0.0.0.0             0          Listen                     908
10.10.178.209       22        10.14.87.60         53523      Established Internet       1444
0.0.0.0             22        0.0.0.0             0          Listen                     1444

さらに、ファイルのハッシュ値を生成するための便利なコマンドレットとして「Get-FileHash」も紹介しておきます。

このコマンドは、ファイルの整合性を確認したり、改ざんの有無を調べたりするのに役立つため、インシデント対応や脅威ハンティング、マルウェア解析などの場面で特に有用です。

Terminal
PS C:\Users\captain\Documents\captain-cabin> Get-FileHash -Path .\ship-flag.txt    

Algorithm       Hash                      Path 
---------       ----                      ----
SHA256          54D2EC3C12BF3D[...]       C:\Users\captain\Documents\captain-cabin\ship-flag.txt

これらのコマンドレットを組み合わせて使うことで、リアルタイムなシステム監視や分析に必要なツール群が揃います。

特に、インシデント対応や脅威ハンティングを行う担当者にとって、非常に有用な手段となります。

Answer the questions below

In the previous task, you found a marvellous treasure carefully hidden in the target machine. What is the hash of the file that contains it?

71FC5EC11C2497A32F8F08E61399687D90ABE6E204D2964DF589543A613F3E08

【補足】

Get-FileHashの出力が途中で省略されてしまう場合、Format-List を使って出力を縦表示にするのが良い。

(例)Get-FileHash -Path .\big-treasure.txt | Format-List

What property retrieved by default by Get-NetTCPConnection contains information about the process that has started the connection?

OwningProcess

It's time for another small challenge. Some vital service has been installed on this pirate ship to guarantee that the captain can always navigate safely. But something isn't working as expected, and the captain wonders why. Investigating, they find out the truth, at last: the service has been tampered with! The shady lad from before has modified the service DisplayName to reflect his very own motto, the same that he put in his user description.

With this information and the PowerShell knowledge you have built so far, can you find the service name?

p1r4t3-s-compass

Scripting

スクリプティングとは、シェル(ここではPowerShell)の中で通常手動で行っていた操作を、自動化するためにテキストファイル(スクリプト)として一連のコマンドを書き、実行することを指します。

簡単に言えば、スクリプトはコンピューターに渡す「やることリスト」のようなもので、スクリプトの各行は実行するタスクを意味します。これにより、作業の手間が省けるだけでなく、ヒューマンエラーのリスクも減り、手作業では難しい処理も自動で実行できるようになります。

スクリプトやシェルの知識を深めるにつれて、スクリプトがシステム管理やデータ処理など、さまざまな場面で非常に強力なツールとなることがわかってきます。

このルームではPowerShellスクリプトの書き方までは扱いませんが、その強力さから、サイバーセキュリティ分野では非常に重要なスキルであることは理解しておくべきです。

【Blue Team(防御側)の活用例】

インシデントレスポンダー、マルウェア解析者、脅威ハンターなどのBlue Team担当者にとって、PowerShellスクリプトは以下のような作業を自動化する手段になります。

  • ログの分析
  • 異常検出
  • 攻撃の痕跡(IOC)の抽出
  • マルウェアのリバースエンジニアリング
  • システム全体のスキャン処理など

【Red Team(攻撃側)の活用例】

ペネトレーションテスターや倫理的ハッカーなどのRed Teamにとっても、PowerShellは有効です。

  • システム情報の列挙(エニュメレーション)
  • リモートコマンドの実行
  • 防御回避のための難読化スクリプトの作成
  • システムの耐性テストや模擬攻撃

【システム管理者の活用例】

システム管理者にとっても、PowerShellスクリプトは以下のような場面で役立ちます。特にリモート環境や大規模ネットワークでその力を発揮します。

  • システム整合性のチェック自動化
  • 構成管理やネットワークの保護
  • セキュリティポリシーの適用
  • システムの状態監視やインシデント対応の自動化

このように、防御・攻撃どちらの立場でも、PowerShellスクリプティングはサイバーセキュリティにおける必須スキルの一つです。

【Invoke-Commandの紹介】

スクリプティングの話題を締めくくる前に、もうひとつ重要なコマンドレットを紹介しておきます。それが「Invoke-Command」です。

Invoke-Command は、リモートマシンでコマンドを実行するためのコマンドレットです。

システム管理者、セキュリティエンジニア、ペネトレーションテスターなどにとって不可欠な機能であり、複数のマシンに対して一括で処理を実行したり、スクリプトと組み合わせて自動化したりすることができます。

ペネトレーションテストや攻撃の現場では、ターゲットマシン上でのペイロードやコマンドの実行にも使われます。

それでは、次にこの強力な Invoke-Command の使用例を、Get-Help コマンドの "examples" ページで確認してみましょう。

Terminal
PS C:\Users\captain> Get-Help Invoke-Command -examples

NAME
    Invoke-Command
    
SYNOPSIS
    Runs commands on local and remote computers.
    
    ------------- Example 1: Run a script on a server -------------
    
    Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName Server01
    
    The FilePath parameter specifies a script that is located on the local computer. The script runs on the remote computer and the results are returned to the local computer.

    --------- Example 2: Run a command on a remote server ---------

    Invoke-Command -ComputerName Server01 -Credential Domain01\User01 -ScriptBlock { Get-Culture }

    The ComputerName parameter specifies the name of the remote computer. The Credential parameter is used to run the command in the security context of Domain01\User01, a user who has permission to run commands. The ScriptBlock parameter specifies the command to be run on the remote computer.

    In response, PowerShell requests the password and an authentication method for the User01 account. It then runs the command on the Server01 computer and returns the result.
[...]

Get-Help コマンドの "examples" ページにある最初の2つの例だけでも、Invoke-Command コマンドレットのシンプルさと強力さを理解するには十分です。

最初の例では、Invoke-Command を任意のスクリプトと組み合わせて使うことで、リモートコンピューター上での処理を簡単に自動化できることが示されています。

2つ目の例では、スクリプトを書く技術がなくても Invoke-Command を使えることが示されています。コマンドに -ScriptBlock { ... } を追加することで、リモートマシン上で任意のコマンドやコマンドの連続実行が可能になります。

その結果は、リモートマシンの PowerShell セッションで直接コマンドを入力した場合と同じように動作します。

Answer the questions below

What is the syntax to execute the command Get-Service on a remote computer named "RoyalFortune"? Assume you don't need to provide credentials to establish the connection. [for the sake of this question, avoid the use of quotes (" or ') in your answer]

Invoke-Command -ComputerName RoyalFortune -ScriptBlock { Get-Service }

Conclusion

お見事です、諸君!
PowerShellという荒波を無事に乗り越え、TheBlackPearl号に隠された財宝や謎のサービスを見つけ出すことに成功しました。

ここまで習得したツールがあれば、どんなWindowsシステムの奥深くも探検する準備は万端です。

覚えておいてください。真の探求者(海賊)は、決して学びを止めません。これからもスキルを磨き続けていけば、きっと次の冒険でも新たな「真珠」が見つかるはずです。

それでは、コマンドレットが鋭く、スクリプトが素早く動作することを祈っています。
よい航海を。そして、さらなる発見を!

このままコマンドラインスキルを高めたい方は、次の学習ステップである「Linuxコマンドライン」ルームへ進んでください。

出典:Windows PowerShell

【セキュリティ事件簿#2025-234】株式会社テゲバジャーロ宮崎 個人情報漏えいの可能性に関するお詫びとご報告 2025/6/26

 

ファミリーの皆様、平素よりテゲバジャーロ宮崎の公式オンラインショップをご利用いただき、まことにありがとうございます。

大変申し訳ございません。

このたび、当オンラインショップにおきまして、受注から発送に至るプロセスに使用している販売管理画面のセキュリティ設定の不備により、一部のお客様の個人情報が第三者に閲覧可能な状態となっていたことが判明いたしました。

お客様に多大なご心配とご迷惑をおかけいたしましたことを、心より深くお詫び申し上げます。

■ 事案の概要

当クラブでは、公式オンラインショップの構築・運用業務を外部協力会社に委託しております。

同社が開発したECサイトにおいて、本来ログイン認証が必要である販売管理ページに対し、認証が設定されていない状態で約3ヶ月間運用されていたことが、本日判明いたしました。

具体的には、当該ページのURLを知る第三者が、ログインなしで販売情報を閲覧・ダウンロードできる状況となっておりました。

本件については、宮崎県警察サイバー犯罪対策課とも連携のうえ必要な対応を進めておりますが、現時点では、アクセス・ダウンロードともにURLを知る関係者によるものと推定されております。

■ 漏えいの可能性がある情報

当該ページに掲載されていた情報は、オンラインショップをご利用いただいたお客様の以下の情報です:

氏名

ご住所

電話番号、メールアドレス

注文情報(商品名・購入日など)

※クレジットカード番号など、決済に関わる情報は一切含まれておりません。

※対象件数:709名分

■ 現在の対応状況

本件を受け、当クラブおよび委託先では以下の初期対応を実施済です:

該当ページのアクセス遮断および認証設定の強化

アクセスログの保全および外部アクセスの有無の解析

警察への報告、連携

日本プロサッカーリーグ(Jリーグ)本部への報告

■ 今後の対応とお客様へのお詫び

対象となるお客様へは、書面によるお詫び状とあわせて、1,000円分の商品券を同封のうえ、6月27日(金)までに順次ご連絡をさせていただきます。

リリース文アーカイブ

YouTube OSINT活用術:効果的な検索と便利なツールの紹介


こんにちは。動画は文章よりも直感的な情報源だと感じたことはありませんか?もちろんフェイク動画も存在しますが、動画は文章よりもずっと説得力があります。

YouTubeはその特性を最大限に活かした情報の宝庫。OSINT(オープンソース・インテリジェンス)活動にも大いに活用できます。とはいえ、膨大な動画の中から目的の情報を見つけ出すのは容易ではありません。この記事では、YouTubeの検索をもっと効率化するための知識とツールを紹介します。


YouTube検索の基本構造を理解しよう

まず、YouTubeが動画をどのようにインデックスしているかを理解する必要があります。これは図書館の本の分類と似ています。

YouTubeが重視する情報

  • 動画タイトル:検索順位に最も強く影響します。キーワードの密度が高いほど有利。

  • 動画説明欄:内容の要約として扱われ、キーワード抽出に使われます。

  • タグ(キーワード):補助的要素。説明やタイトルと一致する場合に強く影響します。

  • 字幕:自動生成でも対象。本文にない情報が含まれる場合もあるため、侮れません。

  • チャンネル名:チャンネル名でも検索できます。

  • 視聴者の反応:視聴回数、いいね、コメント数、再生時間なども評価対象です。コメントのテキストもインデックスされます。


検索クエリの処理プロセス

YouTubeに検索語を入力すると、次のような段階を経て検索結果が表示されます。

  1. キーワード抽出:助詞や冠詞などの意味の薄い単語は省かれます。

  2. 言語の認識と正規化:例えば「探した」は「探す」として処理。

  3. 検索意図の判定

    • 情報型(例:「美味しいカレーの作り方」)

    • ナビゲーション型(例:「堀江貴文のビジネス解説動画」)

    • トランザクション型(例:「面白い猫動画」)

  4. データベース照合:インデックスに基づき該当する動画を抽出。

  5. ランク付けとフィルタリング:表示順位を決定。規約違反や個人の視聴履歴によるフィルタもかかることがあります。

※検索に引っかからない場合、Google検索でYouTube動画を探すという裏技も有効です。


YouTubeの検索フィルターを使いこなそう

検索結果ページの「フィルター」機能は意外と強力です。

  • アップロード日時:過去1時間、1日、1週間、1ヶ月、1年

  • タイプ:動画/チャンネル/再生リスト

  • 再生時間:短編/長編

  • 機能:字幕あり、4K画質、位置情報あり など

  • 並び替え:視聴数順、新着順、評価順

これらの条件は検索語に直接追加することも可能ですが、機能するケースとしないケースがあります。

例:

osint, shorts, this week

→ OSINTに関するショート動画のうち、今週投稿されたものが表示されます。


検索演算子(YouTube Dorks)

Googleと同様に、YouTubeでも「検索演算子」を使って高度な検索が可能です。以下は主な演算子とその使い方です。

"フレーズ"
完全一致検索。部分一致より優先度が高くなります。
例:「"バズレシピ カレー"」

+キーワード
検索結果に必ず含まれるキーワードを指定します。
例:「カレー +簡単」

-キーワード
検索結果から除外したいキーワードを指定します。
例:「バズレシピ -肉」

*
任意の単語にマッチします(ワイルドカード)。
例:「簡単 * レシピ」

$数値 ..
金額や数値の範囲を指定します。
例:「$10..$50」

intitle:
タイトル内に含まれる単一のキーワードで検索します。
例:「intitle:ミナミの帝王」

allintitle:
タイトル内に複数のキーワードすべてが含まれる動画を検索します。
例:「allintitle:バズレシピ カレー」

description:
説明欄に含まれる語句を検索します。正確に指定するには「"」や「*」の併用が効果的です。
例:「description:"低糖質 カレー"」

before:after:
特定の期間にアップロードされた動画を検索できます。
例:「after:2023-01-01」「before:2024-01-01」


OSINTに便利なツール紹介

以下の外部ツールは、YouTube調査に非常に役立ちます。

  1. YouTube Metadata Viewer

    • 公開日、タグ、カテゴリ、統計、サムネイルなどが確認できる。

  2. YouTube GeoFind

    • 地図上で位置情報付き動画を検索可能。

  3. YTB Comments Downloader

    • 動画コメントを抽出・CSVで保存。

  4. Filmot

    • 字幕検索ツール。動画内の発言をテキストで検索。

  5. Find Deleted YouTube Video

    • 削除済み動画の情報(メタデータや字幕)を検索。


まとめ

YouTube検索を使いこなすことで、OSINT調査の幅は確実に広がります。検索構造を理解し、演算子や外部ツールを組み合わせることで、目的の情報に早く、正確にたどり着けるようになります。

YouTubeはもはや娯楽の場だけではなく、情報収集の最前線でもあります。ぜひ実際に検索を試して、あなたのスキルに取り入れてみてください!

.li・.es・.ru――2025年に最も悪用された国別TLDランキング


インターネットにおけるサイバー攻撃の手口は日々進化していますが、依然としてフィッシング詐欺は根強い脅威のひとつです。特に近年では、特定のトップレベルドメイン(TLD)、なかでも『国別コードトップレベルドメイン(ccTLD)』が悪用されるケースが増加しています。

セキュリティ分析プラットフォーム「ANY.RUN」の2025年版レポートによれば、一部のccTLDがフィッシングに特に多く利用されていることが明らかになりました。

フィッシングに悪用された国別ドメインTOP5(2025年)

順位ccTLD国名フィッシング比率
1位.liリヒテンシュタイン57.22%
2位.esスペイン47.63%
3位.ruロシア30.32%
4位.soソマリア26.89%
5位.reフランス領レユニオン島21.13%

これらのccTLDは、本来は各国・地域を示す目的で使われていますが、登録コストの安さや規制の緩さ、匿名性の確保しやすさなどが悪用される要因になっていると考えられています。

スペインの国別コードTLDである .es は、近年認証情報を狙ったフィッシングや偽の宅配通知詐欺で悪用されるケースが増えています。

攻撃者は、Microsoft 365 や郵便・宅配業者など実在するサービスを装った偽サイトを .es ドメインで作成し、ユーザーにログイン情報やクレジットカード情報を入力させる手口を使います。

.es ドメインはスペイン語圏のユーザーにとって馴染みがあり信頼されやすいため、フィッシングサイトだと気づかれにくく、被害につながりやすいのが特徴です。

また、.ru は本来ロシアの正規の国別コードTLDですが、依然として悪意あるキャンペーンで頻繁に使われているドメインのひとつです。

特にロシア国内やその周辺地域のユーザーを標的にした攻撃では、.ru ドメインを使うことで見た目の信頼性を演出しやすく、騙されやすい傾向があります。

.ru は、偽のログイン画面を設置したり、正規のソフトウェアを装ったマルウェアを配布したりする用途で多く利用されています。見慣れたドメインだからこそ、警戒が薄れやすい点に注意が必要です。

なぜccTLDが狙われるのか?


ccTLDの中には、以下のような特性を持つものがあります:

  • 誰でも取得可能(居住要件なし)
  • 安価で大量取得可能
  • ブランド保護意識が薄い地域の運用者
  • TLDの管理が甘い、または脆弱

こうした背景から、攻撃者にとっては信頼感があるように見せかけながら、検知回避も容易な手段として利用されやすい状況になっています。

企業・個人ができる対策は?


  • 不審なTLDのリンクには注意を払い、クリック前に必ず確認を。
  • 送信元ドメインの**正当性(whois情報やSPF/DKIM設定)**を確認する習慣を。
  • ブランド保護の観点から、自社に関係するccTLDを事前に取得・監視することも有効です。

おわりに


TLDの選び方ひとつで、ユーザーの信頼を獲得することも、逆に失うこともあります。今回のレポートは、国別ドメインの利用リスクを再確認する良い機会になるはずです。

引き続き最新の脅威動向に目を光らせ、自衛策を講じていくことが求められています。


【セキュリティ事件簿#2025-233】株式会社ヤマダコーポレーション サイバー攻撃によるシステム障害についてのお知らせ 2025/6/26

 

この度、当社においてサイバー攻撃によるものと思われるシステム障害(以下、本件)が発生したことについてご報告致します。

本件により、お客様をはじめ、お取引先様、関係者の皆様に多大なるご迷惑をお掛けすることとなり、深くお詫び申し上げます。

2025 年 6 月 24 日(火)にシステム障害が発生し調査したところ、当社システムに対し、外部の第三者からの不正アクセスを受けたことを確認いたしました。確認後、速やかに対策チームを立ち上げ、外部専門家の協力のもと、侵入経路の特定、被害範囲の調査を開始いたしました。

現在、さらなる被害拡大防止のため、不正アクセスの疑いがあるすべてのサーバーをネットワークから一時的に隔離し、影響範囲を確認する作業を進めております。

また、同時に被害拡大の防止およびシステム復旧に向けて対応を進めております。

今後、お知らせすべき事項が明らかになりました場合には、速やかに開示を行います。

リリース文アーカイブ

【セキュリティ事件簿#2025-232】千葉県教育委員会 個人情報漏えい事案の発生について 2025/5/30

 

県立千城台高等学校において、数学の成績等を含む個人情報の漏えい事案が発生しました。同校では、本事案を認知後、ただちにファイル等を削除し、現在のところ、二次流出等の報告は受けておりません。

個人情報の取扱い及び情報管理の徹底等について、厳重な注意喚起を行い、再発防止に万全を期してまいります。

1 概要

県立千城台高等学校において、同校教員が、90名の生徒のみが閲覧できるTeams(※)上に、誤って1学年321名分の数学の成績等を含むエクセルファイルをアップロードし、保護者からの通報により認知。

同校では、事実を確認後、ただちに当該ファイルを削除するとともに、ファイルを閲覧した生徒(44名)を特定し、当該生徒の端末内のファイルを削除した。

(※)Teamsとは、マイクロソフト社製のグループウェアで、登録したメンバーのみが閲覧等利用できる。

2 漏えい情報

1学年全員の1学期中間考査の得点(数学I及び数学A)、入学者選抜の数学の得点、生徒名、メールアドレス、

座席表、出欠数、平常点

3 漏えいの原因

当該ファイル内に個人情報が入ったシートが存在していないものと誤認したまま、当該教員が一人で、Teams上に当該ファイルのアップロードを行った。

4 経緯

5月26日(月曜日)

午後7時頃、県立千城台高等学校の教員が、90名の生徒をチームに登録するために、Teams上に当該ファイルをアップロードした。

5月27日(火曜日)

午前9時頃、生徒の保護者からの連絡により当該ファイルに1学年321名分の数学の成績等が含まれていることが発覚し、学校は事実を確認後、当該ファイルを直ちに削除した。

午後7時頃、当該ファイルの閲覧状況の履歴確認を完了し、閲覧者を全て特定した。

5月28日(水曜日)

午後3時頃、同校において、臨時の全校集会を開催し、校長より事故の経緯説明と謝罪を行った。

午後4時頃、当該ファイルを閲覧した生徒の端末上からの削除を確認した。

5月29日(木曜日)

午後7時、保護者会を開き、校長は、保護者会に参加した保護者に対し、これまでの経緯と再発防止策を説明し謝罪した。 

5月30日(金曜日)

午前10時、国の個人情報保護委員会へ本件の事実関係や再発防止策等について速報を報告した。

現時点で二次流出等の報告は受けていない。

5 再発防止策

個人情報の取扱い及び情報管理の徹底等について、改めて厳重な注意喚起を行う。

(1)個人情報を保存する際は、暗号化技術を使用してデータを保護する。

(2)個人情報へのアクセス権限を最小限に抑え、必要な者のみがアクセスできるようにする。

(3)情報セキュリティに関する研修を定期的に実施し、個人情報の取扱いに関する意識を高める。

リリース文アーカイブ

【セキュリティ事件簿#2025-231】三菱地所ホテルズ&リゾーツ株式会社 宿泊予約システム運営委託先における個人情報漏洩の可能性に関するお知らせとお詫び 2025/6/25

 

このたび、三菱地所ホテルズ&リゾーツ株式会社(取締役社長 大島 正也、以下「当社」)が運営する丸ノ内ホテルで利用している宿泊予約システムの運営委託先「CendynGroup, LLC」(以下「Cendyn」)において、同社予約システムに対する外部からの不正アクセスが判明いたしました。

現時点で、個人情報漏洩の事実は確認されておりませんが、個人情報漏洩の可能性を完全に否定できない状況であるため、ご報告いたします。尚、本件につきましては、すでに個人情報保護委員会に対し報告を行っております。

お客様ならびに関係者の皆様には、多大なご迷惑とご心配をおかけいたしますこと、深くお詫び申し上げます。

1. 概要

丸ノ内ホテルが、主に外国語による直接予約ツールとして利用している宿泊予約システムの運営委託先 Cendyn において、同社予約システムに対する外部からの不正アクセスが判明いたしました。

2. 対象となる予約

丸ノ内ホテル英語版ウェブサイト、海外旅行代理店等が運営している予約システム経由のご予約

3. 対象となった個人情報

2025 年 2 月 28 日から 2025 年 3 月 10 日までの期間、同システムに保管されていたお客様個人の氏名、住所、メールアドレス、電話番号、カード名義人氏名、クレジットカード番号の下 4 桁、当該宿泊料金、チェックイン・チェックアウト日などが含まれている可能性がございます。

4. 経過および当社の対応

2025 年 3 月 13 日に本件に関する報告を Cendyn から受けたのち、当該報告の信ぴょう性を精査のうえ、当社顧客情報の確認を進めるとともに、個人情報保護委員会へ報告いたしました。今回の不正アクセスの原因および対策については、Cendyn へ継続的に説明を求め、対応が確認できましたので、現在は予約受注を継続しております。引き続き Cendyn および関係各機関と連携し、必要な対応を進めております。

本件については、あくまで対象期間内の不正アクセスが確認されたことにより、情報漏洩の可能性があったものであり、漏洩が特定された状況ではないと Cendyn より報告を受けております。なお、本件対象以外のお客様の個人情報の漏洩は確認されておりません。また、これまでに個人情報を悪用される等の被害報告もございません。

5. お客様への対応

ご連絡先が確認できた対象のお客様に対しては、改めてホテルより本件についてのお詫びとご説明を電子メールにてご連絡いたします。

■お客様にご留意いただきたい事項

なりすまし、詐欺、フィッシング攻撃などの不正行為に引き続き十分にご注意いただきますようお願い申し上げます。

6. 再発防止策

本件に該当する Cendyn に対しては、より強力な再発防止策の実施を求めるとともに、当社においても情報管理および情報システムセキュリティの再確認・再徹底による安全性の確保に努め、再発防止を徹底いたします。

リリース文アーカイブ