1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

外から攻めて検査する① ── 準備と、最初の実行まで

1
Posted at

外から攻めて検査する① ── 準備と、最初の実行まで

上原正吉(EarthLink Network Co., Ltd.)。Claude Codeを開発の主体に据え、20を超えるプロダクトを1人で同時に開発・運用しています。これは、その現場の実測記です。

外から攻めて検査する① ── 準備と、最初の実行まで

この記事は、連載「自分のサービスは自分で守る ── AI 時代の自衛セキュリティ」の第 4 回です。自分でできる検査は自分で、難しいときは EarthLink Network が検査を代行し、直せない弱点は私たちが修正します。

連載の目次

  1. AIで誰でも攻撃できる時代 ── やられる前に、自分のサイトを自分で検査する
  2. 攻撃する側が持っているツール ── AI が自分で攻撃を進めるとは
  3. 検査を始める前に ── 検査の全体像と、本番を壊さない線引き
  4. 外から攻めて検査する① ── 準備と、最初の実行まで(この記事)
  5. 外から攻めて検査する② ── 攻撃ツールと正規ツールで、見つかるものは違う(予定)
  6. 自分の書いたコードを検査する ── 静的解析(予定)
  7. 使っている部品の弱点を検査する ── 依存ライブラリ(予定)
  8. インフラの設定の誤りを検査する(予定)
  9. 検査の結果を 1 か所に集めて、どれから直すかを決める(予定)
  10. 見つかった弱点の直し方 ── 3 つの道(予定)
  11. 自分で直せないときは ── 保守契約という選択(予定)
  12. 毎日自動で検査し続ける ── 作る時代から、守り続ける時代へ(予定)

結論

ここまでの話を、今回から実際にやります。攻撃する側が実際に使うのと同じやり方で、自分たちのサービス promptflow を、自分で検査しました。この回と次回は、資料を見ながら手元で同じことを再現できるように、入力した内容とその結果の画面を一つずつ並べて見せます。今回は、準備から最初の実行までです。

使うツールは、二つの素性のものを並べます。一つは、正規の・許可された用途向けに配られている検査ツール。もう一つは、攻撃する側が実際に使う、制限のないツールです。同じやり方の、正規版と本物クラス、と言ってもいいでしょう。どちらも、自分で次の一手を決めて進む「自律型」で、高機能で高価な AI は使いません。安いモデルか、無料のツールで動かします。

一つだけ、先に約束しておきます。この検査は本番のサービスには向けず、本番に一切触れない自社コードのコピーに対して行いました。なぜそうするのか、どこまでが自分で検査してよい範囲なのか、という線引きは、前回(第 3 回)でまとめています。今回は、その線引きを守ったうえで、実際に動かすところだけを見せます。

結果を先に書きます。正規版の検査ツールを安いモデルで動かし、認証(ログイン)の 4 つの入口に範囲を絞ったところ、監査(誰が何をしたかの記録)とセッション(ログインの状態)に関わる本物の弱点が 3 件見つかりました。重い(critical・high)ものはなく、機械の評価は中くらい(MEDIUM)が 2 件、情報レベル(INFO)が 1 件です。かかった AI の利用料は、**およそ 68 円($0.45)**でした。さらに、本物クラスの攻撃ツールと、正規の外から試すツールも、動いているコピーに外から動かしました。見つかったものがツールごとにどう違うのか、その中身の比較は次回にゆずり、今回は「どう準備して、どう動かすか」を一つずつお見せします。

なぜ、AI の検査ツールを使うのか

人の手でも検査はできます。でも、今これを AI のツールでやるのには、はっきりした理由が二つあります。

一つは、速さと範囲です。promptflow には、外から触れる入口(API)が 231 本あります。これを一つずつ人が手で調べていたら、何日もかかります。その間にも、攻撃する側は自動で休みなく調べています。守る側だけが手作業では、追いつけません。AI のツールなら、どの入口をどの順で調べるかを自分で決めて、一気に見渡します。攻撃する側が AI に段取りさせるなら、守る側も同じ AI に段取りさせる。これが、第 2 回で書いた「守る側にも、同じ AI があります」の、実際の姿です。

もう一つは、一人では見きれない広さをカバーできることです。今の web のサービスは、たくさんの外部の部品や、つながった先のサービスと、複雑に絡み合っています。自分のコードだけ完璧でも、使っている部品や、つながった先が弱ければ、そこが入口になります。この絡み合いを人が頭で全部追うのは、もう無理です。だからこそ、ツールに広く見てもらい、関連する先の情報まで集めて、自動で調べる。それが現実的な方法になりました。

ここからは、実際の手順です。まず、正規版の検査ツールを一つ、端から端まで動かします。資料を見ながら、同じとおりに再現できるように書きます。

手順① 検査ツールを入れる

まず使うのは、Strix という、オープンソースの AI 自律検査ツールです。第 2 回で話した「自分のアプリの弱点を見つけるため」の、守る側のためのツールの一つで、攻撃する側が使う自律型ツールの、正規版にあたります。入れるのはコマンド一つで、特別な機械は要りません。ふだん使っているパソコンで動きます。

手順①:検査ツールを入れる。uv tool install strix-agent と入力すると strix という実行ファイルが入る。strix --version で版(1.7.0)を確かめられる。検査そのものは隔離した Docker のコンテナ(パソコンの中に作る、ほかから切り離した入れ物)の中で動くので、Docker を起動しておく。

入れたら、strix --version と入力して、版の番号が表示されれば成功です。もし command not found(コマンドが見つからない)と表示されたら、入れた場所が、コンピュータがコマンドを探す道筋(パス)に入っていません。which strix で入った場所を確かめ、その場所をパスに足します。検査は隔離した Docker のコンテナ(パソコンの中に作る、ほかから切り離した入れ物。Docker は、それを動かすためのソフトです)の中で動くので、Docker を先に起動しておいてください。Docker が動いていないと、あとで検査を始めたところで止まります。

手順② 安いモデルにつなぐ

このツールは、中心で AI のサービスを一つ動かします。攻撃する側が AI に段取りさせるのと、同じ仕組みです。ここで大事なのは、高価で高機能なモデルを選ばないことです。セキュリティの検査は、難しい推論よりも、入口を一つずつ地道に試す単純な作業の積み重ねです。だから、安いモデルで数をこなすほうが、実際に攻撃する側がやっていることにも近いのです。今回は DeepSeek という安いモデルを選び、その利用鍵を設定しました。

手順②:安いモデルにつなぐ。環境変数(コマンドに渡す設定の値)で、モデル(deepseek-chat)とつなぎ先・利用鍵を指定する。実行前に残高を確認しておく(ここでは $6.59)。あとでもう一度残高を見て、実際にいくら使ったかを確かめる。

ここで一つ、つまずきやすい点があります。モデルとツールのつなぎ方の設定が合わないと、検査が始まる前に「接続できません」と表示されて止まります。私も最初はそこで止まりました。安いモデルを OpenAI 互換のつなぎ方で指定し、つなぎ先(API のアドレス)を明示したら、動きました。うまくいかないときは、まず利用鍵が正しいか、つなぎ先のアドレスが合っているかを確かめてください。設定を一つ直せば動きます。あわせて、実行の前にモデルの残高を控えておきます。あとでもう一度残高を見れば、実際にいくら使ったかが正確に分かるからです。

手順③ 本番ではなくコピーを対象にする

前回の線引きのとおり、検査の対象は本番ではありません。自分のコードのコピーを作って、そこに向けます。コピーなら、検査ツールが何をしても本番には一切影響しません。

手順③:本番でなくコピーを対象にする。rsync で自分のコードを別の場所にコピーする(本番には触れない)。そのうえで、範囲を認証(auth)の入口だけに絞る。ここには 4 つの入口(鍵の交換・ログアウト・本人確認・鍵の更新)がある。範囲を絞るほど、費用は小さく、調べは深くなる。

コピーを作ったら、検査する範囲を絞ります。サービス全体には 231 の入口がありますが、今回はそのうち認証(ログインの鍵を受け渡しする部分)の 4 つの入口だけに絞りました。鍵の交換・ログアウト・本人確認・鍵の更新です。範囲を絞ると、費用が小さくても、表面をなでるだけでなく一つずつ深く調べるところまで届きます。「広く浅く」より「狭く深く」のほうが、最初の一歩としては確実です。

手順④ コマンドを実行する(費用の上限つき)

準備ができたら、検査する対象と、調べてほしい内容を指定して、実行します。ここでいちばん大事なのが、費用の上限を一緒に指定することです。使いすぎたら、そこで自動で止まります。これがないと、思わぬ額になる心配があります。

手順④:実行するコマンド。-t で対象(コピーの auth の範囲)、-m quick で手早い一次検査、--max-budget 1.0 で費用の上限($1.00 で自動停止)、-n で最後まで自動で進める、--instruction で「自社コードの許可された自己検査。結果だけを、該当箇所つきで報告」と伝える。

指定した内容は、ひとことで言えば「これは自分のコードの、許可された自己検査です。結果だけを、どのファイルのどこか分かる形で報告してください」というものです。攻撃を実際に仕掛けるのではなく、弱点を見つけて報告させる、という指定です。費用の上限は今回 $1.00 にしました。実際にはそこまで届かず、自動で終わりました。

手順⑤ 走り出し──AI が自分で段取りする

実行すると、まず隔離した環境(Docker のコンテナ)が立ち上がり、検査に使うスキルが読み込まれ、AI が自分で検査の計画を立て始めます。人が「次はこれを調べて」と指示しなくても、前の結果を見て、次に何を調べるかを自分で決めていきます。

手順⑤:走り出しの画面。隔離した Docker のコンテナが立ち上がり、10 個のスキルが読み込まれ、44 の機能を持った「Root Agent」が作られる。interactive=False で、人が付きっきりでなくても最後まで自分で進む。ここから先、何を読み、何を試すかは AI が自分で決める。

読み込まれるスキルの中には、counterevidence(反証)という名前のものがあります。これは、「この入口が危ないかもしれない」と見つけたときに、わざと逆の証拠を探して、本当に危ないのかを自分で検証するための仕組みです。この反証の仕組みが、あとで出てくる「見つけたと言いっぱなしにしない」という振る舞いにつながります。第 2 回で、攻撃する側のツールが自分で段取りを進めると書きましたが、それを正規版のツールで、自分のサービスに対してやっている。段取りを AI が自分で決めて進める、という進め方は、攻撃する側のツールと同じです。違うのは、検査する相手が自分のものである、という点です。

手順⑥ どこで止まり、いくらかかったか

しばらくすると、AI は自分で検査を終えます。終わったら、実行の記録と、手順②で控えた残高を見比べて、実際にいくらかかったかを確かめます。

手順⑥:終わったところと、実費。記録には「status: completed(完了)、235 回のやり取り、約 9 分」とある。残高をもう一度見ると $6.14。実行前の $6.59 との差、つまり $0.45 が、今回かかった実費。上限の $1.00 には届かなかった。前に高価なモデルでアプリ全体を一度に調べたときは、$3.04 を使ったところで上限に当たって止まり、弱点は一つも確定しなかった。

実費は $0.45、日本円でおよそ 68 円でした。やり取りは 235 回、時間はおよそ 9 分です。前に高価なモデル(gpt-4.1)でアプリ全体(231 の入口)を一度に調べたときは、$3.04 を使ったところで上限に当たって止まり、深いところまで届かず、弱点は一つも確定しませんでした。範囲を認証の 4 つの入口に絞り、安いモデルに替えた今回は、$0.45 で最後まで終わり、本物の弱点が 3 件見つかりました。「高いモデルでないと検査できない」ということは、ありません。むしろ安いモデルで数をこなすのが、この種の作業には合っています。

手順⑦ 見つかった三つの弱点

今回の検査で、認証の 4 つの入口から、本物の弱点が 3 件見つかりました。どれも、いますぐサービスが乗っ取られるような重い(critical・high)ものではなく、機械の評価は中くらい(MEDIUM)が 2 件、情報レベル(INFO)が 1 件です。ただし、監査(誰が何をしたかの記録)とセッション(ログインの状態)という、認証でいちばん大事な二つの土台にひびが入っている、という指摘です。

手順⑦:見つかった三つの弱点。①ログアウトが、ログインを消す依頼を送らないまま、断られても、つながらなくても「成功」と返す(情報レベル)。②監査の記録が、署名を確かめていない鍵の中身から「誰がやったか」を読み取っている(中くらい)。③鍵の更新に失敗したとき、鍵の断片と相手のエラー文をそのままログに書いている(中くらい)。情報レベル(INFO)が 1 件、中くらい(MEDIUM)が 2 件。どれも直し方ははっきりしている。

三つを、ふだんの言葉で言い直します。

  1. ログアウトが、ログインが消えたか確かめないまま「成功」と返す(情報レベル):ログアウトの入口は、ログインを消す依頼を相手に送らないまま、相手が断っても、相手につながらなくても、「成功しました」と返し、記録にも「セッションを消した」と書いていました。試した 8 通りのうち 7 通りがそうでした。機械の評価は、いちばん軽い情報レベルです。鍵の更新に使う鍵の写しを先に手に入れた相手は、利用者がログアウトしたと思った後も、新しいログインの鍵を作り続けられる、という危うさの芽です。
  2. 監査の「誰が」を、確かめずに信じている(中くらい):誰が何をしたかの記録に書く「誰が」の部分を、署名(偽物でないことを示す印)を確かめていない鍵の中身から読み取っていました。つまり、ログインしていない相手でも、好きな名前を記録に紛れ込ませられる、ということです。記録が後で証拠にならなくなります。
  3. 鍵の断片が、ログに漏れる(中くらい):鍵の更新に失敗したとき、受け取った鍵の最初の 12 文字と長さ、相手から返ってきたエラー文を、そのままログに書いていました。ツールは、ログを見られる人のほうが鍵の保管庫を見られる人より多いと見て、ここから漏れる恐れがあると評価しました。しかも、二行上には「エラーの中身と鍵は、利用者に返す画面に入れてはいけない」という決まりが書いてあります。利用者に返す側はこれを守っているのに、ログに書く側だけが守っていませんでした。

大事なのは、機械が「見つけたかもしれない」で止めず、counterevidence(反証)の仕組みで一つずつ試し直し、本当に起きることだけを 3 件に絞り込んだことです。ログアウトと鍵の断片の 2 件は、Strix の隔離したコンテナの中で、通信の相手や記録の書き込み先を代わりのものに置き換えて、直す前のコードを実際に動かし、起きることを確かめました。監査の 1 件は、コードの流れを追って示しました。見つけたと言いっぱなしにせず、本物かどうかを自分で確かめる。ここが、ただ警告を並べるだけの古い検査と違うところです。3 件それぞれが、どのファイルのどこか・どう再現するか・どう直すか、までついてきます。

なお、このツールは「ここには、この種の危険は無い」という、無いことの証明もしてくれました。注入(データベースやコマンドの差し込み)や SSRF(サーバをだまして別の場所へ通信させる攻撃)といった、よく話題になる危険のいくつかが、この範囲には構造的に起こり得ないと示されています。見つけた弱点と同じくらい、この「無い」の証明も大事なのですが、その読み方と、なぜそれが値打ちを持つのかは、次回ていねいに扱います。

外から攻めるツールの準備 ── 動いているコピーを立てる

ここまでは、正規版のツールが、コピーしたコードを読んで弱点を探しました。次は、攻撃する側が実際に使う、本物クラスのツールです。第 3 回で名前を挙げた HexStrike です。こちらはコードを読みません。動いているサービスを、外から、見知らぬ他人のように試します。そのためには、検査される側のサービスを、実際に動かしておく必要があります。

ただし、動かすといっても本番ではありません。外からは入れない専用の環境の中に、自分のサービスのログインまわりの処理だけを写した、使い捨てのコピーを立ち上げます。検査の通信は、このコピーにだけ向けます。

準備:外から攻めるツールのために、動いているコピーを、外からは入れない専用の環境に立てる。docker compose up で、検査される側(ログインの 4 つの処理をそのまま写したもの)、本人確認の代わりをする簡易版のサーバ、攻撃する側(攻撃ツールを安い AI で動かすもの)の三つが立ち上がる。外から入る口は開けず、検査の通信はこのコピーにだけ向けるので、本番にも他人にも触れない。あとで使う正規の外から試すツール(ZAP・StackHawk)も、同じ標的に向ける。

この専用の環境の中で動くのは、三つです。検査される側(自分のログイン処理のコピー)、本人確認を代わりに引き受ける簡易版のサーバ、そして攻撃する側のツールです。相手は、この使い捨てのコピーだけ。本番にも、他人のサイトにも、一切触れません。この連載が扱うのは、あくまで自分で自分を調べることだけです。

外から試す側は、自分で手を決める

まず、攻撃する側が使う本物クラスのツールです。面白いのは、こちらに渡すのはサービスの場所(アドレス)だけ、という点です。あとは、安い AI が「次に何を試すか」を、自分で決めていきます。人が手順を書くわけではありません。

外から試す側のツールを、安い AI が自分で動かしていく様子。場所を渡すだけで、AI が次の一手を自分で決める。1 手目「サービスが動いているか確認し、応答のヘッダを見る」、4 手目「どんな値でもログインの鍵(トークン)が出る、入り込めそうだ」、5 手目で深刻な候補として記録、12 手目「ヘッダを調べる」、13 手目でヘッダ欠落を記録、24 手目で手数の上限に達して停止。各手の右に、そこまでに使った AI の量から計算した費用が出ている。合計で約 3 セント(約 5 円)。

左の数字が、何手目かです。右の数字が、その時点までに使った AI の量から計算した費用です。1 手目で、AI は「まずサービスが動いているか確かめて、応答のヘッダを見よう」と考え、自分で調べるツールを選びました。4 手目では、どんな値を送ってもログインの鍵(トークン)が出てくるので入り込めそうだ、という趣旨のことを書き、5 手目でそれを深刻な候補として記録しました。こうして 24 手まで進み、手数の上限に達して止まりました。全部で挙げた候補は 6 件。ここまでにかかった費用は、約 3 セント、日本円で 5 円ほどです(使った量からの計算で、残高はセントの単位では変わりませんでした)。高機能で最新の AI ではありません。安い AI を、ただ数多く動かしただけです。

ここで大事なことを一つ。この 6 件は、まだ「候補」です。安い AI を数多く動かすと、本物に混ざって、自信に満ちた思い違いもたくさん出てきます。実際、今回の候補の中にも、よく調べると自分のコードの弱点ではなく、簡易版のサーバやテストのやり方から生まれた思い違いが混じっていました。どれが本物で、どれが思い違いかを一つずつ仕分けるところは、次回ていねいにお見せします。今回は、「場所を渡すだけで、安い AI が自分で攻めの手を進め、数セントで候補を挙げてくる」という、実行そのものを見てください。

外から試す側だけが、見つけたもの

挙がった候補の中に、一つ、コードを読む側のツールには決して見つけられないものがありました。応答に付いているべき安全のための設定(セキュリティヘッダ)が、まるごと抜けていた、という弱点です。

外から試す側だけが捕まえたもの。動いているサービスの応答を実際に調べるツール(nuclei)が、安全のためのヘッダが全部欠けていることを検出した。情報の持ち出しを防ぐ設定、通信の暗号化を強制する設定、表示の乗っ取りを防ぐ設定などが、すべて応答から抜けている。使っている土台(Next.js)の名前まで応答に出ている。コードを読むだけのツールには、動いている応答そのものが見えないので、これは報告できない。

このヘッダというのは、ブラウザに「この表示は他のサイトに埋め込ませない」「通信は必ず暗号化する」といった約束事を伝える、小さな設定のことです。これが抜けていると、表示を乗っ取られたり、通信を盗み見られたりする隙につながります。コードの中には出てこない、動いているサービスの「見た目の外側」にある設定なので、応答を実際に受け取らないと、欠けているかどうか分かりません。コードを読むだけのツールは、動いている応答そのものを見ないので、原理的に、これを見つけられません。外から試す側の、本当の手柄でした。

この「外から試すと見つかるもの」と「コードを読むと見つかるもの」は、構造的に違います。その違いを正面から並べるのが、次回の主題の一つです。

正規のツールでも、外から同じように調べられる

ここまで、外から試す側には攻撃する側のツールを使いました。でも、外から試すこと自体は、正規の・許可された用途向けのツールでもできます。しかも、無料から始められます。同じ動いているコピーに、正規の外から試すツールを二つ、動かしました。

一つめは、ZAP という、無料で誰でも使えるツールです。

正規の外から試すツール(無料):OWASP ZAP(Web の安全を調べる国際的な団体 OWASP が作った無料の検査ツール)の実行ログ。docker run で ZAP を立ち上げ、サービスの入口の一覧(OpenAPI の仕様)を読み込んで、決められた検査項目を一つずつ動かしていく。「取り込んだ入口 8・全 25 の URL」と出たあと、注入・OS コマンドの差し込み・XML(データを受け渡すための書式の一つ)を悪用する攻撃・クラウドの設定情報の露出といった項目を順に検査している。全部で約 120 の項目を動かす(うち 117 は問題なしで通過)。最後のまとめの集計は、結果の画面として次回に。

ZAP には、サービスの入口の一覧(OpenAPI の仕様)を渡します。すると、その一覧をもとに、決められた検査項目を一つずつ、動いているコピーに対して動かしていきます。画面に「取り込んだ入口 8・全 25 の URL」と出たあと、注入・OS コマンドの差し込み・XML を悪用する攻撃・クラウドの設定情報の露出といった項目を、順に検査していきます。全部で約 120 の項目を動かしました(うち 117 は問題なく通りました)。何が出たか、という集計は結果の画面なので、次回にお見せします。ここでは「無料のツールでも、同じコピーに対して、外から規律よく検査が回る」という実行の様子を見てください。

二つめは、StackHawk という、会社向けの商用のツールです。恒久の無料プランはありませんが、最初の 14 日間は無料で試せます。今回は、その期間の中で使いました。

正規の外から試すツール(商用):StackHawk(HawkScan)の実行ログ。docker run で立ち上げ、サービスの入口を自動でたどって一覧を作り(17 の URL を発見)、そのうえで実際に検査を動かす。「検査を設定中」「入口のたどりが完了」「検査を開始・完了」と進み、見つかったものを管理の画面へ送る。同じ標的・同じ入口の一覧に向けている。見つかったものの集計は、結果の画面として次回に。

StackHawk も、同じ動いているコピーに、同じ入口の一覧を使って向けます。まずサービスの入口を自動でたどって一覧を作り(17 の URL を見つけました)、そのうえで実際に検査を動かします。「検査を設定中」「入口のたどりが完了」「検査を開始・完了」と進み、見つかったものを管理の画面へ送って終わります。こちらも、見つかったものの集計は次回です。

こうして、今回は四つのツールを、自分のサービスのコピーに動かしました。正規版の検査ツール(コードを読む)、本物クラスの攻撃ツール(外から試す)、そして正規の外から試すツールが二つ(無料の ZAP と、商用の StackHawk)。どれも、特別な機械や、高機能で高価な AI を要しません。準備と最初の実行は、ここまでです。

次回

次回は、これら四つのツールが実際に何を見つけたのかを、正面から並べて比べます。外から試すツールと、コードを読むツールでは、見つかる弱点の種類が構造的に違います。片方にしか見えないものが、それぞれにあるのです。さらに、安い AI で動かした攻撃ツールが挙げた候補のうち、どれが本物で、どれが思い違いだったのか。正規のツールは、誤りをどれだけ出したのか。かかった費用はいくらで、「正規は高い」という思い込みはまだ当てはまるのか。見つかったものの中身を、実際の結果の画面で並べてお見せします。


この連載では、攻撃ツールが誰でも無料で手に入る時代に、自分のサービスを自分で検査し、弱いところを先に見つけて直す手順を、順に示します。検査の対象は自社サービスに限り、他人のサイトを攻撃する手順は扱いません。
自分で検査するのが難しい方は、EarthLink Network が検査を代行します。弱点は見つかったが自分では直せない、という方は、私たちが修正まで引き受けます。お気軽にご相談ください。
役に立ったと感じたら、ぜひ「いいね」と記事の購読をお願いいたします。

自社プロダクトは https://www.eln.ne.jp/products にまとめています。

筆者について

上原正吉。EarthLink Network Co., Ltd. でAI開発をしています。2025年からClaude Codeを開発の主体に据え、今は20を超えるプロダクトを1人で同時に開発・運用しています。この連載では、その現場で実際に起きたこと(うまくいったことも、失敗も)を、数字と一緒に書いていきます。

また、AIで業務や開発を組み替えたい会社・チーム向けに、AI活用のコンサルティングも受け付けています。ご相談は www.eln.ne.jp からどうぞ。


EarthLink Network は、会社の全業務を AI で回すために、必要になったものを自社で作っています。いま作っているプロダクトの一覧と概要は、こちらにまとめています。

→ EarthLink Network が自社でつくっている18のプロダクト

会社と各プロダクトの詳細は、公式サイト www.eln.ne.jp をご覧ください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?