Blogブログ

GitLabサーバが悪用されてた話

こんにちは、おはようございます?こんばんは?

プログラミングよりもインフラの方が好きかもしれない牧長です。

皆さん、Gitは使っていますよね?

ホスティングサービスは何を使っていますか?

GitHubが多い印象がありますが、弊社ではConoHaのVPS上に立てたGitLabを利用しています。

GitLabを開発しているGitLab社ですが、最近NASDAQに上場して話題になりましたよね。

上場時の売り出し価格的に、時価総額は1兆を超えていたそうです。

なぜGitLabなのか

なぜ弊社がGitLabを利用しているのか

一番の理由は、自社内で利用するシステムは全て自社で管理したいという思惑があります。
(VPS使ってる時点でどうやねんって話しは別で)

GitHubは時々サービスが落ちたりしていますが、自社サーバで管理していると、そのような事態に影響がありません。
また、めちゃくちゃ不安がりなので、リポジトリのバックアップもしておかないと気が気でなりません。

弊社では毎日夜間に、GitLab上のすべてのリポジトリを、社内サーバ+GoogleDriveへ多重バックアップしています。

不審なアカウント

ある時GitLabの管理画面を見ると不審なアカウントがありました。

画像ではすでにブロック済みですが、こやつらが管理者権限でいつの間にか作成されていました。

怖い怖い

すぐさまログを確認

あかん、パスワード簡単にしてるやつがおるやん

ってことで、すぐさま不審なアカウントはブロックし、社外の人も含めて2段階認証を必須としました。

さらにログを解析

アカウントはPythonのスクリプトで作成していた様子。
該当の動きを見てみても、リポジトリへの直接アクセスはなく、APIを用いてリポジトリリストを取っていったのみでした。

ソースコードの流出はなさそう

ということで、いったん落ち着きましたが。。。

なんか重たいんやけど?

この時からなんか、すごくGitLabが重い

Web画面からのレスポンスも遅いし、リポジトリのpushもクッソ重い

なんや?また不正アクセスか?

と思いましたが、前回と違って不審なユーザはなし

相変わらずブルートフォースアタックは仕掛けられていましたが、2段階認証のおかげで突破された形跡はナシ

はて?

この時同時に、Zabbixからもしょっちゅうアラートが流れていました。

履歴なのですでに解決済みになっていますが、アクセスでけへんで!!のエラーが頻繁に発生

Discordにも大量の通知が

よくわからんプロセスが!!

SSHでサーバに潜り、topコマンドで確認

ロードアベレージが7を超えている!!

CPU使用率は100%に張り付いており、なにやらよくわからないプロセスが使い切っている

当時スクリーンショットを取っていなかったので載せれないが、ランダムな文字列で生成したであろうプロセスが複数個存在しており、そやつらがCPUを使い切っている

こわい、ひとまずkillや!!

で、プロセスIDから実行ファイルを確認や!!

ってしたのですが、実行場所が/dev/shm

メモリ上、、、

ワシにはこれ以上わからん、、、

killで収まったからいったん置いておこう、、、

ってなったのですが、すぐにまた新たなプロセスが沸き上がり鼬ごっこ

なんだよこれ、、、

救世主GIGAZINE

そんな時、いつも読んでいるGIGAZINEにこんな記事が

「1Tbpsを超えるDDoS攻撃にGitLabサーバーが悪用されていると判明」

え、もうこれやん

そういえばうちのGitLab全然バージョン上げてなった、、、

当時のバージョンは12.6.2
GIGAZINEの記事を見たときの最新バージョンは14.4.2

セキュリティパッチは今年配布されていたとのこと

はい、当ててませんでしたごめんなさい

GitLabアップグレード

さっそく夜間帯にアップグレード作業を実施しました。

とはいっても作業は簡単

CentOSで運用していたので、yumでアップグレードできます。

ただし、バージョンが古すぎるため、いくつがバージョンを経由します

12.6.2 => 12.8.10 => 13.0.14 => 13.12.15 => 14.0.12 => 14.4.2

という流れを取りました。

アップグレード時のコマンドはこんな感じ


# yum install gitlab-ce-14.4.2-ce.0.el7

また、弊社の環境では最後の14.4.2にアップグレードした際、下記のようなエラーが出ました


== 20210701141346 FinalizeCiBuildsStageIdBigintConversion: migrating ========== 
STDERR: 
---- End output of "bash"  "/tmp/chef-script20211110-11473-1dkiuv1" ---- 
Ran "bash"  "/tmp/chef-script20211110-11473-1dkiuv1" returned 1 
Warnings: 
Environment variable LC_ALL specifie

マイグレーションでエラー出てるなぁ

手動マイグレーションしたらうまくいきました


# gitlab-rake db:migrate 
# gitlab-ctl reconfigure 
# gitlab-ctl restart

アップグレード大事

アップグレードは大事です

Zabbixだけでは不十分

セキュリティ情報はしっかりと確認しましょう

この失敗を元に、弊社ではJPCERTのRSSを購読し、自動的にDiscordに投稿するようにしました

みなさん、セキュリティしっかりしましょうね。

牧長 心

執筆者

CEO

牧長 心