モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

URLを確認しても正しそうに見えるのにフィッシングサイトにつながってしまう攻撃手法

フィッシングのHTMLメール等で、ちゃんとURLを確認しても正しそうに見えるのに、フィッシングサイトに繋がってしまう攻撃手法が紹介されていました。


この手法を使って、以下のように例を作ってみました。

こんなふうにURLが書いてあると、ソースを確認しても「https ://www.smbc-card.com/…」に繋がりそうに見えますが、実際にはヤフーの天気が表示されてしまいます。

<a href="https://www.smbc-card.com⁄login⁄user=foobar@%77%65%61%74%68%65%72%2E%79%61%68%6F%6F%2E%63%6F%2E%6A%70/%77%65%61%74%68%65%72/">www.smbc-card.com</a>


実際のリンク例

https://www.smbc-card.com⁄login⁄user=foobar@%77%65%61%74%68%65%72%2E%79%61%68%6F%6F%2E%63%6F%2E%6A%70/%77%65%61%74%68%65%72/


twitterで簡単な説明を書いたのですが、もう少し詳しく説明します。



偽装手法

基本的な手法としてBasic認証のURL記述が利用されています。

Basic認証とは、ウェブサイトへユーザ名とパスワードでアクセス認証するための最も単純な認証方式の一つです。
Basic認証ではユーザ名とパスワードが必要ですが、URLにユーザ名とパスワードを含んだ形での記述が出来ます。
URLの形式は以下のようになっています。

https://username:password@example.com

このときパスワードは省略して

https://username@example.com

と書くことが出来ます。


この形式を悪用し、攻撃者は以下のようなURLを作成しています。

https://www.smbc-card.com@weather.yahoo.co.jp/weather/

つまり、ぱっと見で接続先サイトに見えるところが実はユーザ名になっているわけです。


攻撃者さらに、下記のようにURLエンコーディングを使用して実際のアクセス先を隠蔽することで、より疑われにくいURLにしています。

https://www.smbc-card.com@%77%65%61%74%68%65%72%2E%79%61%68%6F%6F%2E%63%6F%2E%6A%70/%77%65%61%74%68%65%72/


さらに、一般的なスラッシュ「/」の代わりに分数スラッシュ「⁄」(U+2044)を使用しています。
ユーザ名部分に「/」が使えないのですが、U+2044のスラッシュならば使うことが出来ます。
これにより、ドメインだけでなくより自然にログイン用のURLっぽく偽装することが可能です。

https://www.smbc-card.com⁄login⁄user=foobar@%77%65%61%74%68%65%72%2E%79%61%68%6F%6F%2E%63%6F%2E%6A%70/%77%65%61%74%68%65%72/

ここまでしなくても、ドメイン名を見せかけることができれば十分に思いますが、ドメイン名(本来のユーザ名)の後ろに送付先のユーザID情報を持たせたいとかがあったのかもしれません。

対策方法

単に、真に接続する先のURLを確認してもらうだけでも難しいのに、このような方法があるというのを普通の人に認識してもらってURLの確認してもらうのはまず不可能だと思います。

なので究極的には「利用している会社からであっても、送られてきたメール・SNSメッセージのURLは開かない」に尽きると思います。

名前を騙られて送られてくるメールや、アカウントを乗っ取られて送られてくるメッセージもあるため、知っている相手から送られてきたものでも、タイミング的におかしければ信用しないべきでしょう。

NSEG 勉強会 #110 「IT 技術者とカネ」

NSEG勉強会がいつもとちょっと違った内容のネタで開かれ、自分も発表をしてきました。

nseg.connpass.com

今回は内容どころか演題も非公開にさせていただいたのですが、渾身の内容だったと思います。
真面目に技術的なことばっかやってても、大変な目に巻き込まれることがあるので気をつけないと、という内容です。

ちょうど一つ前のエントリが受注先の倒産話ですが、そちらではなくてその一つ前のほうの話でした。

受注先の会社が倒産した件

去年の8月くらいから、LLM+RAGのPoCおよびシステム開発の仕事を受注させていただいていた会社が倒産しました。

一緒に仕事させていただいていたCTOの東さんが書かれたエントリです。
ちょっと話題になったんですが、今(2024/8/30現在)は非公開になっちゃってますね。
note.com

受託開発で関わっていた人たちはみなさん債権者となってしまいました。もちろん僕もです。
今年の春には業務拡大のためにオフィスを移転されたりして、景気いいなあ…と思っていたところでこれだったのでだいぶびっくりしました。

仕事してた会社が(事実上の)倒産が1年ぶり2連続という状況で、お祓いにでも行ったほうがいいのかしら… となっています。

GCPの会社アカウントに登録しても他のプロジェクトに入れない問題

Googleの会社アカウントを発行していただいてあり、そのアカウントでGCPにも権限登録してもらったにもかかわらず、GCPログインしても他のプロジェクトが見えてこない、入れない、という問題が起きました。

アカウントの登録は出来ているため、自分でプロジェクトを作ることは出来て、それは管理者の方からは問題なく見ることも出来ていました。
なので、ログイン出来ないとかそういう問題ではなく、また権限も何度も確認していただいて、問題ない状況でした。

すごく色々と調べたり調べてもらったりして、で最終的には下記のインビテーションのURLを叩く、という方法で解決できました。

stackoverflow.com

一度入れてしまえばあとは通常通り使えるようになりました。

とにかく原因がわからなくってめっちゃ困ったので、参考になれば。

NSEGで「RAGの仕組みとよくある課題」という話をしました

半年ぶりにNSEG開催されました。

nseg.connpass.com

ここ1年くらいLLM+RAGのシステムを書いていたので、RAGについての簡単な説明と、どういった課題があるのかについて発表しました。

speakerdeck.com

自分の関わってたものでは、とにかく回答品質を上げるために、精度の高いテキスト化が一番重要でした。
渡されてくるPDFをライブラリ等でそのままテキスト化しても「人間が見た目での構造化がされている」ため、あまり精度が高くならず、高品質にするには人間が構造化したテキストへ変換するのがもっとも効果的でした。

Dell G15でWiFiが繋がってるのにインターネット接続が切れる問題

最近、コワーキングスペースで仕事をするようになってノートPCとディスプレイ持って通っているのですが、やってるとWiFiが繋がっているのにインターネット接続が切れる、という状況がちょくちょく発生して困ることがありました。
また、いきなりWiFiの電波強度が1になっていたりして、なんで?となっていました。

調べてみると、WiFiの電波強度が1になるのは2.4Gになってしまっていて、接続速度も50Mとかになっていました。
が、それだけでインターネットへの接続が切れてしまうというのもおかしいので、もうちょっと調べてみました。

そうするとこのノートだと結構ある問題?らしいということがわかりました。

www.dell.com

WiFiのドライバーというか「Killer Intelligence Center」という専用のアプリがあり、そいつが余計なことしてYouTubeとかへの接続ができなくなったりするらしい。

n1729.com
n1729.com

でもWiFi自体は繋がっているのにインターネット接続が切れるというのは、Smart Byteというアプリによる例が多かったのですが、自分の環境には入っていませんでした。

でもなんにしてもKiller Intelligence Centerがあやしいのでこれの制御を一旦全部切ってみました。
するとそれだけで安定的に繋がるようになりました。

上記のエントリではKiller Network Service自体を止めるようにされていて、これ結構メモリやCPU使ってるとき有るので、そうしてしまったほうがよさそうに思います。

NSEG2024 新年フリープレゼン大会で音声変換と生成AIについて話しました

久しぶりにNSEG勉強会が行われたので、この1年半(実質は1年くらい)やってた、ディープラーニングを利用した音声変換やニューラル圧縮について話をしました。

NSEG 2024 新年フリープレゼン大会 - 資料一覧 - connpass nseg.connpass.com

音声変換と生成AI:開発者視点からの1.5年の振り返り - Speaker Deck
speakerdeck.com

今回、いつものような技術的な解説ではなくて、どちらかというと僕のこの1年半にあったことの振り返りを他の方にも追体験していただき、その中で音声系を中心とした生成系AIでどんなことが起きてたかを感じてもらう、みたいなものをめざしました。

なのでプレゼン資料の枚数がすごく多くなってしまったのですが、内容は薄めです。

でも、以前やった勉強会で話したことが、例えば5年前に話してたようなことが、当時はこんな感覚だったんだなってことが資料として使えたので、今回のこれも、2022~3年あたりで音声生成とか変換ってこのあたりの地点だったんだな、というのが振り替えれるものになるのではと思っています。

とにかく、ディープラーニング系の技術は元々流速早かったのが、生成系AIの流れで更に急速に速くなっているので、なんとかその流れに乗って、どう変化していくのかを味わいたいところです。

このプレゼンで書いてるように、もうあと4年以内できっと僕の能力を超えられてると思っているので…

GKE内のpostgresをGUIで触りたい

GKEのpostgresの中身を確認したいとき、一旦アプリケーションのpodのshellに入って、そこからpsqlコマンド叩いて接続してSQL叩いて、という方法で見ていました。

が、さすがにだるすぎるので、普通に簡単にGUIで見れる方法があるだろうとGPT-4様に聞いてみました。
kubectlでポートフォワード設定出来るので、ポートフォワードしてそこに繋げばいいとのこと。

kubectl port-forward svc/postgres-service 15432:5432

これでGKE内のpostgresのポート「5432」→ ローカルのポート「15432」へポートフォワードしてくれるとのこと。

でまあこれで用は足せるのですが、実は普段からk9sを使っているので、k9sを使ってもできることがわかりました。

k9sを起動して、serviceとかpodの表示をしていると上部エニューに
「<shift-f> Port-Forward」
と出てくるので、postgresのサービスやpodの上で S-f 押すと、ポートフォワードの設定画面が出るので適当に好きなフォワード先のポートを指定します。

それだけです。

これだけのことなのですが、GKE内のデータ確認の心理的めんどくささがだいぶ減りました。

Windows Update後にWSL2からXの画面表示が崩れる

WSL2で動かしているアプリのSQLite3のデータを確認するのに、WSL2上からsqlitebrowserを動かして見ていたのだけど、今日Windows Updateを掛けたら、画面がすごく崩れるようになってしまいました。

似たようなことを以前、Sourcetreeで経験していて、GPUのハードウェアアクセラレーションのせいだろうという検討が付いていたので、WSLgの設定でアクセラレーションを切れば良さそうと思いました。

ただこの件ってすごくググラビリティが低いんですよね。
「X」と「window」なのでそっちではぜんぜん該当する情報にたどり着けず。
で、WSL2から使われているのが「WSLg」だというところからググって、以下のページにたどり着けました。

github.com

というかこのくらいしか情報がない。

C:\Users\[your user name]\.wslgconfig (※「wsl」ではなく「wslg」であることに注意)

[system-distro-env]
;disable GPU in system-distro
;(must be disabled in user-distro as well, exporting this env.)
LIBGL_ALWAYS_SOFTWARE=1

これだけ設定して、WSL2の再起動

wsl --shutdown

これで無事、画面崩れが出なくなりました。

GKEでdocker push出来ない問題

GKEを使っていて、docker imageをdocker buildで作るところまでは良かったのですが、docker pushしようとすると権限がないと言われてしまってどうしてもpushできない、という問題にはまりました。

denied: Permission "artifactregistry.repositories.uploadArtifacts" denied on resource "projects/example/locations/asia-northeast1/repositories/example" (or it may not exist)

権限自体はオーナーになっているためフルで割り当てられているのにどうして…?となっていました。
オーナー権限があるため、リポジトリの登録なんかは問題なく出来てしまいます。


でもやはり権限の問題でした。

エラーメッセージから検索してこちらの方のエントリーでわかりました。

www.pospome.work


dockerイメージをpushする前に、リポジトリ認証の設定が必要で、それはGKEのイメージをpushする先のホスト毎に必要なのに、それをやっていませんでした。

https://cloud.google.com/artifact-registry/docs/docker/store-docker-container-images?hl=ja#auth

イメージを push または pull する前に、Google Cloud CLI を使用して Artifact Registry に対するリクエストを認証します。


リージョン us-central1 の Docker リポジトリの認証を設定するには、次のコマンドを実行します。

$ gcloud auth configure-docker us-central1-docker.pkg.dev


自分はてっきり、

$ gcloud auth configure-docker

すると、gcr.ioとかstaging-k8s.gcr.ioとかのcredHelpersが表示されて

gcloud credential helpers already registered correctly.

と言われるので、もう必要な設定できているのだと思っていました。


が、これだけだとダメで、例えば「asia-northeast1-docker.pkg.dev」へpushするのなら

$ gcloud auth configure-docker asia-northeast1-docker.pkg.dev

として使うGKEのホストを登録してやらないとダメなのでした。