うさぎでもわかる 今更だが.DS_Storeとはなにか、GitHubとかに公開するとどんな危険性があるのか
📢noteに乗り換えました
うさぎでもわかる 今更だが.DS_Storeとはなにか、GitHubとかに公開するとどんな危険性があるのか
👇️PodCastでも聴けます
うさぎです!🐰
皆さん経験ありませんか?
「あれ?なんか知らないファイルがcommitされてる...」
「.DS_Store?なにこれ?」
「まぁいっか、害はなさそうだし...」
えと...実はこれ、結構危険かもしれないです!
今日は、macユーザーなら誰もが一度は出会う謎のファイル「.DS_Store」について、その正体と、GitHubに公開した際のセキュリティリスクを、うさぎでもわかるように解説していきます。
「なんとなく邪魔だなー」で済ませていたあなたも、この記事を読めば「これヤバいやつじゃん!」となるかも...?
.DS_Storeファイルとは?
.DS_Store(Desktop Services Store)は、macOSのFinderが自動的に生成する隠しファイルです。
Finderでフォルダを開くたびに、macOSはそのフォルダの表示設定を記録するために、このファイルをこっそり作成しています。
含まれている情報
.DS_Storeファイルには以下のような情報が含まれています。
- フォルダ内のアイコンの位置
- ウィンドウのサイズと位置
- 表示設定(アイコン表示、リスト表示など)
- 背景画像の設定
- ディレクトリ内のファイル一覧(←これ重要!)
そう、最後のやつ、ちょっと怖いですよね。
なぜ作られるのか
macOSは、ユーザーの利便性を考えて、フォルダごとに表示設定を記憶しています。例えば、写真フォルダはアイコン表示、ドキュメントフォルダはリスト表示...みたいな感じで、個別に設定できるわけです。
確かに便利なんですが、この情報をファイルとして保存してしまうところが、セキュリティ的には問題になってきます。
なぜGitHubに公開すると危険なのか?
「別に表示設定くらい漏れても...」と思うかもしれませんが、実は結構深刻な問題があります。
1. ディレクトリ構造の漏洩
.DS_Storeファイルには、そのディレクトリ内のファイル一覧が含まれています。つまり、公開されると以下のような情報が漏れる可能性があります。
- プライベートなファイル名
- まだ公開していないファイルの存在
- 削除したと思っていたファイルの痕跡
- プロジェクトの内部構造
2. 攻撃の足掛かりになる
攻撃者は.DS_Storeファイルから得た情報を使って、より効果的な攻撃を仕掛けることができます。
- 存在するファイルやディレクトリを特定
- システムの構造を把握
- 脆弱性のあるファイルを探す手がかりに
- ソーシャルエンジニアリングの材料として使用
3. 実際の攻撃シナリオ
例えば、こんなシナリオが考えられます。
- 攻撃者がGitHub上で.DS_Storeファイルを発見
- ファイルを解析して、
/admin/config.php
というファイルの存在を確認 - 実際のWebサイトで
https://example.com/admin/config.php
にアクセス - もしアクセス制限が甘ければ、設定ファイルの内容が見えてしまう
うさぎ的にはこれ、結構ゾッとする話です...
実際の被害例と攻撃手法
.DS_Storeを狙った攻撃の実例
過去には、以下のような事例が報告されています。
- Webサーバーに公開された.DS_Storeから、非公開APIのエンドポイントが露出
- 企業の内部ディレクトリ構造が判明し、機密ファイルへのアクセスが試みられる
- 開発環境のファイル構成が漏れ、本番環境への攻撃のヒントに
解析ツールの存在
実は、.DS_Storeファイルを解析するツールも存在します。
ds_store_exp
DS_Store Parser
- Burp SuiteやNiktoなどのセキュリティツール
これらのツールを使えば、誰でも簡単に.DS_Storeファイルの中身を覗けてしまいます。
企業での情報漏洩
ある企業では、開発者が誤って.DS_Storeファイルをリポジトリにコミットしたことで、社内の機密プロジェクトのファイル名が外部に漏れるという事件が発生しました。
幸い大きな被害には至りませんでしたが、もしそのファイル名から重要な情報が推測できた場合、深刻な事態になっていた可能性があります。
対策方法
さて、ここからが重要です!どうやって.DS_Storeの危険から身を守るか、順を追って説明します。
1. .gitignoreでの除外設定
最も基本的な対策は、.gitignoreファイルで.DS_Storeを除外することです。
# .gitignoreファイルに追加
.DS_Store
プロジェクトのルートディレクトリに.gitignoreファイルを作成し、上記の内容を追加するだけでOKです。
2. すでにcommitしてしまった場合の対処法
もし既に.DS_Storeをcommitしてしまっていたら、以下の手順で削除できます。
# キャッシュから.DS_Storeを削除
git rm --cached .DS_Store
# .gitignoreに追加
echo ".DS_Store" >> .gitignore
# 変更をcommit
git add .gitignore
git commit -m "Remove .DS_Store and add to .gitignore"
# リモートにpush
git push origin main
3. 履歴からの完全削除
もし履歴からも完全に削除したい場合は、git filter-branchを使用します。
# 履歴から.DS_Storeを削除(慎重に実行してください!)
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch .DS_Store" \
--prune-empty --tag-name-filter cat -- --all
ただし、この操作は履歴を書き換えるため、チームで作業している場合は要注意です!
4. グローバル.gitignoreの設定
毎回プロジェクトごとに設定するのが面倒な場合は、グローバルな.gitignoreを設定できます。
# グローバル.gitignoreファイルを作成
echo ".DS_Store" >> ~/.gitignore_global
# Gitにグローバル.gitignoreを登録
git config --global core.excludesfile ~/.gitignore_global
これで、すべてのGitリポジトリで.DS_Storeが自動的に無視されます。
5. macOSでの.DS_Store作成防止設定
ネットワークドライブでの.DS_Store作成を防ぐ設定もできます。
# ネットワークドライブでの.DS_Store作成を無効化
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE
# 設定を有効にするためにFinderを再起動
killall Finder
ただし、この設定はローカルドライブには適用されません。
その他の不要ファイルについて
.DS_Store以外にも、気をつけるべきファイルがあります。
Thumbs.db(Windows)
Windowsでは、サムネイル画像のキャッシュファイル「Thumbs.db」が作成されます。これも.gitignoreに追加しておきましょう。
# Windowsの不要ファイル
Thumbs.db
desktop.ini
その他の隠しファイル
開発環境によっては、以下のようなファイルも生成されることがあります。
# IDEの設定ファイル
.idea/
.vscode/
*.swp
*.swo
# OSの一時ファイル
.Trashes
.Spotlight-V100
.fseventsd
まとめ
.DS_Storeは一見無害に見えますが、実はセキュリティリスクを抱えた危険なファイルでした。
うさぎからのアドバイス
-
必ず.gitignoreに追加する
新しいプロジェクトを始めたら、まず最初に.gitignoreを設定しましょう。 -
グローバル設定を活用する
一度設定しておけば、忘れることもありません。 -
チーム全体で意識を共有する
「知らなかった」では済まされない問題です。チームメンバーにも教えてあげましょう。 -
定期的にリポジトリをチェックする
うっかりcommitしていないか、定期的に確認することも大切です。
セキュリティは小さなことの積み重ねです。「まぁいっか」と思わずに、しっかり対策していきましょう!
最後に...うさぎも最初は「.DS_Store?何それ美味しいの?」状態でしたが、調べてみると意外と怖い話でした。皆さんも気をつけてくださいね!🐰
Discussion