kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Azureのサブドメイン乗っ取りを防ぐための検証スクリプトを実行してみる

Azureからこんなメールが来ていて何事かと思いました。

Important security information regarding your organization's subdomain(s)

This email notification has been sent to each Global Administrator(s) and/or Technical Contact of your Azure Active Directory tenant. 

Our security team has identified specific Domain Name System (DNS) subdomains that belong to your organization's Azure Active Directory tenant, that have been left dangling (not mapped to an active Azure resource). We want you to be aware of this issue, as dangling DNS entries can pose a security risk. 

Summary of Issue: 
Dangling DNS starts when custom DNS from your domain's DNS zone is mapped to a DNS CNAME record of an Azure resource that is no longer provisioned, leaving the associated domain "dangling". This dangling DNS entry, also known as a dangling domain, leaves the domain vulnerable to a malicious action known as a subdomain takeover. When a subdomain takeover occurs, a malicious actor takes control of the domain which was previously associated with your deprovisioned Azure resource. By gaining control, malicious actors can intercept traffic intended for that endpoint and/or offer malicious contraband content from that endpoint. The potential impact may vary depending on the architecture of your application. 

ちょっと前話題になったこの件だと思います。

nakedsecurity.sophos.com

MSのセキュリティブログからも案内が出ています。

msrc-blog.microsoft.com

公式のdocsも出ています。

docs.microsoft.com

難しそうに見えるのですが、要はGitHubからPowerShellをダウンロードして実行して確認しましょう、ということなので、やってみます。

github.com

Invoke-WebRequest -Uri "https://raw.githubusercontent.com/Azure/Azure-Network-Security/master/Cross%20Product/Find%20Dangling%20DNS%20Records/Get-DanglingDnsRecords.ps1" -OutFile "Get-DanglingDnsRecords.ps1"

ダウンロードしたPowerShellをとりあえず実行してみます。実行するときにはGlobal Tenant Admin(テナント全体管理者)権限が必要になります。

 .\Get-DanglingDnsRecords.ps1 -FetchDnsRecordsFromAzureSubscription  

f:id:kkamegawa:20201202144705p:plain

とりあえず大丈夫っぽい。実行するときは現在の既定のサインイン情報を使うようで、実行時認証指定できない…のかな?おそらく事前にlogin-azaccountしていればいいのかなと思います。ぜひチェックしておきましょう。

Devblogラジオ第三回 - CosmosDB編

devblog.connpass.com

毎回毎回トラブルが続いてすいません。今回はYouTubeの仕様変更に伴い、「既存のライブからコピーして作ると同じセッションキーを再利用されてしまって、本番のライブ配信が始まってしまうというね…直前でURL変わってしまってすいませんでした。反省。

そしてさらにライブでは私のマイクだけ電動コイルに巻いたような音声になっていたそうです。ちなみに私に聞こえるのもそうだったので、相手側の問題だと思っていました。考えられる原因としてはこの辺でしょうか。

  1. Surface Headphonesが配信用とメインPC両方ペアリングしていたから(もう配信用からは外した)
  2. 配信用PC(Teams)に入っていたアカウントのマイクミュートを忘れていた。途中で気づいたけど、これでミュートしてほかの人の音声が切れたらと思うと怖かったので、続行(Windowsのミキサーでのマイクミュートはしていた)。
  3. 配信用Teamsと画面共有用のPCをそれぞれ別アカウント使って入っていた。
  4. 帯域不足(でもそれなら画像のほうが先にアウトになりそうな)。画像切ってみても変わらず。

画面をほかの人に取ってもらうと少しましになった気がします。私の音声にエコーバック入っていたのはたぶん2が原因かなと。配信は難しいですね…。CosmosDBは個人的にはそんなに使えていないので、どうなるかと思ったんですが、松村さんや足利さんがいろいろ経験を騙ってくれて助かりました。複数人の雑談はこういうところがいいですね。

次回は大物ゲストを呼んだ四人で .NET 5とリリースされるだろうVisual Studio 2019 16.8についてフリートークをやる予定です。お楽しみに!


devblogラジオ vol.3

Azure DevOpsの所有者をAzure ADからMSアカウントに変更する

逆はよく聞くし、お勧めなんですが。

ちょっと事情でAzure DevOpsのorganizationの一つを組織アカウント(Azure AD)ベースで動いていたものから、MSアカウントへ移行しなくてはならなくなりました。本来作れない組織アカウントと同名のMSアカウントを持っているので、この二つの間で移管したいのです。

docs.microsoft.com

Azure ADへ行く場合も、離脱する場合もこんな手順です。

  1. Azure ADにゲストでMSアカウントを追加する
  2. 移管したいアカウントをownerにする。
  3. ownerアカウント以外を全部削除する
  4. ドメインに接続(離脱の場合は切断)する
  5. 移管先のアカウントを所有者にして、移管元アカウントを削除する
  6. Azure ADのゲストから削除する

これには二つネックになる点があります。

  1. Azure ADへのゲスト追加が認めてもらえる
  2. MSアカウントと組織アカウントが異なる名前になっている

私の場合1も2も満たしていないので、Azureのサポートに泣きつきました。Visual Studioサブスクリプション特典作っているので、サポートもDeveloperですが契約できます。サポートから提案されたのは以下の方法です。

  1. 組織アカウントと同名ではない別MSアカウントをサポートに連絡する
  2. サポートがAzure ADから離脱&別MSアカウントをownerにする
  3. 完了後連絡があるので、別MSアカウントから組織アカウントと同じアドレスのMSアカウントへ移管する。

で、今は上の2まで終わっていて、3の連絡を待っているところです。大体1-2日かかるといってました。あまりこんなことする人いないと思いますが、困ったらサポートに連絡してみるといいと思います。

10/29追記
終わりました。無事移管されて、MSアカウント側の同じメールアドレスがOwnerになっています。ぱっと見、不具合もなさそうです。同じようにMSアカウント側に移管したAzureサブスクリプションも見えています。

Azure Pipelines/GitHub Actionsのセルフホスト用VMイメージを作る

以前からAzure Pipelines用イメージをPackerで作る方法を公開しているレポジトリーがあったのですが、バックエンドがGitHub Actionsと共通になり、レポジトリーも移動しました。

github.com

以前のPackerというかAzure Image Builder(中身はPackerです)を使っていたレポジトリーでも試したことがあったのですが、どうも安定して作れない。Hyper-V用のイメージ作るのも結構手を入れるの大変だなぁ、と思っていのですが、レポジトリー変更と、方式も結構変わったみたいです。

実際にAzure PipelinesとGitHub ActionのHosted Imageはこれで作っている…らしいので、つかってみようとしたところ、なんとAzureRMモジュール使って書いていてびっくりしました。2020/12でサポート終わるって書いているのに。そして、AzureRMモジュール入れた環境なんてもうないよ…。

ということで、Azモジュールに書き換えた版を作ってみました。そのうち本家がやるだろうけど、PRどうしよう。

github.com

コミットはこの辺。

github.com

今実際に動かしていますが、いい感じで動いています。たぶん数時間じゃすまないレベルで時間かかるので、朝一とかで始めたほうがいいです。もしくはAzureのVMで動かすとか。これでうまくいけばイメージをカスタムして不要なものを消したイメージ作って、手元のローカルで動かすような感じでやってみようと思います。

ヘルプに書いていますが、使用方法の注意点として、なぜかGitHubのPATが必要です。将来廃止しますとは書かれていますが、GitHub Developer Programに参加しないとPAT作れない(前確か参加しなくても作れたよね?)ので、気を付けてください。とりあえずレポジトリーの権限だけ設定しています。

(追記)
必要な理由がわかりました。npmのパッケージをGitHubのPackagesからダウンロードするため、read:packagesが必要なためだそうです(今エラーになりました)。たぶん匿名アクセスを許可していないからでしょう。read:packages権限だけあればいいようです。

GenerateResourcesAndImage -SubscriptionId {サブスクリプションID} -ResourceGroupName {リソースグループ名} -ImageGenerationRepositoryRoot {レポジトリーをクローンしたフォルダー} -ImageType {イメージ名} -AzureLocation リージョン -Githubfeedtoken {GitHubのPAT}

-ImageTypeにはWindows2016, Windows2019, Ubuntu1604,Ubuntu1804が指定できます。イメージ生成が成功したら、Azureのストレージアカウントに入るので、そこからAzureへデプロイできます。

これでうまくいったら、hostedからは不要なものを削除するとか、hostedでは更新が遅い場合に最新のVisual Studio入れたイメージ作るとかいろいろ用途が広がります。もちろん、オンプレミスのAzure DevOps用にも使えますね。

(追記2)
作ってみたら、Seleniumのダウンロードで失敗してました。WebブサウザーでダウンロードしようとしたらSmartScreenに引っかかったので、おそらくそれでしょうか。つっても、PowerShellスクリプトと同じ方法でダウンロードしてみたらできたんですが。うーん、こう言う安定しないの困るな。

後、現時点でPackerがAzureのスポットインスタンスに対応していない(AWSは対応しています)ので、USあたりでイメージ作成するときにお安く作れないの困るなぁ。5月ごろのissueには「次の次くらいで」対応予定と書かれていたんですが。

github.com