Wikibooks
jawikibooks
https://ja.wikibooks.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8
MediaWiki 1.47.0-wmf.24
first-letter
メディア
特別
トーク
利用者
利用者・トーク
Wikibooks
Wikibooks・トーク
ファイル
ファイル・トーク
MediaWiki
MediaWiki・トーク
テンプレート
テンプレート・トーク
ヘルプ
ヘルプ・トーク
カテゴリ
カテゴリ・トーク
Transwiki
Transwiki‐ノート
TimedText
TimedText talk
モジュール
モジュール・トーク
Event
Event talk
ガリア戦記
0
3514
304910
304866
2026-10-20T14:08:19Z
Linguae
449
/* 各巻対訳 */ 進捗
304910
wikitext
text/x-wiki
__notoc__
<!--【2006年4月23日起稿】-->
{{NDC|992|かりあせんき}}
{{NDC|232|かりあせんき}}
*[[古典ラテン語]]>'''ガリア戦記'''
*[[ラテン文学]]>'''ガリア戦記'''
<div style="font-family:Arial Black;font-style:normal;font-size:18pt;color:#990033;text-align:center;background-color:#fee;">C · IVLII · CAESARIS · COMMENTARII · DE · BELLO · GALLICO</div>
:
[[画像:Commentarii_de_Bello_Gallico.jpg|thumb|right|240px|1783年刊行の『ガリア戦記』と『内乱記』]]
[[画像:Lionel Royer - Vercingetorix Throwing down His Weapons at the feet of Julius Caesar.jpg|thumb|right|280px|カエサル(右)と対面する[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]](左)(リオネル=ノエル・ロワイエ [[w:fr:Lionel Royer|(fr)]] 画、1899年)]]
<div style="background-color:#fff; width:70%;">[[w:古代ローマ|古代ローマ]]の政治家・武将・著述家である[[w:ガイウス・ユリウス・カエサル|ガイウス・ユリウス・カエサル4世]]([[w:la:Gaius_Iulius_Caesar|Gaius Iulius Caesar IV]])が[[w:ガリア戦争|ガリア戦争]]([[w:la:Bellum_Gallicum|Bellum Gallicum]])の経過を[[w:古典ラテン語|古典ラテン語]]で著述した[[w:ラテン文学|ラテン文学]]の古典的名著『ガリア戦記』([[wikt:la:Commentarii_de_bello_Gallico|Commentarii de bello Gallico]])の[[ラテン語]]・[[日本語]]対訳。第8巻のみ[[w:アウルス・ヒルティウス|アウルス・ヒルティウス]]([[w:la:Aulus_Hirtius|Aulus Hirtius]])による著作。
刊行当時の書名は、『ガイウス・ユリウス・カエサルの業績(戦績)に関する覚え書』(C. Iulii Caesaris Commentarii Rerum Gestarum)であったと推定され、『'''[[内乱記]]'''』と併せたものであった。
ルネサンス期以降は『ガイウス・ユリウス・カエサルのガリア戦争および内戦に関する覚え書』(C. Iulii Caesaris Commentarii de Bello Gallico et Civili)と題して刊行されていた(右の画像)。</div>
<div style="background-color:#dfd; width:70%;"> 『ガリア戦記』は、ガリア戦争の当事者であるカエサルが、簡潔明晰かつ客観的に描写することにより自らの戦争の正当性を示し<ref name="ガリア戦記">[https://kotobank.jp/word/%E3%82%AC%E3%83%AA%E3%82%A2%E6%88%A6%E8%A8%98-47339 ガリア戦記(がりあせんき)とは? 意味や使い方 - コトバンク]</ref>、自らに対する種々の非難に対する弁明を意図したものである<ref name="ガリア戦記"/>。簡潔雄渾な名文として名高く<ref name="ガリア戦記"/>、第一級の歴史書であるとともにラテン文学の傑作とされている<ref name="ガリア戦記"/>。</div>
<br><br>
<div style="border:solid #999 1px;background:#F8F8F8;max-width:60%;padding:0.5em 1em;margin:0.5em auto;align:left;overflow:auto;text-align:justify;">
『ガリア戦記』冒頭部分の英語圏の人による朗読を聴いてみよう。
Gallia est omnis<!--omnes--> dīvīsa in partēs trēs; quārum ūnam incolunt Belgae, aliam Aquītānī, tertiam quī<!--qui--> ipsōrum linguā Celtae, nostrā Gallī appellantur. Hī omnēs linguā, īnstitūtīs, lēgibus inter sē differunt. Gallōs ab Aquītānīs Garumna flūmen, ā Belgīs Mātrona et Sēquana dīvidit.
::::: [[File:La-cls-de-bello-gallico.ogg]]
::::::([[w:Vorbis|Ogg Vorbis]] 音声ファイル、<strong>長さ 54秒</strong>、155 kbps)
</div>
== 各巻対訳 ==
*[[ガリア戦記 第1巻]](54節){{進捗|25%|2009-07-28}}<u>(作成途上)</u>:[[w:ヘルウェティイ族|ヘルウェティイー族]]との戦役。[[w:アリオウィストゥス|アリオウィストゥス]]との戦役。
*[[ガリア戦記 第2巻]](35節){{進捗|75%|2022-04-25}}:[[w:ベルガエ人|ベルガエ人]]同盟軍との戦役、大西洋岸の征服。
*[[ガリア戦記 第3巻]](29節){{進捗|75%|2022-10-31}}:アルプスの戦い、[[w:アレモリカ|大西洋岸]]および[[w:アクィタニア|アクィータニア]]の平定。 <!--【2007年4月30日から】-->
*[[ガリア戦記 第4巻]](38節){{進捗|75%|2023-07-24}}:[[w:ゲルマニア|ゲルマーニア]]人との戦役。[[w:ブリタンニア|ブリタンニア]]への初めての遠征。
*[[ガリア戦記 第5巻]](58節){{進捗|75%|2024-09-23}}:ブリタンニアへの再遠征。[[w:エブロネス族|エブローネース族]]ら諸部族の蜂起。
*[[ガリア戦記 第6巻]](44節){{進捗|75%|2025-10-26}}:ガッリアと[[w:ゲルマニア|ゲルマーニア]]の社会と風習。エブローネース族らの平定。
*[[ガリア戦記 第7巻]](90節){{進捗|50%|2026-10-20}}:[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]らが率いるガッリア同盟軍との戦役。
*ガリア戦記 第8巻(55節):<u>(掲載未定)</u>
== 注解編と用例集 ==
[[画像:Vercingétorix se rend à César 1886 HPMotte.jpg|thumb|right|280px|カエサルのもとへ向かう[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]](アンリ=ポール・モット [[w:fr:Henri-Paul Motte|(fr)]] 画、1886年)]]
;注解編
*<span style="background-color:#ffd;">[[/注解編]] {{進捗|25%|2024-09-23}}</span> <small>(2020年3月27日から)</small>
**<span style="background-color:#ffd;">[[/注解編/写本と校訂版|/写本と校訂版]] {{進捗|25%|2025-07-27}}</span><!-- 2020-04-17 --> <small>(2020年4月17日から)</small>
**<span style="background-color:#ffd;">[[/注解編/表記のゆれ|/表記のゆれ]] {{進捗|00%|2026-03-29}}</span><!--(2026-03-29)--> <small>(2026年3月29日から)</small>
*各巻の注解
**<span style="background-color:#ffd;">[[ガリア戦記 第1巻/注解|/第1巻注解]] {{進捗|25%|2020-06-01}}</span> <small>(2020年3月27日から)</small>
**<span style="background-color:#ffd;">[[ガリア戦記 第2巻/注解|/第2巻注解]] {{進捗|25%|2022-05-05}}</span> <small>(2021年8月26日から)</small>
**<span style="background-color:#ffd;">[[ガリア戦記 第3巻/注解|/第3巻注解]] {{進捗|25%|2022-10-27}}</span> <small>(2022年3月27日から)</small>
**<span style="background-color:#ffd;">[[ガリア戦記 第4巻/注解|/第4巻注解]] {{進捗|25%|2023-07-10}}</span> <small>(2022年10月20日から)</small>
**<span style="background-color:#ffd;">[[ガリア戦記 第5巻/注解|/第5巻注解]] {{進捗|25%|2024-09-23}}</span> <small>(2023年07月20日から)</small>
**<span style="background-color:#ffd;">[[ガリア戦記 第6巻/注解|/第6巻注解]] {{進捗|25%|2025-11-05}}</span> <small>(2024年09月09日から)</small>
**<span style="background-color:#ffd;">[[ガリア戦記 第7巻/注解|/第7巻注解]] {{進捗|00%|2026-08-12}}</span> <small>(2025年10月20日から)</small>
;用例集
*<span style="background-colo:#ffd;">[[/用例集]] {{進捗|25%|2020-03-29}}</span><!-- 2020-03-29 -->
;ガリア語
*<span style="background-colo:#ffd;">[[/ガリア語の名前]] {{進捗|00%|2025-12-07}}</span><!-- 2021-09-25 -->
== 付録1 ==
{{Wikipedia|ガリア戦記|ガリア戦記}}
{{Wiktionary|la:Commentarii_de_bello_Gallico|ガリア戦記}}
{{Commons|Category:Gallic_War|ガリア戦争}}
<!--
*[[/あらすじ]]:各巻のあらすじ
-->
*[[/内容目次]]:巻・章・節の内容を記した目次 {{進捗|75%|2011-04-02}}
*[[/参照画像一覧]]:本文で参照した画像一覧 {{進捗|75%|2026-06-14}}
*[[/ガリアの河川]]:本書で言及される河川 {{進捗|00%|2023-01-07}}<!--【2021年11月22日より】-->
*[[/関連年表]]
*[[/対訳語彙集 (羅和)]] - [[/対訳語彙集 (羅英)]]
**[[/人物一覧 (羅和)]]
**[[/部族一覧 (羅和)]]
**[[/地名一覧 (羅和)]] {{進捗|25%|2010-04-07}}
== 付録2 ==
*<span style="background-color:#ffa;">'''[[古代ローマの不定時法]]''' {{進捗|50%|2020-08-24}}</span> <!-- 2016-12-31 -->
*<span style="background-color:#ffb;">[[ガイウス・ユリウス・カエサルの著作/ラテン語の紀年法|/ラテン語の紀年法]] {{進捗|75%|2009-01-12}}</span>
*<span style="background-color:#ffb;">[[ガイウス・ユリウス・カエサルの著作/古代ローマの攻城兵器|/古代ローマの攻城兵器]] {{進捗|00%|2019-08-06}}</span>
*<span style="background-color:#ffffcc;">[[ガイウス・ユリウス・カエサルの著作/古代ローマの軍旗類|/古代ローマの軍旗類]] {{進捗|00%|2022-01-22}}</span><!--【2022年1月22日より】-->
*[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位|/通貨・計量単位]] {{進捗|25%|2020-12-27}}</span>
== 原文出典 ==
{{Wikisource|la:Commentarii de bello Gallico|ガリア戦記}}
{{進捗状況}}
*ラテン語版ウィキソース:[[s:la:Commentarii_de_bello_Gallico|Commentarii de bello Gallico]](ただし、校訂本の出典記載なし! しかも誤植が多いので注意! α系写本の影響が強いと思われる。)
:以下の校訂本を参照しながら、できるだけα系写本の影響を尊重しつつ、原文を修整した。
*トイプナー古典叢書(<small>[[w:la:Bibliotheca_scriptorum_Graecorum_et_Romanorum_Teubneriana|Bibliotheca scriptorum Graecorum et Romanorum Teubneriana]]</small>)
**C. Iulii Caesaris Commentarii Rerum Gestarum, edidit [[w:de:Otto_Seel|Otto Seel]], vol.I. Bellum Gallicum, [[w:la:Lipsia|Lipsiae]], Teubner, 1961.
*:(オットー・ゼール(1907-1975)編。現代の代表的な校訂本。β系写本の影響がやや強い。絶版。)
**C. Iulii Caesaris Commentarii Rerum Gestarum, edidit [[w:de:Wolfgang_Hering|Wolfgang Hering]], vol.I. Bellum Gallicum, Lipsiae, Teubner, 1987.
*: ISBN 978-3-322-00351-5 (ISBN 3-322-00351-5)
*:(ヴォルフガング・ヘーリンク編。最近の校訂本。写本の異同などの情報量、文の完成度はゼール版より劣ると思われる。)
== 参考文献 ==
*ラテン語・英語対訳
**CAESAR: The Gallic War (with an English translation), by H. J. Edwards, [[w:en:Loeb_Classical_Library|Loeb Classical Library]](#72), [[w:en:Harvard_University_Press|Harvard University Press]], ISBN 979-0-674-99080-7
**:(1917年の初版以来、[[w:ローブ・クラシカルライブラリー|ローブ古典叢書]]の一冊として刊行され続けている読み物としての普及版)
*ラテン語・日本語対訳
**『カエサル『ガリア戦記』第I巻』遠山一郎 訳注、大学書林、2009年、ISBN 978-4-475-02446-4
*日本語訳
**『ガリア戦記』 カエサル著、近山金次訳、岩波文庫(岩波書店)、1964年、ISBN 978-4-00-334071-4
**『ガリア戦記』 カエサル著、國原吉之助訳、講談社学術文庫、1994年、ISBN 978-4-06-159127-1
*英語訳
**CAESAR: The Gallic War (A new English translation) by Carolyn Hammond, [[w:en:Oxford World's Classics|Oxford World's Classics(OWC)]], [[w:en:Oxford University Press|Oxford University Press]], First published 1996 ; Reissued 2008、ISBN 978-0-19-954026-6(近年の新訳)
*注釈書
**Gould, H.E. & J.L. Whiteley. C. Iuli Caesaris Commentariorum De Bello Gallico. Liber Quartus. (London: Macmillan & Co Ltd., 1968).;初級者向けの英文注釈がある。
**Caesar: De Bello Gallico V, Edited by R.C.Carrington (再版Bristol Classical Press, 1984), ISBN 0-86292-136-8
etc.
== 関連項目 ==
*<span style="background-color:#ffea;">[[古典ラテン語]] {{進捗|00%|2018-04-18}} </span><!-- 2018-04-18 --> <small>(2018年4月18日から)</small>
*<span style="background-color:#ffe;">[[羅馬史略]] {{進捗|00%|2022-08-18}}</span><!-- 2022-08-18 --> <small>(2022年8月18日から)</small>
== 関連記事 ==
*英語版ウィキソース:[[s:en:Commentaries_on_the_Gallic_War|Commentaries on the Gallic War]](英語訳)
*フランス語版ウィキソース:[[s:fr:La_Guerre_des_Gaules|La Guerre des Gaules]](仏語訳)
:
*ラテン語版ウィクショナリー:[[wikt:la:Commentarii_de_bello_Gallico|wikt:la:Commentarii de bello Gallico]]
== 脚注 ==
<references />
== 外部リンク ==
** [https://scaife.perseus.org/library/ Scaife Viewer | Library]
*** [https://scaife.perseus.org/library/urn:cts:latinLit:phi0448/ Scaife Viewer | Julius Caesar]
**** '''[https://scaife.perseus.org/reader/urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.5/ Scaife Viewer | De Bello Gallico]'''
****: [https://scaife.perseus.org/reader/urn:cts:latinLit:phi0448.phi001.perseus-eng2:1.1/ Scaife Viewer | Gallic War]
=== Latein.me ===
*[https://www.latein.me/ Latein-Wörterbuch - Latein.me] (ラテン語-ドイツ語オンラインリソース)
**[https://www.latein.me/text/3/Caesar Caesar - Übersetzungen] (カエサルの著作)
***[https://www.latein.me/text/3/Caesar/33/De+Bello+Gallico+%28I%29/p/0 De Bello Gallico (I)] (第1巻)
***[https://www.latein.me/text/3/Caesar/34/De+Bello+Gallico+%28II%29/p/0 De Bello Gallico (II)] (第2巻)
***[https://www.latein.me/text/3/Caesar/35/De+Bello+Gallico+%28III%29/p/0 De Bello Gallico (III)] (第3巻)
***[https://www.latein.me/text/3/Caesar/36/De+Bello+Gallico+%28IV%29/p/0 De Bello Gallico (IV)] (第4巻)
***[https://www.latein.me/text/3/Caesar/37/De+Bello+Gallico+%28V%29/p/0 De Bello Gallico (V)] (第5巻)
***[https://www.latein.me/text/3/Caesar/38/De+Bello+Gallico+%28VI%29/p/0 De Bello Gallico (VI)] (第6巻)
***[https://www.latein.me/text/3/Caesar/39/De+Bello+Gallico+%28VII%29/p/0 De Bello Gallico (VII)] (第7巻)
***[https://www.latein.me/text/3/Caesar/40/De+Bello+Gallico+%28VIII%29/p/0 De Bello Gallico (VIII)] (第8巻)
<!--[http://www.forumromanum.org/literature/caesar/gallic.html Commentaries on the Gallic War]("corpus scriptorum latinorum" ラテン文学のデジタルライブラリー;英仏訳と地図付)
[http://www.debellogallico.org/index.cgi/bgtext Commentarii de Bello Gallico](ガリア戦記の日本語対訳サイト)
[http://itunes.apple.com/jp/podcast/classics-texts-caesar-de-bello/id183722640 Classics Texts :: Caesar, De Bello Gallico 2 (Study Speed)](『[[ガリア戦記 第2巻]]』の各節を[[w:ITunes|iTunes]]向けに読み上げた音声ファイルのダウンロードサイト)
-->
[[Category:ガリア戦記|*]]
[[Category:ラテン語|かりあせんき]]
[[Category:古典ラテン文学|かりあせんき]]
[[Category:ガイウス・ユリウス・カエサルの著作|かりあせんき]]
itmancs7ygndxyhp6eayqn6kcdm7zmx
ガリア戦記 第7巻
0
12163
304909
304863
2026-10-20T14:07:18Z
Linguae
449
/* 34節 */ 修整
304909
wikitext
text/x-wiki
[[Category:ガリア戦記|7]] [[Category:ガリア戦記 第7巻|*]]
[[ガリア戦記]]> '''第7巻''' >[[ガリア戦記 第7巻/注解|注解]]
<div style="text-align:center">
<span style="font-size:20px; font-weight:bold; font-variant-caps: petite-caps; color:white; background: rgb(47,94,255);background: linear-gradient(180deg, rgba(47,94,255,1) 0%, rgba(24,56,255,1) 50%, rgba(0,8,255,1) 100%);"> C IVLII CAESARIS COMMENTARIORVM BELLI GALLICI </span>
<span style="font-size:40px; font-weight:bold; color:white; background: rgb(47,94,255);background: linear-gradient(180deg, rgba(47,94,255,1) 0%, rgba(24,56,255,1) 50%, rgba(0,8,255,1) 100%);"> LIBER SEPTIMVS </span>
</div>
[[画像:Gaule -52.png|thumb|right|150px|ガリア戦記 第7巻の情勢図(BC52年)。<br>黄色の領域がローマ領。桃色が同盟部族領。]]
{| id="toc" style="align:left;clear:all;" align="left" cellpadding="5"
! style="background:#ccccff; text-align:left;" colspan="2" | ガリア戦記 第7巻 目次
|-
| style="text-align:right; font-size: 0.86em;"|
'''[[#カルヌーテース族の蜂起|カルヌーテース族の蜂起]]''':<br />
'''[[#ウェルキンゲトリークスとガッリア同盟軍の蜂起|ウェルキンゲトリークスとガッリア同盟軍の蜂起]]''':<br />
<br />
'''[[#アウァーリクム攻略戦|アウァーリクム攻略戦]]''':<br />
<br />
<br />
'''[[#ゲルゴウィア攻略戦、ハエドゥイー族の離反|ゲルゴウィア攻略戦、ハエドゥイー族の離反]]''':<br />
<br />
<br />
'''[[#ラビエーヌスのルテティア遠征|ラビエーヌスのルテティア遠征]]''':<br />
'''[[#ガッリア戦乱の拡大|ガッリア戦乱の拡大]]''':<br />
'''[[#アレスィア攻囲戦|アレスィア攻囲戦]]''':<br />
<br />
<br />
'''[[#ガッリア同盟軍主力の降伏|ガッリア同盟軍主力の降伏]]''':<br />
<br />
<br />
| style="text-align:left; font-size: 0.86em;"|
[[#1節|01節]] |
[[#2節|02節]] |
[[#3節|03節]] <br />
[[#4節|04節]] |
[[#5節|05節]] |
[[#6節|06節]] |
[[#7節|07節]] |
[[#8節|08節]] |
[[#9節|09節]] |
[[#10節|10節]] <br />
[[#11節|11節]] |
[[#12節|12節]] |
[[#13節|13節]] <br />
[[#14節|14節]] |
[[#15節|15節]] |
[[#16節|16節]] |
[[#17節|17節]] |
[[#18節|18節]] |
[[#19節|19節]] |
[[#20節|20節]] <br />
[[#21節|21節]] |
[[#22節|22節]] |
[[#23節|23節]] |
[[#24節|24節]] |
[[#25節|25節]] |
[[#26節|26節]] |
[[#27節|27節]] |
[[#28節|28節]] |
[[#29節|29節]] |
[[#30節|30節]] <br />
[[#31節|31節]] <br />
[[#32節|32節]] |
[[#33節|33節]] |
[[#34節|34節]] |
[[#35節|35節]] |
[[#36節|36節]] |
[[#37節|37節]] |
[[#38節|38節]] |
[[#39節|39節]] |
[[#40節|40節]] <br />
[[#41節|41節]] |
[[#42節|42節]] |
[[#43節|43節]] |
[[#44節|44節]] |
[[#45節|45節]] |
[[#46節|46節]] |
[[#47節|47節]] |
[[#48節|48節]] |
[[#49節|49節]] |
[[#50節|50節]] <br />
[[#51節|51節]] |
[[#52節|52節]] |
[[#53節|53節]] |
[[#54節|54節]] |
[[#55節|55節]] |
[[#56節|56節]] <br />
[[#57節|57節]] |
[[#58節|58節]] |
[[#59節|59節]] |
[[#60節|60節]] |
[[#61節|61節]] |
[[#62節|62節]] <br />
[[#63節|63節]] |
[[#64節|64節]] |
[[#65節|65節]] |
[[#66節|66節]] |
[[#67節|67節]] <br />
[[#68節|68節]] |
[[#69節|69節]] |
[[#70節|70節]] <br />
[[#71節|71節]] |
[[#72節|72節]] |
[[#73節|73節]] |
[[#74節|74節]] |
[[#75節|75節]] |
[[#76節|76節]] |
[[#77節|77節]] |
[[#78節|78節]] |
[[#79節|79節]] |
[[#80節|80節]] <br />
[[#81節|81節]] |
[[#82節|82節]] |
[[#83節|83節]] |
[[#84節|84節]] |
[[#85節|85節]] |
[[#86節|86節]] |
[[#87節|87節]] |
[[#88節|88節]] <br />
[[#89節|89節]] |
[[#90節|90節]] <br />
[[#脚注|脚注]]<br />
[[#参考リンク|参考リンク]]<br />
|}
<br style="clear:both;" />
__notoc__
==カルヌーテース族の蜂起==
===1節===
*<span style="background-color:#ffd;">[[/注解/1節]] {{進捗|00%|2025-10-26}}</span>
[[画像:Maccari-Cicero.jpg|thumb|right|250px|[[w:カティリナ弾劾演説|カティリーナ弾劾演説]]をする[[w:マルクス・トゥッリウス・キケロ|キケロー]](左中央)(チェザレ・マッカリによる19世紀のフレスコ画)。[[w:プブリウス・クロディウス・プルケル|クローディウス]]はこれを越権行為であるとして、カエサルの政敵となっていたキケローを一時的に亡命へ追い込み、ついにはキケローの友人ミローの配下によって殺害された。]]
[[画像:Pompei_Magnus_Antiquarium.jpg|thumb|right|250px|[[w:グナエウス・ポンペイウス|グナエウス・ポンペイウス]]の胸像。クローディウス殺害に伴う騒乱を収拾するべく、[[w:元老院|元老院]]によりポンペイウスが単独の[[w:執政官|執政官]]に選出され、首都ローマと本土イタリアを制圧した。一方、カエサルも属州で新たに徴兵して兵力を増した。元老院派はカエサルの勢力が強大になることを恐れて、カエサル自身から将兵を取り上げて召還すべきと主張したが、ポンペイウスは不和を避けて宥和を図った。]]
:
;首都ローマの政情不安、ガッリア人領袖たちの謀計
*<!--❶--><sup>(1)</sup> [[wikt:en:quietus#Latin|Quieta]] [[wikt:en:Gallia#Latin|Gallia]],
**[[w:ガリア|ガッリア]]が鎮定されると、
*Caesar, ut [[wikt:en:constituerat|constituerat]],
**カエサルは、定めていたように、
*in [[wikt:en:Italia#Latin|Italiam]] ad [[wikt:en:conventus#Noun|conventus]] [[wikt:en:agendus#Latin|agendos]] [[wikt:en:proficiscitur|proficiscitur]].
**イタリアに、巡回裁判を行なうために出発する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ここでいうイタリアとは、カエサルの属州であった<br> [[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]を指す。<br> カエサルは、巡回裁判を除けば、おもに[[w:ラヴェンナ|ラウェンナ]]に<br> 滞在していたと考えられる。[[内乱記_第1巻#5節|『内乱記』第1巻5節]]を参照。)</span>
:
*[[wikt:en:ibi#Latin|Ibi]] [[wikt:en:cognoscit|cognoscit]] de <P.> [[wikt:en:Clodius#Latin|Clodii]] [[wikt:en:caedes#Latin|caede]],
**そこで[[w:プブリウス・クロディウス・プルケル|プーブリウス・クローディウス]]の殺害について知って、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:クローディウスは護民官を務めた<ruby><rb>[[w:ポプラレス|民衆派]]</rb><rp>(</rp><rt>ポプラレス</rt><rp>)</rp></ruby> の政治家で、<br> カエサルから恩義を受けていた。<br> かの弁論家[[w:マルクス・トゥッリウス・キケロ|キケロー]]やその友人ティトゥス・ミロー [[w:la:Titus_Annius_Milo|Milo]] ら<br> <ruby><rb>[[w:オプティマテス|元老院派]]</rb><rp>(</rp><rt>オプティマテス</rt><rp>)</rp></ruby> と激しく対立し、ミローの配下によって殺害された。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:<P.> ([[wikt:en:Publius#Latin|Publii]]) 「プーブリウスの」は ρ系写本にのみ記されている。)</span>
*<de> <u>senatus</u>que <u>consulto</u> [[wikt:en:certior#Latin|certior]] [[wikt:en:factus#Participle|factus]], ut omnes [[wikt:en:iunior#Latin|iuniores]] Italiae [[wikt:en:coniurarent|coniurarent]],
**イタリアの全青年に<small>(新兵として)</small>宣誓するようにとの元老院決議について知らされて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:この事態を収拾すべく元老院派の[[w:グナエウス・ポンペイウス|ポンペイウス]]が単独の執政官<br> (''[[w:de:Consul sine collega|consul sine collega]]'')に選任されて本土イタリアを掌握した。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:<de> は現存する写本にはなく、近世以降に挿入提案されたもの。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注: [[wikt:en:senatus_consultum#Latin|senātūs cōnsultum]] ([[wikt:en:ultimus#Latin|ultimum]]) 「[[w:セナトゥス・コンスルトゥム・ウルティムム|元老院(の最終)決議]]」<br> ; dē [[wikt:en:senatus_consulto#Latin|senātūs cōnsultō]] 「元老院決議について」)</span>
*<u>dilectum</u> [[wikt:en:totus#Latin|tota]] [[wikt:en:provincia#Latin|provincia]] habere [[wikt:en:instituo#Latin|instituit]].
**<small>(カエサルは)</small>属州<small>〔ガッリア・キサルピーナ〕</small>全体での徴集をすることを決定する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:dilectus#Noun|dilectum]] は、[[wikt:en:delectus#Noun_2|delectum]] と表記している校訂版もある。)</span>
:
*<!--❷--><sup>(2)</sup> Eae res in Galliam [[wikt:en:transalpinus#Latin|Transalpinam]] celeriter [[wikt:en:perferuntur|perferuntur]].
**その状況は、[[w:ガリア・ナルボネンシス|ガッリア・トラーンサルピーナ]]<small>〔アルプスの向こう側のガッリア〕</small>に速やかに報知された。
:
*[[wikt:en:addunt|Addunt]] ipsi et [[wikt:en:adfingunt|adfingunt]] [[wikt:en:rumor#Latin|rumoribus]] [[wikt:en:Galli#Latin|Galli]],
**[[w:ガリア人|ガッリア人]]たち自身が風評に想像して付け加えたのは、
*quod res [[wikt:en:poscere|poscere]] [[wikt:en:videbatur|videbatur]]:
**事態が要求すると思われていたことで、
*[[wikt:en:retineri|retineri]] <u>urbano</u> [[wikt:en:motus#Noun_2|motu]] Caesarem
**カエサルは、都<small>〔[[w:ローマ|ローマ市]]〕</small>の騒乱に束縛されて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:urbanus#Adjective|urbānus]] は「都市の」「都会の」と訳されるが、<br> とりわけ「首都[[w:ローマ|ローマ市]]の」を意味する。)</span>
*neque in [[wikt:en:tantus#Latin|tantis]] [[wikt:en:dissensio#Latin|dissensionibus]] ad [[wikt:en:exercitus#Noun|exercitum]] venire posse.
**これほどの対立においては、軍隊のもとへ来ることができない、<br>ということである。
:
*<!--❸--><sup>(3)</sup> Hac [[wikt:en:impulsus#Participle|impulsi]] [[wikt:en:occasio#Latin|occasione]],
**このような好機に刺激されて、
*qui iam ante se [[wikt:en:populus#Noun|populi]] Romani [[wikt:en:imperium#Latin|imperio]] [[wikt:en:subiectus#Latin|subiectos]] [[wikt:en:dolerent|dolerent]],
**すでに以前から自分たちがローマ国民の支配に服属させられているのを悲嘆している者たちは、
*[[wikt:en:libere#Adverb_2|liberius]] atque [[wikt:en:audacter#Latin|audacius]] de bello [[wikt:en:consilium#Latin|consilia]] [[wikt:en:inire|inire]] [[wikt:en:incipiunt|incipiunt]].
**より自由に、かつ、より向こう見ずに、戦争について謀議に取りかかり始める。
:
[[画像:Brennus_mg_9724.jpg|thumb|right|250px|[[w:ブレンヌス|ブレンヌス]]の胸像。BC4世紀([[w:紀元前387年|387年]])に、ローマ軍を破って、ローマ市を占領した。アッコーと同じセノネース族の族長だったとされている。]]
*<!--❹--><sup>(4)</sup> [[wikt:en:indictus#Latin|Indictis]] inter se principes Galliae [[wikt:en:concilium#Latin|conciliis]] [[wikt:en:silvestris#Latin|silvestribus]] ac [[wikt:en:remotus#Latin|remotis]] locis
**ガッリアの領袖たちは、森林や人里離れた場所での会合を互いに申し合わせて、
*[[wikt:en:queruntur|queruntur]] de [[wikt:en:Acco#Latin|Acconis]] [[wikt:en:mors#Latin|morte]];
**アッコーの死について嘆く。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[ガリア戦記 第6巻#44節|第6巻44節]]を参照。)</span>
*<u>posse</u> hunc [[wikt:en:casus#Latin|casum]] ad ipsos [[wikt:en:recidere#Verb_4|recidere]] [[wikt:en:demonstrant#Latin|demonstrant]];
**彼<small>〔アッコー〕</small>の結末が彼ら自身へ降りかかりうることを説く。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:posse#Verb|posse]] の位置は、<br> α系写本では hunc の前だが、<br> β系写本では hunc casum ad ipsos recidere <u>posse</u> demonstrant <br> となっている。)</span>
:
*<!--❺--><sup>(5)</sup> [[wikt:en:miserantur|miserantur]] [[wikt:en:communis#Latin|communem]] Galliae [[wikt:en:fortuna#Latin|fortunam]];
**ガッリア共通の境遇をあわれむ。
*omnibus [[wikt:en:pollicitatio#Latin|pollicitationibus]] ac [[wikt:en:praemium#Latin|praemiis]] [[wikt:en:deposcunt|deposcunt]]
**<small>(以下の者たちを)</small>あらゆる約束と恩賞によって求める。
*qui [[wikt:en:bellum#Latin|belli]] <u>initia</u> [[wikt:en:faciant|faciant]] et sui [[wikt:en:caput#Latin|capitis]] [[wikt:en:periculum#Latin|periculo]] Galliam in [[wikt:en:libertas#Latin|libertatem]] [[wikt:en:vindicent|vindicent]].
**戦端を開いて、自らを危険にさらしても、ガッリアを解放する者たちを。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:~ in libertatem vindicare;~を解放する)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:initia#Latin|initia]] (複数形) だが、<br> β系写本では [[wikt:en:initium#Latin|initium]] (単数形) となっている。)</span>
:
*<!--❻--><sup>(6)</sup> In primis [[wikt:en:ratio#Latin|rationem]] esse [[wikt:en:habendus#Latin|habendam]] [[wikt:en:dicunt|dicunt]],
**とりわけ、<small>(以下のような)</small>方策を採るべきであると述べる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:in_primis#Latin|in primis]] は、[[wikt:en:inprimis#Adverb|
inprimis]] と表記している校訂版もある。)</span>
*[[wikt:en:priusquam#Latin|prius quam]] eorum [[wikt:en:clandestinus#Latin|clandestina]] consilia [[wikt:en:efferantur|efferantur]],
**彼らの秘密の計画が漏らされるより前に、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:反ローマの挙兵のはかりごとが漏れる前に)</span>
*ut Caesar ab [[wikt:en:exercitus#Noun|exercitu]] [[wikt:en:intercludatur|intercludatur]].
**カエサルが軍隊から切り離されるように、と。
:
*<!--❼--><sup>(7)</sup> Id esse [[wikt:en:facilis#Latin|facile]],
**それは容易なことである。
*quod neque legiones [[wikt:en:audeant|audeant]] [[wikt:en:absens#Latin|absente]] [[wikt:en:imperator#Latin|imperatore]] ex [[wikt:en:hiberna#Noun|hibernis]] [[wikt:en:egredi|egredi]],
**というのは、[[w:ローマ軍団|諸軍団]]は将軍<small>〔カエサル〕</small>が不在のときにあえて冬営から出て行こうとはしないし、
*neque [[wikt:en:imperator#Latin|imperator]] sine [[wikt:en:praesidium#Latin|praesidio]] ad legiones [[wikt:en:pervenire#Latin|pervenire]] [[wikt:en:possit|possit]].
**将軍は護衛なしに諸軍団のところへ到着することはできないのだから。
: <!-- [[wikt:en:| -->
*<!--❽--><sup>(8)</sup> [[wikt:en:postremo#Adverb|Postremo]] in [[wikt:en:acies#Latin|acie]] <u>praestare</u> [[wikt:en:interfici|interfici]],
**結局のところ、戦列において討ち死にする方がましである。
**:<span style="color:#009900;">(訳注:[[wikt:en:praestare|praestare]] ~ [[wikt:en:quam#Adverb|quam]] …「…よりも~がより優る」)</span>
*<u>quam</u> non [[wikt:en:vetus#Latin|veterem]] belli [[wikt:en:gloria#Latin|gloriam]] [[wikt:en:libertas#Latin|libertatem]]<nowiki>que</nowiki> quam a [[wikt:en:maior#Noun|maioribus]] [[wikt:en:acceperint|acceperint]], [[wikt:en:recuperare#Latin|recuperare]].
**先祖から受け継いだかつての戦争の栄誉および自由を取り戻さないことよりは。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===2節===
[[画像:Chartres_1.jpg|thumb|right|320px|カルヌーテース族([[w:la:Carnutes|Carnutes]])の名を残す現在の[[w:シャルトル|シャルトル]]([[w:en:Chartres|Chartres]])の象徴である[[w:シャルトル大聖堂|シャルトル大聖堂]]([[w:世界遺産|世界遺産]])。[[ガリア戦記 第6巻#13節|第6巻13節]]⑩項で既述のように、カルヌーテース族の土地はガッリアの中心・聖地と見なされていた。ガッリアがキリスト教化されると、[[w:司教|司教座]]が置かれて、宗教的中心地となった。]]
*<span style="background-color:#ffd;">[[/注解/2節]] {{進捗|00%|2025-11-05}}</span>
;ガッリア諸部族の会合で、カルヌーテース族が開戦動議
:
*<!--❶--><sup>(1)</sup> His rebus [[wikt:en:agitatus#Latin|agitatis]],
**これらの事柄が論議されて、
*[[wikt:en:profiteor#Latin|profitentur]] [[wikt:en:Carnutes#Latin|Carnutes]],
**カルヌーテース族の者が公言したことには、
*se [[wikt:en:nullus#Determiner|nullum]] [[wikt:en:periculum#Latin|periculum]] [[wikt:en:communis#Latin|communis]] [[wikt:en:salus#Latin|salutis]] causa [[wikt:en:recusare#Latin|recusare]],
**<small>(ガッリア)</small>共通の安全のためにはいかなる危険をも辞さない、
*[[wikt:en:princeps#Latin|principes]]<nowiki>que</nowiki> ex omnibus bellum [[wikt:en:facturus#Latin|facturos]] [[wikt:en:pollicentur|pollicentur]];
**かつ<small>(ガッリア方)</small>総勢の先鋒として戦争を遂行するであろうと約束する。
:
*<!--❷--><sup>(2)</sup> et, [[wikt:en:quoniam#Latin|quoniam]] in [[wikt:en:praesentia#Noun|praesentia]] [[wikt:en:obses#Latin|obsidibus]] [[wikt:en:cavere#Verb_2|cavere]] inter se non [[wikt:en:possint|possint]],
**目下のところ、人質により互いに保証し合うことはできなかったので、
*ne res [[wikt:en:efferatur|efferatur]],
**事が漏らされないように、
*<u>ut</u> [[wikt:en:ius_iurandum#Latin|iure iurando]] ac [[wikt:en:fides#Latin|fide]] [[wikt:en:sanciatur|sanciatur]], [[wikt:en:petunt|petunt]],
**誓約と信義でもって批准するように求める。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、写本ST<sup>c</sup> では ut だが、<br> 写本 T<sup>1</sup>・ρ系では at 、<br> 写本BMLNV・χ系では aut となっている。)</span>
*[[wikt:en:conlatus#Latin|conlatis]] [[wikt:en:militaris#Adjective|militaribus]] [[wikt:en:signum#Latin|signis]],
**軍旗が運び集められて、
*[[wikt:en:quo#Etymology_2_2|quo]] [[wikt:en:mos#Latin|more]] eorum [[wikt:en:gravissimus#Latin|gravissima]] [[wikt:en:caerimonia#Latin|caerimonia]] [[wikt:en:continetur|continetur]],
**それは彼らの慣習で最も荘重な<ruby><rb>神聖儀式</rb><rp>(</rp><rt>カエリモーニア</rt><rp>)</rp></ruby>として保たれているのだが、
*ne [[wikt:en:factus#Latin|facto]] [[wikt:en:initium#Latin|initio]] belli ab reliquis [[wikt:en:deserantur|deserantur]].
**開戦したら、ほかの<small>(部族の)</small>者たちから見放されないように、ということである。
: <!-- [[wikt:en:| -->
*<!--❸--><sup>(3)</sup> Tum [[wikt:en:conlaudatus#Latin|conlaudatis]] [[wikt:en:Carnutes#Latin|Carnutibus]],
**それから、カルヌーテース族が賞賛されて、
*[[wikt:en:datus#Participle|dato]] [[wikt:en:ius_iurandum#Latin|iure iurando]] ab omnibus, qui [[wikt:en:aderant|aderant]],
**訪れていたすべての者たちによって誓約が交わされて、
*[[wikt:en:tempus#Latin|tempore]] eius rei [[wikt:en:constitutus#Participle|constituto]]
**その事の時期を決定すると、
*ab [[wikt:en:concilium#Latin|concilio]] [[wikt:en:disceditur|disceditur]].
**<small>(ガッリアの領袖たちは)</small>会合から立ち去る。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===3節===
[[画像:Cathédrale_Sainte-Croix_d'Orléans_2008_PD_16.JPG|thumb|right|280px|ケナブム(Cenabum)すなわち現在の[[w:オルレアン|オルレアン]]の聖十字架大聖堂。ここもカルヌーテース族の[[w:オッピドゥム|城塞都市]]で、ガッリアの[[w:ドルイド|ドルイド]]たちが集まる聖地だったという。ローマの[[w:ルキウス・ドミティウス・アウレリアヌス|アウレリアヌス帝]](Aurelianus)によって再建されたのでアウレリアヌスの都市(アウレリアヌム [[w:la:Aurelianum|Aurelianum]])と改称され、オルレアン(Orléans)と転訛した。キリスト教化によってここにも[[w:司教|司教座]]が置かれて、布教の中心地になった。]]
*<span style="background-color:#ffd;">[[/注解/3節]] {{進捗|00%|2025-11-17}}</span>
;カルヌーテース族がケナブム進駐
:
*<!--❶--><sup>(1)</sup> [[wikt:en:ubi#Latin|Ubi]] ea dies venit,
**その日が来ると、
*[[wikt:en:Carnutes#Latin|Carnutes]],
**カルヌーテース族は、
*Cotuato et Conconnetodumno [[wikt:en:dux#Latin|ducibus]], [[wikt:en:desperatus#Latin|desperatis]] hominibus,
**捨て身覚悟の連中であるコトゥアトゥスとコンコンネトドゥムヌスを指導者として、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ガリア語では、<br> コトゥアトス ''[[w:fr:Cotuatos|Cotuatos]]''、<br> コンコンネトドゥムノス ''[[w:fr:Conconnetodumnos|Conconnetodumnos]]''。)</span>
*<u>Cenabum</u> [[wikt:en:signum#Latin|signo]] [[wikt:en:datus#Participle|dato]] [[wikt:en:concurrunt|concurrunt]]
**号令が発せられるとともに<u>ケナブム</u>に襲来する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ケナブムは、現在の[[w:オルレアン|オルレアン]]。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:fr:Cenabum|Cenabum]] はケルト語風の読みで、''[[ガリア戦記/注解編/写本と校訂版#Vossius|Vossius]]'' による修正提案。<br> 写本では genabim, genebim, genebin などとなっている。<br> ⇒ [[wikt:en:Genabum#Latin|Genabum]])</span>
*[[wikt:en:civis#Latin|cives]]<nowiki>que</nowiki> [[wikt:en:Romanus#Adjective|Romanos]], qui [[wikt:en:negotiandi|negotiandi]] causa [[wikt:en:ibi#Latin|ibi]] [[wikt:en:constiterant|constiterant]],
**そこには、商いを営むためにローマ市民たちが滞在していて、
*in his [[wikt:en:Gaius#Latin|Gaium]] [[wikt:en:Fufius#Latin|Fufium]] Citam, [[wikt:en:honestus#Latin|honestum]] [[wikt:en:eques#Latin|equitem]] [[wikt:en:Romanus#Adjective|Romanum]],
**彼らの中には、気高いローマ人[[w:エクィテス|騎士]]ガーイウス・フーフィウス・キタがいて
*qui rei [[wikt:en:frumentarius#Latin|frumentariae]] [[wikt:en:iussus#Noun|iussu]] Caesaris [[wikt:en:praeerat|praeerat]],
**カエサルの指図により糧秣調達を統率していたが、
*[[wikt:en:interficiunt|interficiunt]] [[wikt:en:bonum#Noun_2|bona]]<nowiki>que</nowiki> eorum [[wikt:en:diripiunt|diripiunt]].
**<small>(カルヌーテース勢は彼らローマ市民たちを)</small>殺害して、彼らの財産を略奪する。
:
*<!--❷--><sup>(2)</sup> Celeriter ad omnes Galliae [[wikt:en:civitas#Latin|civitates]] [[wikt:en:fama#Latin|fama]] [[wikt:en:perfertur|perfertur]].
**速やかに全ガッリア部族のもとへ、評判が報知される。
*Nam, <u>ubique</u> [[wikt:en:maior#Latin|maior]] atque [[wikt:en:inlustrior|inlustrior]] [[wikt:en:incidit#Etymology_1|incidit]] res,
**なぜなら、より重大でより目立った事態が起こればどこであろうが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、主要写本ω の大半では [[wikt:en:ubique#Latin|ubique]] だが、写本STでは [[wikt:en:ubi#Latin|ubi]] 、<br> さらに [[wikt:en:ubicumque#Latin|ubicumque]] という異読もあり、<br> ''[[ガリア戦記/注解編/写本と校訂版#Schneider,K.E.Chr.|Chr. Schneider]]'' は ubi quae と修正提案している。)</span>
*[[wikt:en:clamor#Latin|clamore]] per [[wikt:en:ager#Latin|agros]] [[wikt:en:regio#Latin|regiones]]<nowiki>que</nowiki> [[wikt:en:significant#Latin|significant]];
**耕地や<small>(集落の)</small>区域を介して、大声で呼びかける。
*<u>hinc</u> [[wikt:en:alius#Latin|alii]] [[wikt:en:deinceps#Latin|deinceps]] [[wikt:en:excipiunt|excipiunt]]
**ここから、別の者たちが続けて引き受けて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本の大半では [[wikt:en:hanc#Latin|hanc]] だが、<br> β系写本では [[wikt:en:hinc#Latin|hinc]] 「ここから」、<br> 写本Sでは [[wikt:en:hunc|hunc]] となっている。)</span>
*et [[wikt:en:proximus#Noun|proximis]] [[wikt:en:tradunt|tradunt]];
**近隣の者たちへ伝える。
*ut tum [[wikt:en:accidit#Etymology_1|accidit]].
**そのときにも<small>(同様のことが)</small>起こったのである。
: <!-- [[wikt:en:| -->
*<!--❸--><sup>(3)</sup> Nam, quae <u>Cenabi</u> [[wikt:en:oriens#Latin|oriente]] [[wikt:en:sol#Latin|sole]] gesta essent,
**ケナブムで日が昇るときになされていたこと<small>〔襲撃〕</small>が、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:Cenabi はケルト語風の読みで、''[[ガリア戦記/注解編/写本と校訂版#Vossius|Vossius]]'' による修正提案。<br> 主要写本ω では genabi となっている。 ⇒ [[wikt:en:Genabum#Latin|Genabum]])</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:gestus#Latin|gesta]] [[wikt:en:essent#Etymology_1|essent]] は [[wikt:en:gero#Latin|gerō]] の3人称・複数・過去完了・受動・接続法。)</span>
*ante [[wikt:en:primus#Latin|primam]] [[wikt:en:confectus#Latin|confectam]] [[wikt:en:vigilia#Latin|vigiliam]]
**第一夜警時の終わる前頃には
**:<span style="color:#009900;">(訳注:第一夜警時は、日の入から真夜中までの時間帯の前半「宵の口」。<br> [[古代ローマの不定時法#夜警時|#夜警時]] を参照。)</span>
*in finibus [[wikt:en:Arverni#Latin|Arvernorum]] audita sunt,
**アルウェルニー族の領土において聞かれた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:auditus#Latin|audita]] [[wikt:en:sunt#Latin|sunt]] は [[wikt:en:audio#Latin|audiō]] の3人称・複数・完了・受動・直説法)</span>
*[[wikt:en:qui#Latin|quod]] [[wikt:en:spatium#Latin|spatium]] est [[wikt:en:mille#Latin|milium]] [[wikt:en:passus#Etymology_2|passuum]] circiter [[wikt:en:centum#Latin|centum]] [[wikt:en:sexaginta#Latin|sexaginta]](CLX).
**約160ローママイルもの隔たりがあったのに。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ミーッレ・パッスーム、ミーリア(ローママイル)|ローママイル]]は約1.48 kmで、160マイルは約240 km)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
==ウェルキンゲトリークスとガッリア同盟軍の蜂起==
===4節===
[[画像:Vercingetorix stater CdM.jpg|thumb|right|200px|“<span style="font-family:Times New Roman;font-size:15pt;">(VERCIN)GETORIXS</span>”の名と横顔が刻まれた金貨。]]
[[画像:Vercingétorix_par_Millet.jpg|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の立像(フランスのアリーズ=サント=レーヌ <small>[[w:fr:Alise-Sainte-Reine|Alise-Sainte-Reine]]</small>)。<br>近代[[w:ナショナリズム|ナショナリズム]]の高揚とともに[[w:フランス|フランス]]国民が自らを古代[[w:ガリア人|ガッリア人]]の末裔と見なすようになると([[w:ガリア起源説|ガッリア起源説]])、ガッリア諸部族を率いて[[w:古代ローマ|古代ローマ]]と戦った彼は「'''フランス最初の英雄'''」として祀り上げられた。[[w:フランス第二帝政|第二帝政]]期に皇帝[[w:ナポレオン3世|ナポレオン3世]]の命により[[w:アレシアの戦い|アレスィア古戦場]]の発掘調査が実施され、[[w:1865年|1865年]]にはその地に彫刻家エメ・ミレ([[w:fr:Aimé Millet|Aimé Millet]])による高さ7メートルの銅像が建立された。<br>([[w:fr:Vercingétorix_(statue_d'Aimé_Millet)|fr:La statue de Vercingétorix]])]]
[[画像:Statue-vercingetorix-jaude-clermont.jpg|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の騎馬像([[w:fr:Statue équestre de Vercingétorix (Frédéric Auguste Bartholdi)|fr]])。彼の出身地ゲルゴウィアの近く、[[w:クレルモン=フェラン|クレルモン=フェラン市]]中央広場に建つ。[[w:1903年|1903年]]に、[[w:自由の女神像 (ニューヨーク)|自由の女神像]]の作者として著名な彫刻家[[w:フレデリク・バルトルディ|フレデリク・オーギュスト・バルトルディ]]によって建立された。[[w:フランス語|フランス語]]で「我は皆の自由のために武器を取った」« J’ai pris les armes pour la liberté de tous » と刻まれている。]]
*<span style="background-color:#ffd;">[[/注解/4節]] {{進捗|00%|2025-11-24}}</span>
;アルウェルニー族のウェルキンゲトリークスが挙兵、ガッリア諸部族同盟軍を指揮する
:
*<!--❶--><sup>(1)</sup> [[wikt:en:similis#Latin|Simili]] [[wikt:en:ratio#Latin|ratione]] ibi
**そこ<small>〔アルウェルニー族領〕</small>でも同様のやり方によって、
*[[wikt:en:Vercingetorix#Latin|Vercingetorix]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]という、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ガリア語 [[wikt:en:Reconstruction:Gaulish/Werkingetorix|*Werkingetorīx]] は「戦士たちの最高の王」という意味で、<br> ガッリア同盟軍の最高司令官にふさわしい呼び名である。<br> 《[[ガリア戦記/ガリア語の名前#Vercingetorix|'''ガリア語の名前'''#Vercingetorix]]》 を参照せよ。)</span>
*[[wikt:fr:Celtillus|Celtilli]] filius, [[wikt:en:Arvernus#Latin|Arvernus]],
**ケルティッルスの息子で[[w:アルウェルニ族|アルウェルニー族]]の者で、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''[[w:en:Celtillus|Celtillus]]'' はガリア語で「小さなケルト人」という意味だと解される。)</span>
*[[wikt:en:summus#Adjective|summae]] [[wikt:en:potentia#Latin|potentiae]] [[wikt:en:adulescens#Noun|adulescens]],
**最高の影響力のある青年が、
*cuius [[wikt:en:pater#Latin|pater]] [[wikt:en:principatus#Latin|principatum]] Galliae [[wikt:en:totus#Etymology_1|totius]] [[wikt:en:obtinuerat|obtinuerat]]
**──その父<small>〔ケルティッルス〕</small>はガッリア全体の主導権を占めていたが、
*et ob eam causam, quod [[wikt:en:regnum#Latin|regnum]] [[wikt:en:adpetebat|adpetebat]], ab [[wikt:en:civitas#Latin|civitate]] erat [[wikt:en:interfectus#Latin|interfectus]],
**王位を求めたという理由により、部族の者によって誅殺されていたのであるが、──
*[[wikt:en:convocatus#Latin|convocatis]] suis [[wikt:en:cliens#Latin|clientibus]]
**自らの庇護者たちを招集して、
*facile [[wikt:en:incendit|incendit]].
**容易に焚き付けた。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:cognitus#Participle|Cognito]] eius [[wikt:en:consilium#Latin|consilio]]
**彼の計画を知ると、
*ad [[wikt:en:arma#Latin|arma]] [[wikt:en:concurritur|concurritur]].
**<small>(人々は)</small>武器のもとへ群がり集まった。
*[[wikt:en:prohibetur|Prohibetur]] ab [[wikt:fr:Gobannitio|Gobannitione]], [[wikt:en:patruus#Latin|patruo]] suo, [[wikt:en:reliquus#Latin|reliquis]]<nowiki>que</nowiki> [[wikt:en:princeps#Noun_3|principibus]],
**彼の<small>(父方の)</small>おじゴバンニティオやほかの領袖たちにより妨げられた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''[[w:fr:Gobannitio|Gobannitio]]'' は「鍛冶屋」か「鍛冶の神」に由来する名前と解される。)</span>
*qui hanc [[wikt:en:temptandus#Latin|temptandam]] [[wikt:en:fortuna#Latin|fortunam]] non [[wikt:en:existimabant|existimabant]];
**その者たちは、このような運命を試すべきとは考えていなかったのだ。
*[[wikt:en:expellitur|expellitur]] ex [[wikt:en:oppidum#Latin|oppido]] [[wikt:en:Gergovia#Latin|Gergovia]];
**<small>(ウェルキンゲトリークスは)</small>城塞都市ゲルゴウィアから追放される。
:
*<!--❸--><sup>(3)</sup> non [[wikt:en:destitit|destitit]] tamen
**しかしながら<small>(彼は計画を)</small>取り止めず、
*atque in agris habet [[wikt:en:dilectus#Noun|dilectum]] [[wikt:en:egens#Latin|egentium]] ac [[wikt:en:perditor#Noun|perditorum]].
**野に貧窮者たちやならず者たちを徴集する。
:
*Hac [[wikt:en:coactus#Latin|coacta]] [[wikt:en:manus#Latin|manu]],
**こうした手勢が集められ、
*[[wikt:en:quoscumque|quoscumque]] [[wikt:en:adit#Latin|adit]] ex civitate,
**部族のうちで<small>(彼が)</small>会った者は誰であれ、
*ad suam [[wikt:en:sententia#Latin|sententiam]] [[wikt:en:perducit|perducit]];
**自らの意図に引き込んだ。
:
*<!--❹--><sup>(4)</sup> [[wikt:en:hortatur|hortatur]] ut [[wikt:en:communis#Latin|communis]] [[wikt:en:libertas#Latin|libertatis]] causa [[wikt:en:arma#Latin|arma]] [[wikt:en:capiant|capiant]],
**<small>(ガッリア)</small>共通の自由のために武器を取るように鼓舞した。
*[[wikt:en:magnus#Latin|magnis]]<nowiki>que</nowiki> [[wikt:en:coactus#Latin|coactis]] [[wikt:en:copia#Latin|copiis]]
**大軍勢が集められて、
*[[wikt:en:adversarius#Latin|adversarios]] suos, a quibus paulo ante erat [[wikt:en:eiectus#Latin|eiectus]],
**少し前に<small>(彼をゲルゴウィアから)</small>放逐したところの敵対者たちを、
*[[wikt:en:expellit|expellit]] ex civitate.
**部族から追放する。
*[[wikt:en:rex#Latin|Rex]] ab suis [[wikt:en:appellatur|appellatur]].
**<small>(ウェルキンゲトリークスは)</small>配下の者たちから王と呼ばれている。
:
*<!--❺--><sup>(5)</sup> [[wikt:en:dimittit|Dimittit]] [[wikt:en:quoque#Latin|quoque]] [[wikt:en:versus#Adverb|versus]] [[wikt:en:legatio#Latin|legationes]];
**<small>(ウェルキンゲトリークスは)</small>あらゆる方向へ使節団を派遣して、
*[[wikt:en:obtestatur|obtestatur]] ut in [[wikt:en:fides#Latin|fide]] [[wikt:en:maneant|maneant]].
**誓約に留まるようにと、懇願する。
:
*<!--❻--><sup>(6)</sup> Celeriter sibi
**速やかに、自分たち<small>〔アルウェルニー族〕</small>に対して
*[[wikt:en:Senones#Latin|Senones]], [[wikt:en:Parisii#Latin|Parisios]], [[wikt:en:Pictones#Latin|Pictones]], [[wikt:en:Cadurci#Latin|Cadurcos]], <u>Turonos</u>, [[wikt:en:Aulerci#Latin|Aulercos]], [[wikt:en:Lemovices#Latin|Lemovices]], <u>Andes</u>
**セノネース族、パリースィイー族、ピクトネース族、カドゥルキー族、<br><u>トゥロニイー族</u>、アウレルキー族、レモウィーケース族、アンデース族、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部のトゥロニイー族 ''[[w:Turoni|Turoni]]'' は、トゥロネース族 ''[[wikt:en:Turones#Latin|Turonēs]]'' ともいう。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:二つ目の下線部は、α系写本では [[wikt:en:Andi#Latin|Andos]]「アンディー族」だが、<br> ''[[ガリア戦記/注解編/写本と校訂版#Glareanus|Glareanus]]'' は、[[wikt:en:Andes#Latin|Andēs]]「アンデース族」と修正提案し、<br> これは別名「アンデカーウィー族」''[[wikt:en:Andecavi#Latin|Andecāvī]]'' ともいう。)</span>
*reliquosque omnes, qui [[wikt:en:Oceanus#Latin|Oceanum]] [[wikt:en:adtingunt|adtingunt]], [[wikt:en:adiungit|adiungit]];
**および<ruby><rb>大洋<span style="color:#009900;">〔[[w:大西洋|大西洋]]〕</span></rb><rp>(</rp><rt>オーケアヌス</rt><rp>)</rp></ruby>に接するほかの全部族を、加盟させる。
*omnium [[wikt:en:consensus#Latin|consensu]]
**すべての者たちの同意により、
*ad eum [[wikt:en:defertur|defertur]] [[wikt:en:imperium#Latin|imperium]].
**彼<small>〔ウェルキンゲトリークス〕</small>に<small>(諸部族の)</small>軍勢指揮権が譲り渡される。
:
*<!--❼--><sup>(7)</sup> Qua [[wikt:en:oblatus#Latin|oblata]] [[wikt:en:potestas#Latin|potestate]]
**<small>(ウェルキンゲトリークスは)</small>その権限が任されると、
*omnibus his civitatibus [[wikt:en:obses#Latin|obsides]] [[wikt:en:imperat|imperat]],
**これらすべての部族に人質<small>(の供出)</small>を命令して、
*[[wikt:en:certus#Latin|certum]] numerum [[wikt:en:miles#Latin|militum]] ad se celeriter [[wikt:en:adduci#Latin|adduci]] [[wikt:en:iubet#Latin|iubet]],
**兵の一定の数が自分のもとへ速やかに動員されることを命じる。
:
*<!--❽--><sup>(8)</sup> [[wikt:en:arma#Latin|armorum]] [[wikt:en:quantum#Latin|quantum]] [[wikt:en:quisque#Latin|quaeque]] civitas [[wikt:en:domi#Latin|domi]] [[wikt:en:quisque#Latin|quodque]] ante tempus [[wikt:en:efficiat|efficiat]], [[wikt:en:constituit#Latin|constituit]];
**おのおのの部族が本国で、武器のどれほどをその時期の前に生産するかを、決定した。
*in primis [[wikt:en:equitatus#Latin|equitatui]] [[wikt:en:studet|studet]].
**とりわけ、[[w:騎兵|騎兵隊]]を熱心に求めた。
: <!-- [[wikt:en:| -->
*<!--❾--><sup>(9)</sup> Summae diligentiae summam [[wikt:en:imperium#Latin|imperii]] [[wikt:en:severitas#Latin|severitatem]] addit;
**<small></small>(ウェルキンゲトリークスは)最高の入念さに、命令の最高の厳格さを付け加える。
*magnitudine [[wikt:en:supplicium#Latin|supplicii]] [[wikt:en:dubitans#Latin|dubitantes]] cogit.
**重大な刑罰をふんぎりが付かぬ者たちへ強いる。
: <!-- [[wikt:en:| -->
*<!--❿--><sup>(10)</sup> Nam maiore commisso delicto <u>igni</u> atque omnibus tormentis necat,
**すなわち、より重大な違反を犯したら、火とあらゆる拷問によって誅殺した。
*leviore de causa auribus desectis aut singulis effossis oculis domum remittit,
**より軽微な場合については、両耳を切り取り、あるいは眼を一つずつ繰り抜いて、郷里へ送還する。
*ut sint reliquis documento et magnitudine poenae perterreant alios.
**ほかの者たちへの警告となり、懲罰の重大さが別の者たちを畏怖させるようにである。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===5節===
*<span style="background-color:#ffd;">[[/注解/5節]] {{進捗|00%|2025-12-14}}</span>
;ビトゥリゲース族が、ガッリア同盟軍に寝返る
:
*<!--❶--><sup>(1)</sup> His [[wikt:en:supplicium#Latin|suppliciis]] celeriter [[wikt:en:coactus#Latin|coacto]] [[wikt:en:exercitus#Noun|exercitu]],
**<small>(ウェルキンゲトリークスは)</small>これらの刑罰により速やかに軍隊を徴集して、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:「軍隊」と訳される [[wikt:en:exercitus#Noun|exercitus]] には「鍛えられて規律がある」という意味合いがあり、<br> これまでカエサルがガッリア人の軍勢をこのように表現したことはまれであった。)</span>
*[[wikt:en:Lucterius#Latin|Lucterium]] [[wikt:en:Cadurcus#Latin|Cadurcum]], [[wikt:en:summus#Latin|summae]] hominem [[wikt:en:audacia#Latin|audaciae]],
**この上なく豪胆な人物であるカドゥルキー族のルクテリウスを
*cum parte [[wikt:en:copiarum#Noun_2|copiarum]] in [[wikt:en:Ruteni#Latin|Rutenos]] [[wikt:en:mittit|mittit]];
**軍勢の一部とともにルテーニー族のところに遣わす。
*ipse in [[wikt:en:Bituriges#Latin|Bituriges]] [[wikt:en:proficiscitur|proficiscitur]].
**<small>(ウェルキンゲトリークス)</small>自身はビトゥリゲース族のところに出発する。
:
; ビトゥリゲース族が、ハエドゥイー族に、対ウェルキンゲトリークスのための援兵を依頼
*<!--❷--><sup>(2)</sup> Eius [[wikt:en:adventus#Latin|adventu]]
**彼<small>〔ウェルキンゲトリークス〕</small>の到来により、
*[[wikt:en:Bituriges#Latin|Bituriges]] ad [[wikt:en:Aeduos|Haeduos]], quorum erant in [[wikt:en:fides#Latin|fide]],
**ビトゥリゲース族は、彼らが庇護下にあった[[w:ハエドゥイ族|ハエドゥイー族]]のもとへ、
*[[wikt:en:legatus#Latin|legatos]] [[wikt:en:mittunt|mittunt]] [[wikt:en:subsidium#Latin|subsidium]] [[wikt:en:rogatum#Verb|rogatum]],
**使節たちを、<small>(ハエドゥイー族からの)</small>援兵を依頼するために派遣する。
*[[wikt:en:quo#Adverb|quo]] [[wikt:en:facile#Latin|facilius]] hostium copias [[wikt:en:sustinere|sustinere]] [[wikt:en:possint|possint]].
**それにより、敵の軍勢をより容易に持ちこたえることができるようにということであった。
:
; ハエドゥイー族が、ビトゥリゲース族に対して援兵を派兵
*<!--❸--><sup>(3)</sup> [[wikt:en:Aedui#Latin|Haedui]] de [[wikt:en:consilium#Latin|consilio]] [[wikt:en:legatus#Latin|legatorum]], quos Caesar ad [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:reliquerat|reliquerat]],
**[[w:ハエドゥイ族|ハエドゥイー族]]は、カエサルが軍隊のもとへ残していた<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レーガートゥス</rt><rp>)</rp></ruby>たちの助言により、
*copias [[wikt:en:equitatus#Noun|equitatus]] [[wikt:en:peditatus#Latin|peditatus]]<nowiki>que</nowiki> [[wikt:en:subsidium#Latin|subsidio]] [[wikt:en:Bituriges#Latin|Biturigibus]] [[wikt:en:mittunt|mittunt]].
**[[w:騎兵|騎兵隊]]と[[w:歩兵|歩兵隊]]の軍勢をビトゥリゲース族に対する援兵として派遣する。
:
; ハエドゥイー族の援兵が、ビトゥリゲース族の寝返りを怖れて、途中で逃げ帰ってしまう
*<!--❹--><sup>(4)</sup> Qui cum ad flumen [[wikt:en:Liger#Latin|Ligerim]] [[wikt:en:venissent|venissent]], quod [[wikt:en:Bituriges#Latin|Bituriges]] ab [[wikt:en:Aeduis|Haeduis]] [[wikt:en:dividit#Latin|dividit]],
**その者たち<small>〔援兵〕</small>は、ビトゥリゲース族を[[w:ハエドゥイ族|ハエドゥイー族]]から分け隔てるリゲル川のたもとへやって来たときに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:リゲル川 [[w:la:Liger|Liger]] は、現在の[[w:ロワール川|ロワール川]]。<br> 本書に登場するビトゥリゲース・クビ族 ''[[w:en:Bituriges Cubi|Bituriges Cubi]]'' は、<br> ロワール川西岸の[[w:シェール県|シェール県]]の辺りに居住していた。<br> 対して、[[w:ハエドゥイ族|ハエドゥイー族]]は、<br> ロワール川東岸の[[w:ニエーヴル県|ニエーヴル県]]の辺りに居住していた。)</span>
[[画像:Map of Eduens people-fr.svg|thumb|right|250px|[[w:ハエドゥイ族|ハエドゥイー族]]を軸とするガッリアの合従連衡(<small>フランス語表記</small>)。赤い部分がハエドゥイー族(Eduens)、桃色・茶色の部分が同盟部族、灰色の部分が敵対する[[w:アルウェルニ族|アルウェルニー族]](Arvernes)とセクアニ族(Sequanes)の領域である。茶色のビトゥリゲース族(Bituriges)と赤いハエドゥイー族(Eduens)の境界に沿ってリゲル川([[w:ロワール川|ロワール川]])が流れていることが見て取れる。川の西岸はビトゥリゲース族とアルウェルニー族の勢力圏になっている。]]
*paucos dies ibi [[wikt:en:moratus#Participle|morati]]
**わずかな日々をそこでぐずぐずして、
*neque flumen [[wikt:en:transire#Latin|transire]] [[wikt:en:ausus#Participle|ausi]] [[wikt:en:domus#Latin|domum]] [[wikt:en:revertuntur|revertuntur]]
**川をあえて渡らずに、故国に引き返す。
:
*<!--❺--><sup>(5)</sup> [[wikt:en:legatus#Latin|legatis]]<nowiki>que</nowiki> nostris [[wikt:en:renuntiant|renuntiant]]
**<small>(ハエドゥイー族の援兵たちが)</small>我が方<small>〔ローマ方〕</small>の<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レーガートゥス</rt><rp>)</rp></ruby>たちに報告したことには、
*se [[wikt:en:Bituriges#Latin|Biturigum]] [[wikt:en:perfidia#Latin|perfidiam]] [[wikt:en:veritus#Latin|veritos]] [[wikt:en:revertisse|revertisse]],
**自分たち<small>〔援兵〕</small>は、ビトゥリゲース族の寝返りを恐れて引き返した。
*quibus id [[wikt:en:consilium#Latin|consilii]] fuisse [[wikt:en:cognoverint|cognoverint]],
**彼らには、以下のような謀計があったことを探知したのだ。
*ut, si flumen [[wikt:en:transissent#Latin|transissent]], una ex parte ipsi, altera [[wikt:en:Arverni#Latin|Arverni]] se [[wikt:en:circumsisterent|circumsisterent]].
**もし川を渡ったら、一方から<small>(ビトゥリゲース族)</small>自身が、他方から[[w:アルウェルニ族|アルウェルニー族]]が自分たちを包囲するというものだ、と。
:
*<!--❻--><sup>(6)</sup> Id ea<span style="background-color:#ffa;">[[wikt:la:-ne|ne]]</span> de causa, quam [[wikt:en:legatus#Latin|legatis]] <u>pronuntiarunt</u>,
**そのことは<small>(援兵たちが)</small><ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レーガートゥス</rt><rp>)</rp></ruby>たちに報告した理由によって<small>(なしたのか?)</small>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:-ne#Latin|-ne]] ~ [[wikt:en:an#Latin|an]] …;~であるか、あるいは…であるか。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:pronuntiarunt|pronuntiarunt]]<sub> (直接法・完了形)</sub> は古い印刷本 ''[[ガリア戦記/注解編/写本と校訂版#クリティカル・アパラトゥスとその略号|edd.vett.]]'' の記述で、<br> α系写本では [[wikt:en:pronuntiarint|pronuntiarint]]<sub> (接続法・完了形)</sub> だが、<br> β系写本では [[wikt:en:pronuntiaverint|pronuntia<u>ve</u>rint]]<sub> (接続法・完了形)</sub> となっている。)</span>
*<span style="background-color:#ffa;">[[wikt:la:an|an]]</span> [[wikt:en:perfidia#Latin|perfidia]] [[wikt:en:adductus#Latin|adducti]] [[wikt:en:fecerint|fecerint]],
**あるいは<small>(ビドゥリゲース族の)</small>寝返りに動かされて、なしたのか?
*[[wikt:en:quod#Conjunction|quod]] [[wikt:en:nihil#Latin|nihil]] nobis [[wikt:en:constat#Latin|constat]],
**我々<small>〔ローマ人〕</small>には何ら定かではないので、
*non [[wikt:en:videtur|videtur]] pro [[wikt:en:certus#Latin|certo]] esse <u>proponendum</u>.
**確言するべきであるとは思われない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:~ pro certo ponere;~を確かであると主張する)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:proponendum|<u>pro</u>ponendum]] だが、<br> β系写本では [[wikt:en:ponendum|ponendum]] となっている。)</span>
: <!-- [[wikt:en:| -->
; ビトゥリゲース族が、ローマ人やハエドゥイー族から離反して、アルウェルニー族と同盟してしまう
*<!--❼--><sup>(7)</sup> [[wikt:en:Bituriges#Latin|Bituriges]] eorum [[wikt:en:discessus#Noun|discessu]]
**ビトゥリゲース族は、彼ら<small>〔援兵〕</small>の撤収により、
*[[wikt:en:statim#Latin|statim]] <u>se</u> cum [[wikt:en:Arverni#Latin|Arvernis]] <u>coniunguntur</u>.
**ただちに[[w:アルウェルニ族|アルウェルニー族]]と<small>(同盟を)</small>結んだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:iunguntur|iunguntur]] だが、<br> β系写本では se ~ [[wikt:en:coniungunt|coniungunt]] となっている。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===6節===
*<span style="background-color:#ffd;">[[/注解/6節]] {{進捗|00%|2025-12-15}}</span>
[[画像:Warsaw Royal Castle GM (12).JPG|thumb|right|200px|[[w:グナエウス・ポンペイウス|グナエウス・ポンペイウス]]の立像([[w:ワルシャワ歴史地区|ワルシャワ王宮]])。彼は首都の騒乱を鎮めるために単独の[[w:執政官|執政官]]として大権を与えられ、イタリアの徴兵権を得た。[[w:三頭政治|三頭政治]]後のこの混乱期に、彼はカエサルの政敵たちからこぞって支持されたが、危機に瀕していたカエサルを打倒する絶好の機会を見送った。これは重大な逸機であり、数年後にポンペイウスにとって致命的な結果をもたらすことになる。]]
;諸軍団と分断されて苦慮するカエサル
:
*<!--❶--><sup>(1)</sup> His rebus in Italiam Caesari [[wikt:en:nuntiatus#Latin|nuntiatis]],
**これらの事情がイタリアにいるカエサルへ知らされると、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ここでいうイタリアとは、<br> カエサルの属州[[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]のことである。)</span>
*cum iam ille [[wikt:en:urbanus#Latin|urbanas]] res [[wikt:en:virtus#Latin|virtute]] [[wikt:en:Gnaei#Latin|Gnaei]]<sub> ([[wikt:en:Cn.#Latin|Cn.]])</sub> [[wikt:en:Pompeius#Proper_noun|Pompei]] [[wikt:en:commodior#Latin|commodiorem]] in [[wikt:en:status#Noun_11|statum]] [[wikt:en:pervenisse#Latin|pervenisse]] [[wikt:en:intellegeret|intellegeret]],
**彼は、もはや都<small>〔[[w:ローマ|ローマ市]]〕</small>の事態は[[w:グナエウス・ポンペイウス|グナエウス・ポンペイウス]]の果断さによってより相応な状態に至ったと認識したので、
*in [[wikt:en:Gallia_transalpina#Latin|Transalpinam Galliam]] [[wikt:en:profectus#Latin|profectus]] est.
**ガッリア・トラーンサルピーナ<small>〔アルプスの向こう側のガッリア〕</small>に出発した。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#1節|1節]]②項で言及された Galliam Transalpinam は<br> アルプスの西側「長髪のガッリア」全般を指すと思われるが、<br> ここではどちらかといえば<br> ガッリア南部のローマ属州ガッリア・トラーンサルピーナ<br> すなわち後の[[w:ガリア・ナルボネンシス|ガッリア・ナルボーネーンスィス]]を指す。)</span>
:
*<!--❷--><sup>(2)</sup> [[wikt:en:eo#Adverb|Eo]] cum [[wikt:en:venisset|venisset]],
**<small>(カエサルが)</small>そこに来たときに、
*magna [[wikt:en:difficultas#Latin|difficultate]] [[wikt:en:adficiebatur|adficiebatur]], qua [[wikt:en:ratio#Latin|ratione]] ad [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:pervenire#Latin|pervenire]] [[wikt:en:posset#Latin|posset]].
**どのような方策で軍隊のもとへ到達することができるか、という大きな困難に苦悩させられていた。
:
*<!--❸--><sup>(3)</sup> Nam, si [[wikt:en:legio#Latin|legiones]] in [[wikt:en:provincia#Latin|provinciam]] [[wikt:en:arcesseret|arcesseret]],
**なぜなら、もし、諸[[w:ローマ軍団|軍団]]を属州<small>〔ガッリア・トラーンサルピーナ〕</small>に呼び寄せるのならば、
*se [[wikt:en:absens#Latin|absente]] in [[wikt:en:iter#Latin|itinere]] [[wikt:en:proelium#Latin|proelio]] [[wikt:en:dimicaturus#Latin|dimicaturas]] [[wikt:en:intellegebat|intellegebat]];
**自分<small>〔カエサル〕</small>が不在のままで、行軍中に戦闘を闘うことになるであろうと理解していた。
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> si ipse ad exercitum [[wikt:en:contenderet|contenderet]],
**もし<small>(カエサル)</small>自身が<small>(大部隊の護衛なしで)</small>軍隊のもとへ急いで行くのならば、
*<u>ne</u> iis <u>quidem</u> eo tempore qui quieti [[wikt:en:viderentur|viderentur]],
**そのときには、中立を保っていると見られる者たちでさえも、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:iis#Latin|iis]] はβ系写本の記述で、α系写本では [[wikt:en:his#Latin|his]] となっている。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:quietus#Latin|quietus, quieti]]「平和的な、中立的な」)</span>
*suam [[wikt:en:salus#Latin|salutem]] [[wikt:en:recte#Latin|recte]] [[wikt:en:committi|committi]] [[wikt:en:videbat|videbat]].
**自分の身の安全を良く託されるとは思えなかったのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:前年まで、すなわち第6巻までの戦争は主としてガッリア北部・中部などで闘われていたので、<br> [[ガリア戦記 第6巻#44節|第6巻44節]]で既述のように、ローマ諸軍団はガッリア北部・中部周辺に冬営させられていた。<br> 今回は軍団が駐留していないガッリア中南部を中心に反乱が起こったので、<br> カエサルと諸軍団は分断された。<br> そのため、カエサルが大部隊の護衛なしで北上すれば、<br> 同盟部族にさえ寝首を掻かれる怖れがあったのである。)
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===7節===
*<span style="background-color:#ffd;">[[/注解/7節]] {{進捗|00%|2025-12-19}}</span>
;ルクテリウスとカエサルのナルボーをめぐる駆け引き
[[画像:Narbonne_panorama.jpg|thumb|right|300px|'''ナルボー'''(Narbo)すなわち現在の[[w:ナルボンヌ|ナルボンヌ市]](Narbonne)の街並み。ローマ人が[[w:ドミティア街道|ドミティア街道]]の拠点として植民市'''コロニア・ナルボー・マルティウス'''(Colonia Narbo Martius)を建設し、後には[[w:ローマ内戦 (紀元前49年-紀元前45年)|ローマ内乱]]のときにもカエサル派の根拠地となった。その重要性から帝政期には州都に昇格し、[[w:属州|属州]]名も[[w:ガリア・ナルボネンシス|ガッリア・ナルボネンスィス]]に改められたほどである。]]
[[画像:Via_domitia_map600x600_(1).png|thumb|right|200px|[[w:ドミティア街道|ドミティア街道]](Via Domitia)の経路。ローマ人によってイタリアと[[w:ヒスパニア|ヒスパーニア]]を結ぶ重要な街道として整備された。本節でカエサル側の軍勢が往復したのもこの街道である。]]
:
; カドゥルキー族のルクテリウスが、ルテーニー族を同盟に引き入れる
*<!--❶--><sup>(1)</sup> [[wikt:en:interim#Latin|Interim]] [[wikt:en:Lucterius#Latin|Lucterius]] [[wikt:en:Cadurcus#Latin|Cadurcus]]
**その間に、カドゥルキー族のルクテリウスが
*in [[wikt:en:Ruteni#Latin|Rutenos]] [[wikt:en:missus#Participle|missus]]
**ルテーニー族のところに遣わされて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#5節|5節]]の冒頭で述べられた。<br> ルテーニー族 ''[[w:en:Ruteni|Ruteni]]'' は現在の[[w:アヴェロン県|アヴェロン県]]の<br> [[w:ロデーズ|ロデーズ]]辺りにいたとされる。)</span>
*eam [[wikt:en:civitas#Latin|civitatem]] [[wikt:en:Arverni#Latin|Arvernis]] [[wikt:en:conciliat|conciliat]].
**その部族に[[w:アルウェルニ族|アルウェルニー族]]との仲を取り持つ。
:
; ルクテリウスが、ローマ属州内の拠点都市ナルボーを目指す
*<!--❷--><sup>(2)</sup> [[wikt:en:progressus#Participle|Progressus]] in [[wikt:en:Nitiobriges#Latin|Nitiobriges]] et [[wikt:en:Gabali#Latin|Gabalos]]
**<small>(彼は)</small>ニティオブリゲース族とガバリー族のところに進んで行き、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ニティオブリゲース族<br> またはニティオブロゲース族 ''[[w:en:Nitiobroges|Nitiobroges]]'' は<br> 現在の[[w:ロット=エ=ガロンヌ県|ロット=エ=ガロンヌ県]][[w:アジャン|アジャン]]辺り、<br> ガバリー族 ''[[w:en:Gabali|Gabali]]'' は現在の[[w:ロゼール県|ロゼール県]]辺りにいたらしい。)</span>
*ab [[wikt:en:uterque#Latin|utrisque]] [[wikt:en:obses#Latin|obsides]] [[wikt:en:accipit|accipit]]
**双方から人質たちを受け取って、
*et, magna [[wikt:en:coactus#Latin|coacta]] [[wikt:en:manus#Latin|manu]],
**多くの手勢を徴集すると、
*in [[wikt:en:provincia#Latin|provinciam]] [[wikt:en:Narbo#Latin|Narbonem]] [[wikt:en:versus#Latin|versus]] [[wikt:en:eruptio#Latin|eruptionem]] facere [[wikt:en:contendit|contendit]].
**<small>(ローマ人の)</small>[[w:属州|属州]]内のナルボーに向かって出撃することを急ぐ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ナルボー [[w:la:Narbo|Narbo]] は、ローマ人が建設した地中海岸の植民市で、<br> ヒスパーニアとイタリアを結ぶ拠点であった。<br> 現在の[[w:ナルボンヌ|ナルボンヌ]]。)</span>
:
; カエサルもナルボーを目指す
*<!--❸--><sup>(3)</sup> Qua re [[wikt:en:untiatus#Latin|nuntiata]]
**その事を報告されると、
*Caesar omnibus [[wikt:en:consilium#Latin|consiliis]] [[wikt:en:antevertendus#Latin|antevertendum]] <span style="color:#009900;font-size:8pt;">(esse)</span> [[wikt:en:existimavit|existimavit]], ut [[wikt:en:Narbo#Latin|Narbonem]] [[wikt:en:proficisceretur|proficisceretur]].
**カエサルは、ナルボーに出発することを、あらゆる計画に先立ってするべきであると考えた。
:
*<!--❹--><sup>(4)</sup> [[wikt:en:eo#Adverb|Eo]] cum [[wikt:en:venisset|venisset]],
**<small>(カエサルは)</small>そこへやって来ると、
*[[wikt:en:timens#Latin|timentes]] [[wikt:en:confirmat#Latin|confirmat]],
**<ruby><rb>怖気</rb><rp>(</rp><rt>おじけ</rt><rp>)</rp></ruby>ている者たちを元気付けて、
*[[wikt:en:praesidium#Latin|praesidia]]
**守備隊を
*in [[wikt:en:Ruteni#Latin|Rutenis]] [[wikt:en:provincialis#Latin|provincialibus]], [[wikt:en:Volcae#Latin|Volcis]] [[wikt:en:Arecomici#Latin|Arecomicis]], [[wikt:en:Tolosates#Latin|Tolosatibus]]
**属州側のルテーニー族、[[w:ウォルカエ族|ウォルカエ]]・アレコミキー族、トローサーテース族<small>(らの領内)</small>に、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:上述のように、属州外の<u>ルテーニー族</u>は[[w:アルウェルニ族|アルウェルニー族]]と結んでいる。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[w:ウォルカエ族|ウォルカエ族]]は、西側に住むテクトサゲース族 ''[[w:en:Tectosages|Tectosages]]'' と<br> 東側に住むアレコミキー族 ''[[w:en:Arecomici|Arecomici]]'' の2支族に分かれていた。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:トローサーテース族 ''[[w:fr:Tolosates|Tolosates]]'' は、ウォルカエ・テクトサゲース族の分派とされ、<br> 現在の[[w:トゥールーズ|トゥールーズ]]の近くにいたと考えられている。)</span>
*[[wikt:en:circum#Preposition|circum]]<nowiki>que</nowiki> [[wikt:en:Narbo#Latin|Narbonem]], quae [[wikt:en:locum#Latin|loca]] hostibus erant [[wikt:en:finitimus#Latin|finitima]],
**および敵方に隣接した地である[[w:ナルボンヌ|ナルボー]]周辺に
*[[wikt:en:constituit#Latin|constituit]];
**駐留させる。
:
*<!--❺--><sup>(5)</sup> partem [[wikt:en:copiae#Noun_2|copiarum]] ex [[wikt:en:provincia#Latin|provincia]]
**属州<small>〔ガッリア・トラーンサルピーナ〕</small>からの軍勢の一部、
*[[wikt:en:supplementum#Latin|supplementum]]<nowiki>que</nowiki>, quod ex Italia [[wikt:en:adduxerat|adduxerat]],
**およびイタリアから率いて来た補充兵を
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:後者の補充兵 supplementum は、[[#1節|1節]]で既述のように、<br> [[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]で徴募された軍団兵であろう。)</span>
*in [[wikt:en:Helvii#Latin|Helvios]], qui fines [[wikt:en:Arverni#Latin|Arvernorum]] [[wikt:en:contingunt|contingunt]],
**[[w:アルウェルニ族|アルウェルニー族]]の領土に接しているヘルウィイー族のところに
*[[wikt:en:convenire#Latin|convenire]] [[wikt:en:iubet#Latin|iubet]].
**集結することを命じる。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===8節===
*<span style="background-color:#ffd;">[[/注解/8節]] {{進捗|00%|2026-01-03}}</span>
[[画像:Carte-cevennes-france.png|thumb|right|200px|フランスにおける[[w:中央高地 (フランス)|中央高地]](Massif Central)とセヴェンヌ山地(Cévennes)の位置]]
[[画像:Col_de_legal.jpeg|thumb|right|200px|[[w:雪|雪]]に覆われた[[w:オーヴェルニュ地域圏|オーヴェルニュ高地]]。オーヴェルニュ(Auvergne)の名は[[w:アルウェルニ族|アルウェルニー族]](Arverni)に由来する。]]
[[画像:Causse_Mejean_Evening.jpg|thumb|right|200px|城壁のように続くケウェンナ(セヴェンヌ)山地の断崖]]
[[画像:France_Massif_central.jpg|thumb|right|200px|[[w:アルウェルニ族|アルウェルニー族]]の勢力圏であった[[w:中央高地 (フランス)|中央高地]](Massif Central)の領域(着色部分)。平野の多いフランスにおいて山塊としてそびえ立つ。]]
:
;カエサルがケウェンナ山地を越えてアルウェルニー族の領内へ突入
*<!--❶--><sup>(1)</sup> His rebus [[wikt:en:comparatus#Latin|comparatis]],
**これらの事が整えられて、
*[[wikt:en:repressus#Latin|represso]] iam [[wikt:en:Lucterius#Latin|Lucterio]] et [[wikt:en:remotus#Latin|remoto]],
**<small>(カドゥルキー族の)</small>ルクテリウスはすでに押し留められ、遠ざけられた。
*quod [[wikt:en:intrare#Latin|intrare]] intra [[wikt:en:praesidium#Latin|praesidia]] [[wikt:en:periculosus#Latin|periculosum]] [[wikt:en:putabat|putabat]],
**──というのは<small>(ローマ人の)</small>守備の範囲内に踏み込むことは危険なことであると<small>(ルクテリウスが)</small>見なしていたからであるが、──
*in [[wikt:en:Helvii#Latin|Helvios]] [[wikt:en:proficiscitur|proficiscitur]].
**<small>(そこで、カエサルは)</small>ヘルウィイー族のところに出発する。
:
; カエサルが、アルウェルニー族の要害ケウェンナ山を越える
*<!--❷--><sup>(2)</sup> <u>Etsi</u> mons <u>Cevenna</u>, qui [[wikt:en:Arverni#Latin|Arvernos]] ab [[wikt:en:Helvii#Latin|Helviis]] [[wikt:en:discludit|discludit]],
**[[w:アルウェルニ族|アルウェルニー族]]をヘルウィイー族から隔てている<u>ケウェンナ山</u>は、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:山の名は写本によって Cebenna または Cevenna となっており、<br> [[w:ガイウス・プリニウス・セクンドゥス|大プリーニウス]]が記した [[wikt:en:Cebenna#Latin|Cebenna]] がガリア語に近いようである。<br> 現在名はセヴェンヌ山地 Cévennes と呼ばれ、<br> [[w:中央高地 (フランス)|フランス中央高地]](Massif Central)の南東部にそそり立っている。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:etsi#Latin|etsi]] ~ [[wikt:en:tamen#Latin|tamen]] …「~としても、にもかかわらず…」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:mons#Latin|mons]] は β系写本の記述で、α系写本にはない。)</span>
*[[wikt:en:durissimus#Latin|durissimo]] tempore anni
**最も厳しい時季に
*[[wikt:en:altissimus#Latin|altissima]] [[wikt:en:nix#Latin|nive]] iter [[wikt:en:impediebat|impediebat]],
**豪[[w:雪|雪]]によって道を閉ざしていたのであるが、
*<u>tamen</u> [[wikt:en:discussus#Latin|discussa]] [[wikt:en:nix#Latin|nive]] sex in [[wikt:en:altitudo#Latin|altitudinem]] [[wikt:en:pes#Latin|pedum]]
**にもかかわらず<small>(カエサル勢は)</small>深さ6<u>ペース</u>の雪を粉砕して、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、6ペースは約1.8メートル弱。)</span>
*atque ita [[wikt:en:via#Latin|viis]] [[wikt:en:patefactus#Latin|patefactis]] [[wikt:en:summus#Latin|summo]] [[wikt:en:miles#Latin|militum]] <u>sudore</u>
**このように兵士たちの最大の努力によって道が開かれて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:sudor#Latin|sudore]]「汗」だが、<br> β系写本では [[wikt:en:labor#Latin|labore]]「労苦」 となっている。)</span>
*ad fines [[wikt:en:Arverni#Latin|Arvernorum]] [[wikt:en:pervenit#Latin|pervenit]].
**[[w:アルウェルニ族|アルウェルニー族]]の領土へ到達した。
:
; アルウェルニー族が、カエサルの奇襲に周章狼狽する
*<!--❸--><sup>(3)</sup> Quibus [[wikt:en:oppressus#Latin|oppressis]] [[wikt:en:inopinans#Latin|inopinantibus]],
**<small>(アルウェルニー族は)</small>彼らに対する<small>(カエサルの)</small>攻撃を予期していなかったが、
*quod se <u>Cevenna</u> ut [[wikt:en:murus#Latin|muro]] [[wikt:en:munitus#Latin|munitos]] [[wikt:en:existimabant|existimabant]],
**──というのは、自分たちは<u>ケウェンナ</u>を壁として防御されていると考えていたからであり、
*ac <u>ne</u> [[wikt:en:singularis#Latin|singulari]] <u>quidem</u> [[wikt:en:umquam#Latin|umquam]] homini eo tempore anni [[wikt:en:semita#Latin|semitae]] [[wikt:en:patuerant|patuerant]],
**かつ、その時季には、個人にとってさえも、小道はかつて開かれていなかったからであるが、──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*[[wikt:en:eques#Latin|equitibus]] [[wikt:en:imperat|imperat]],
**<small>(カエサルは)</small>騎兵たちに命令する。
*ut, [[wikt:en:quam#Adverb|quam]] [[wikt:en:late#Latin|latissime]] [[wikt:en:possint|possint]], [[wikt:en:vagentur|vagentur]]
**できるだけ広く動き回り、
*et [[wikt:en:quam#Adverb|quam]] maximum hostibus [[wikt:en:terror#Latin|terrorem]] [[wikt:en:inferant|inferant]].
**敵たちに最大限の恐怖を引き起こすように、と。
:
; ウェルキンゲトリークスが、ビトゥリゲース族のもとから軍勢を取って返す
*<!--❹--><sup>(4)</sup> Celeriter haec [[wikt:en:fama#Latin|fama]] ac <u>nuntiis</u>
**これらのことは速やかに風評や伝令たちによって、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、主要写本ω では [[wikt:en:nuntii#Latin|nuntii]] だが、<br> ''[[ガリア戦記/注解編/写本と校訂版#Manutius|Manutius]]'' が [[wikt:en:nuntiis#Etymology_1|nuntiis]] と修正提案している。)</span>
*ad [[wikt:en:Vercingetorix#Latin|Vercingetorigem]] [[wikt:en:perferuntur|perferuntur]];
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]のもとへ報知される。
*quem [[wikt:en:perterritus#Latin|perterriti]] omnes [[wikt:en:Arverni#Latin|Arverni]] [[wikt:en:circumsistunt|circumsistunt]] atque [[wikt:en:obsecrant|obsecrant]],
**彼<small>〔ウェルキンゲトリークス〕</small>を、脅かされている[[w:アルウェルニ族|アルウェルニー族]]の皆が取り巻いて、嘆願する。
*ut suis [[wikt:en:fortuna#Latin|fortunis]] [[wikt:en:consulat#Latin|consulat]],
**自分たち<small>〔アルウェルニー族〕</small>の境遇に配慮してくれるように、
*<u>neve</u> ab hostibus <u>diripiantur</u>,
**自分たち<small>〔アルウェルニー族〕</small>が敵<small>〔ローマ人〕</small>によって略奪されることを許容しないように、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:この行は、α系写本では [[wikt:en:neve#Latin|neve]] ab hostibus [[wikt:en:diripiantur|diripiantur]] <br> β系写本では [[wikt:en:neu#Latin|neu]] se ab hostibus [[wikt:en:diripi|diripi]] [[wikt:en:patiatur|patiatur]] となっている。)</span>
*[[wikt:en:praesertim#Latin|praesertim]] cum [[wikt:en:videat|videat]] [[wikt:en:omnis#Latin|omne]] ad se bellum [[wikt:en:translatus#Participle|translatum]].
**とりわけ、すべての戦争が自分たちへ向けられると<small>(彼が)</small>見なしているのであるから
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:praesertim cum ~;とりわけ~であるから)</span>
: <!-- [[wikt:en:| -->
*<!--❺--><sup>(5)</sup> Quorum ille [[wikt:en:prex#Latin|precibus]] [[wikt:en:permotus#Latin|permotus]]
**彼<small>〔ウェルキンゲトリークス〕</small>は、その者たちの懇願に揺り動かされて、
*[[wikt:en:castra#Latin|castra]] ex [[wikt:en:Bituriges#Latin|Biturigibus]] [[wikt:en:movet|movet]] in [[wikt:en:Arverni#Latin|Arveruos]] [[wikt:en:versus#Latin|versus]].
**陣営をビトゥリゲース族のところから[[w:アルウェルニ族|アルウェルニー族]]のところに向けて行軍する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:castra movet 「陣営を動かす」=「行軍する」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:現在の[[w:ブールジュ|ブールジュ]]辺りから[[w:クレルモン=フェラン|クレルモン=フェラン]]辺りに南下したようである。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===9節===
*<span style="background-color:#ffd;">[[/注解/9節]] {{進捗|00%|2026-01-12}}</span>
;カエサルが北上して諸軍団と合流するが、同盟軍はゴルゴビナ攻略をめざす
:
*<!--❶--><sup>(1)</sup> At Caesar, [[wikt:en:biduum#Latin|biduum]] in his locis [[wikt:en:moratus#Participle|moratus]],
**それに対して、カエサルは2日間、この地に留まった。
*quod haec de [[wikt:en:Vercingetorix#Latin|Vercingetorige]] usu ventura [[wikt:en:opinio#Latin|opinione]] [[wikt:en:praeceperat|praeceperat]],
**──というのは、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]についてこれ<small>〔陣営の移動〕</small>が起こると予想をしていたからだが、──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:usu venire 「起こる」→ usu [[wikt:en:venturus#Latin|ventūra]] (esse) 「起こるであろう」)</span>
*per causam [[wikt:en:supplementum#Latin|supplementi]] [[wikt:en:equitatus#Noun|equitatus]]<nowiki>que</nowiki> [[wikt:en:cogendus#Latin|cogendi]]
**補充兵と騎兵隊を徴集するためという口実のもとに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:per causam 「口実のもとに」)</span>
*ab [[wikt:en:exercitus#Noun|exercitu]] [[wikt:en:discedit|discedit]];
**軍隊から離れる。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:Brutus#Latin|Brutum]] [[wikt:en:adulescens#Noun|adulescentem]] his copiis [[wikt:en:praeficit|praeficit]];
**<small>(カエサルは)</small><u>青年ブルートゥス</u>にこの軍勢を指揮させる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:青年ブルートゥスとは、<br> [[w:デキムス・ユニウス・ブルトゥス・アルビヌス|デキムス・ブルートゥス]](<small>[[w:la:Decimus_Iunius_Brutus_Albinus|Decimus Iunius Brutus Albinus]]</small>)のことで、<br> [[ガリア戦記 第3巻#14節|第3巻14節]]でカエサルの艦隊を指揮した。)</span>
*hunc [[wikt:en:monet#Latin|monet]], ut in omnes partes [[wikt:en:eques#Latin|equites]] quam [[wikt:en:late#Latin|latissime]] [[wikt:en:pervagentur|pervagentur]]:
**彼には、[[w:騎兵|騎兵]]たちがあらゆる方面にできるだけ広く駆け回るようにと、忠告する。
*<u>daturum</u> se <u>operam</u>, ne longius [[wikt:en:triduum#Latin|triduo]] ab [[wikt:en:castra#Latin|castris]] [[wikt:en:absit#Latin|absit]].
**自分<small>〔カエサル〕</small>は、3日間より長く陣営から離れないように、努力をするであろう、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:opera#Latin|operam]] dare 「努力をする」→ operam [[wikt:en:daturus#Latin|datūrum]] (esse) 「努力をするであろう」)</span>
[[画像:Image-Vienne-Cropped.jpg|thumb|right|300px|'''ウィエンナ'''(Vienna)すなわち現在のヴィエンヌ(Vienne)。ロダヌス川(現[[w:ローヌ川|ローヌ川]])のほとりにある当地は、南仏[[w:プロヴァンス|プロヴァンス地方]]と北仏[[w:ブルゴーニュ地域圏|ブルゴーニュ地方]]を結ぶ交通の要衝として、古代ローマ時代から栄え、今もローマ時代の遺跡が多く残る。]]
:
; カエサルが、急いでウィエンナへ北進する
*<!--❸--><sup>(3)</sup> His [[wikt:en:constitutus#Participle|constitutis]] rebus,
**これらの事を決定すると、
*<u>omnibus</u> suis [[wikt:en:inopinans#Latin|inopinantibus]],
**配下の皆が予期しないほど、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:omnibus は β系写本の記述で、<br> α系写本にはない。)</span>
*quam [[wikt:en:maximus#Latin|maximis]] potest [[wikt:en:iter#Latin|itineribus]],
**できるかぎりの強行軍で、
*[[wikt:en:Vienna#Etymology_1|Viennam]] [[wikt:en:pervenit#Latin|pervenit]].
**<u>ウィエンナ</u>に到着する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ウィエンナ [[w:la:Vienna|Vienna]] は、<br> 現在の[[w:ヴィエンヌ (イゼール県)|ヴィエンヌ]] ''[[w:en:Vienne, Isère|Vienne]]'')</span>
:
; カエサルが、ハエドゥイー族領を抜けて、2個軍団が冬営するリンゴネース族領へ向けて北上する
*<!--❹--><sup>(4)</sup> [[wikt:en:ibi#Latin|Ibi]] [[wikt:en:nactus#Latin|nactus]] [[wikt:en:recens#Latin|recentem]] [[wikt:en:equitatus#Latin|equitatum]], quem [[wikt:en:multus#Latin|multis]] ante diebus eo [[wikt:en:praemiserat|praemiserat]],
**そこで、何日も前にそこに先遣していたまだ新兵の騎兵隊を得て、
[[画像:Langres_FR_(march_2008).jpg|thumb|right|300px|リンゴネース族(Lingones)の名を残す[[w:ラングル|ラングル]](Langres)の街の雪景色]]
*neque [[wikt:en:diurnus#Latin|diurno]] neque [[wikt:en:nocturnus#Latin|nocturno]] itinere [[wikt:en:intermissus#Latin|intermisso]]
**昼間も夜間も行軍を中断せずに、
*per fines [[wikt:en:Aedui#Latin|Haeduorum]]
**[[w:ハエドゥイ族|ハエドゥイー族]]の領土を通って、
*in [[wikt:en:Lingones#Latin|Lingones]] [[wikt:en:contendit|contendit]],
**<u>リンゴネース族のところ</u>に急いだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:リンゴネース族 [[w:la:Lingones|Lingones]] の首邑は<br> 現在の[[w:ラングル|ラングル]] ''[[w:en:Langres|Langres]]'' で、<br> ローマ時代には [[w:la:Andematunnum|Andematunnum]] と呼ばれたが、<br> ''[[wikt:fr:Lingones|Lingones]]'' の転訛が ''[[wikt:fr:Langres|Langres]]'' である。)</span>
*[[wikt:en:ubi#Latin|ubi]] [[wikt:en:duo#Latin|duae]] [[wikt:en:legio#Latin|legiones]] [[wikt:en:hiemabant|hiemabant]],
**そこには、2個[[w:ローマ軍団|軍団]]が冬営していた。
*ut, si [[wikt:en:aliquis#Latin|quid]] etiam de sua [[wikt:en:salus#Latin|salute]] ab [[wikt:en:Aedui#Latin|Haeduis]] [[wikt:en:iniretur|iniretur]] [[wikt:en:consilium#Latin|consilii]], [[wikt:en:celeritas#Latin|celeritate]] [[wikt:en:praecurreret|praecurreret]].
**もし<small>(カエサル)</small>自らの安全についてさえ、ハエドゥイー族により何らかの謀計が始められても、速やかに凌駕するように。
:
; カエサルが、リンゴネース族領の軍団冬営地へ到着して、諸軍団へ集結を指令する
*<!--❺--><sup>(5)</sup> [[wikt:en:eo#Adverb|Eo]] cum [[wikt:en:pervenisset|pervenisset]],
**<small>(カエサルは)</small>そこへ到着したときに、
*ad reliquas [[wikt:en:legio#Latin|legiones]] [[wikt:en:mittit|mittit]]
**残りの軍団のもとへ<small>(伝令を)</small>遣わす。
*<u>prius</u>que omnes in unum locum [[wikt:en:cogit|cogit]], <u>quam</u> de eius [[wikt:en:adventus#Latin|adventu]] [[wikt:en:Arverni#Latin|Arvernis]] [[wikt:en:nuntiari|nuntiari]] [[wikt:en:posset#Latin|posset]].
**彼の到着について[[w:アルウェルニ族|アルウェルニー族]]に知らされ得るより早く、総勢が一か所に集結するように、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:priusquam#Latin|prius ~ quam]] …;…より早く~)</span>
: <!-- [[wikt:en:| -->
; ウェルキンゲトリークスが、ボイイー族がいるゴルゴビナの攻略を企図する
*<!--❻--><sup>(6)</sup> Hac re [[wikt:en:cognitus#Participle|cognita]],
**この事を知ると、
*[[wikt:en:Vercingetorix#Latin|Vercingetorix]] rursus in [[wikt:en:Bituriges#Latin|Bituriges]] [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:reducit|reducit]]
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は再びビトゥリゲース族のところに軍隊を連れ戻して、
*atque [[wikt:en:inde#Latin|inde]] [[wikt:en:profectus#Participle_2|profectus]] Gorgobinam, [[wikt:en:Boii#Latin|Boiorum]] [[wikt:en:oppidum#Latin|oppidum]],
**そこから、[[w:ボイイ族|ボイイー族]]の城塞都市であるゴルゴビナへ出発した。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ゴルゴビナ ''[[w:en:Gorgobina|Gorgobina]]'' は、現在の候補地としては、<br> [[w:ニエーヴル県|ニエーヴル県]]のサン=パリズ=ル=シャテル<small>([[w:en:Saint-Parize-le-Châtel|Saint-Parize-le-Châtel]])</small><br> [[w:アンドル=エ=ロワール県|アンドル=エ=ロワール県]]のラ・ゲルシュ([[w:en:La Guerche|La Guerche]])<br> あるいは、[[w:シェール県|シェール県]]のサン=サテュル([[w:fr:Saint-Satur|Saint-Satur]])などが挙げられている。)</span>
*quos ibi [[wikt:en:helvetico|Helvetico]] [[wikt:en:proelium#Latin|proelio]] [[wikt:en:victus#Participle|victos]]
**──[[w:ヘルウェティイ族|ヘルウェーティイー族]]の戦闘で打ち負かされた彼らをそこに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ボイイー族はヘルウェーティイー族とともにガッリアに移動して、カエサルに敗れていた。第1巻28節~29節を参照。)</span>
*Caesar [[wikt:en:conlocaverat#Latin|conlocaverat]] [[wikt:en:Aedui#Latin|Haeduis]]<nowiki>que</nowiki> [[wikt:en:adtribuerat#Latin|adtribuerat]],
**カエサルは宿営させ、ハエドゥイー族<small>(の庇護)</small>に委ねていたのだが、──
*[[wikt:en:oppugnare#Latin|oppugnare]] [[wikt:en:instituit#Latin|instituit]].
**<small>(ウェルキンゲトリークスはゴルゴビナの)</small>攻略を決意した。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===10節===
[[画像:Caesar's_campaign_to_Agedincum_in_52BC.png|thumb|right|250px|前節までのカエサルの[[w:ナルボンヌ|ナルボー]]からアゲディンクムへの進路(青線)および[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の進路(赤線)。青字名は親ローマ部族、赤字名は反ローマ部族。カエサルは[[w:アルウェルニ族|アルウェルニー族]]の本拠ゲルゴウィアを突くと見せかけてウェルキンゲトリークスを引き寄せ、その間に[[w:ブルゴーニュ地域圏|ブルゴーニュ]]に冬営していた諸軍団と合流できた。これに対して、ウェルキンゲトリークスはボイイー族を攻めようとする。]]
*<span style="background-color:#ffd;">[[/注解/10節]] {{進捗|00%|2026-01-16}}</span>
;カエサルがアゲディンクムを発って、ボイイー族支援に向かう
:
; カエサルが抱えることになった「大きな困難」とは?
*<!--❶--><sup>(1)</sup> Magnam haec res Caesari [[wikt:en:difficultas#Latin|difficultatem]] ad [[wikt:en:consilium#Latin|consilium]] [[wikt:en:capiendus#Latin|capiendum]] [[wikt:en:adferebat|adferebat]]<!--:-->,
**この事態は、カエサルが作戦を立てるためには、大きな困難を引き起こしていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:haec res 「この事態」とは、<br> ウェルキンゲトリークスが<br> ハエドゥイー族の庇護下にあったボイイー族を攻めること。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:magnam ~ difficultatem 「大きな困難を」)</span>
*si reliquam partem [[wikt:en:hiems#Latin|hiemis]] uno loco [[wikt:en:legio#Latin|legiones]] [[wikt:en:contineret|contineret]],
**もし、冬の残りの期間に、諸[[w:ローマ軍団|軍団]]を1か所に留めておくならば、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:前節で述べられたように、<br> カエサルはリンゴネース族の軍団冬営地に着いたときに、<br> 諸軍団に1か所に集結するべく伝令を遣わしていた。)</span>
*ne, [[wikt:en:stipendiarius#Latin|stipendiariis]] [[wikt:en:Haedui#Latin|Haeduorum]] [[wikt:en:expugnatus#Latin|expugnatis]], [[wikt:en:cunctus#Latin|cuncta]] Gallia [[wikt:en:deficeret|deficeret]],
**[[w:ハエドゥイ族|ハエドゥイー族]]の朝貢国が攻略されて、ガッリア全体が背くのではないか?
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:「ハエドゥイー族の朝貢国」とは、ボイイー族のこと。)</span>
*quod [[wikt:en:nullus#Determiner|nullum]] amicis in eo [[wikt:en:praesidium#Latin|praesidium]] <u>videret positum esse</u>;
**──というのは、彼<small>〔カエサル〕</small>においては、友邦に対するいかなる守備隊も置かれていないと<small>(ガッリアが)</small>見るからである──。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> [[ガリア戦記/注解編/写本と校訂版#写本の系図|α系写本]]のうち、χ系・M・B・S写本などでは [[wikt:en:videret|videret]] [[wikt:en:positus#Latin|positum]] esse 、<br> α系写本のうち、写本M・L・Nなどでは [[wikt:en:videretur|videretur]] positum esse 、<br> β系写本では、positum videret となっている。)</span>
*si [[wikt:en:mature#Adverb|maturius]] ex [[wikt:en:hiberna#Noun|hibernis]] [[wikt:en:educeret|educeret]],
**もし、尚早に冬営地から<small>(諸軍団を)</small>進発させれば、
*ne ab re [[wikt:en:frumentarius#Latin|frumentaria]] [[wikt:en:durus#Latin|duris]] [[wikt:en:subvectio#Latin|subvectionibus]] [[wikt:en:laboraret|laboraret]].
**<small>(降雪時期の)</small>糧秣供給の厄介な輸送によって苦労するのではないか?
:
*<!--❷--><sup>(2)</sup> <u>Praestare</u> [[wikt:en:visus#Participle|visum]] est tamen omnes [[wikt:en:difficultas#Latin|difficultates]] [[wikt:en:perpeti#Verb|perpeti]],
**しかしながら、あらゆる困難に耐えることの方が<u>優っている</u>ように見える。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:praestare|praestare]] ~ [[wikt:en:quam#Adverb|quam]] …「…よりも~が優る」)</span>
*<u>quam</u> [[wikt:en:tantus#Latin|tanta]] [[wikt:en:contumelia#Latin|contumelia]] [[wikt:en:acceptus#Latin|accepta]] omnium suorum [[wikt:en:voluntas#Latin|voluntates]] [[wikt:en:alienare#Latin|alienare]].
**これほどの恥辱を受けて、配下の皆の意欲を遠ざけてしまう<u>よりは</u>。
:
*<!--❸--><sup>(3)</sup> Itaque [[wikt:en:cohortatus#Latin|cohortatus]] [[wikt:en:Haedui#Latin|Haeduos]] de [[wikt:en:supportandus#Latin|supportando]] [[wikt:en:commeatus#Noun|commeatu]],
**こうして、<small>(カエサルは)</small>ハエドゥイー族に軍需物資の輸送について、激励して、
*[[wikt:en:praemittit|praemittit]] ad [[wikt:en:Boii#Latin|Boios]], qui de suo [[wikt:en:adventus#Latin|adventu]] [[wikt:en:doceant|doceant]]
**[[w:ボイイ族|ボイイー族]]のもとへ、<small>(カエサル)</small>自らの到着について知らせるための者たちを先遣して、
*[[wikt:en:hortentur|hortentur]]<nowiki>que</nowiki> ut in [[wikt:en:fides#Latin|fide]] [[wikt:en:maneant|maneant]] atque hostium [[wikt:en:impetus#Latin|impetum]] magno animo [[wikt:en:sustineant|sustineant]].
**<small>(カエサルへの)</small>信義に留まって、敵たちの襲撃に大いなる決意をもって持ちこたえるように、と激励させた。
[[画像:Aqueduc2.jpg|thumb|right|250px|アゲディンクム、すなわちセノネース族(Senones)の名を残す現在の[[w:サンス|サーンス]](Sens)に建てられたローマ時代の[[w:水道橋|水道橋]]遺跡。]]
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> Duabus [[wikt:en:Agedincum#Latin|Agedinci]] legionibus atque [[wikt:en:impedimentum#Latin|impedimentis]] [[wikt:en:totus#Latin|totius]] [[wikt:en:exercitus#Noun|exercitus]] [[wikt:en:relictus#Latin|relictis]],
**アゲディンクムに、2個軍団および軍隊全体の輜重を残すと、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:アゲディンクムは敵対するセノネース族の首邑だが、<br> [[ガリア戦記 第6巻#44節|第6巻44節]]で6個軍団を冬営させていた。<br> 現在の[[w:サンス|サーンス]]。)</span>
*ad [[wikt:en:Boii#Latin|Boios]] [[wikt:en:proficiscitur|proficiscitur]].
**[[w:ボイイ族|ボイイー族]]のもとへ出発した。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===11節===
[[画像:France_-_Loiret_-_Montargis_-_Passerelle_vers_l'écluse.JPG|thumb|right|250px|ウェッラウノドゥーヌムの候補地の一つであるモンタルジ(Montargis)の運河沿いの景観。セノネース族の城塞都市ウェッラウノドゥーヌム(Vellaunodunum)が現在のどの地点に当たるのか定説はない。アゲディンクム(現在の[[w:サンス|サーンス]])とケナブム(現在の[[w:オルレアン|オルレアン]])の中間地点であると考えられることから、モンタルジ([[w:en:Montargis|Montargis]])、ボーヌ=ラ=ロランド([[w:en:Beaune-la-Rolande|Beaune-la-Rolande]])やシャトー=ランドン([[w:en:Château-Landon|Château-Landon]])などが候補地に挙げられている。]]
*<span style="background-color:#ffd;">[[/注解/11節]] {{進捗|00%|2026-02-02}}</span>
;セノネース族のウェッラウノドゥーヌムを降し、カルヌーテース族のケナブムを攻略
:
*<!--❶--><sup>(1)</sup> [[wikt:en:alter#Latin|Altero]] die
**<small>(カエサルは出発して)</small>翌日に、
*cum ad [[wikt:en:oppidum#Latin|oppidum]] [[wikt:en:Senones#Latin|Senonum]] [[wikt:en:Vellaunodunum#Latin|Vellaunodunum]] [[wikt:en:venisset|venisset]],
**セノネース族の城塞都市ウェッラウノドゥーヌムへやって来たときに、
*ne [[wikt:en:aliquem|quem]] post se hostem [[wikt:en:relinqueret|relinqueret]],
**自らの後方に何らかの敵を残しておかないように、
*[[wikt:en:quo#Latin|quo]] [[wikt:en:expeditior#Latin|expeditiore]] re [[wikt:en:frumentarius#Adjective|frumentaria]] [[wikt:en:uteretur|uteretur]],
**そのことにより、妨げなく糧秣供給を享受するように、
*[[wikt:en:oppugnare#Latin|oppugnare]] [[wikt:en:instituit#Latin|instituit]]
**<small>(同市の)</small>攻囲を決めて、
*<u>idque</u> [[wikt:en:biduum#Latin|biduo]] [[wikt:en:circumvallavit|circumvallavit]];
**それ<small>〔城塞都市〕</small>を2日間で<small>(塁壁で)</small>囲んだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:id#Latin|id]]<nowiki>que</nowiki> だが、<br> β系写本では [[wikt:en:eo#Etymology_4|eo]]<nowiki>que</nowiki> となっている。)</span>
:
; セノネース族の城塞都市ウェッラウノドゥーヌムが降伏する
*<!--❷--><sup>(2)</sup> [[wikt:en:tertius#Latin|tertio]] die
**3日目に、
*[[wikt:en:missus#Participle|missis]] ex [[wikt:en:oppidum#Latin|oppido]] [[wikt:en:legatus#Noun|legatis]] de [[wikt:en:deditio#Latin|deditione]],
**城塞都市から降伏についての使節たちが遣わされて来て、
*[[wikt:en:arma#Latin|arma]] [[wikt:en:conferri|conferri]],
**武器が運び集められること、
*[[wikt:en:iumentum#Latin|iumenta]] [[wikt:en:produci#Latin|produci]],
**役畜が引き渡されること、
*[[wikt:en:sescenti#Latin|sescentos]] [[wikt:en:obses#Latin|obsides]] [[wikt:en:dari#Latin|dari]] [[wikt:en:iubet#Latin|iubet]].
**600名の人質が供出されることを<small>(カエサルが)</small>命じる。
:
; ウェッラウノドゥーヌムに副官トレボーニスと守備隊を残し、カエサル自身はケナブムへ向かう
*<!--❸--><sup>(3)</sup> Ea qui [[wikt:en:conficeret|conficeret]],
**それらのことを成就するための者として、
*[[wikt:en:Gaius#Latin|Gaium]] [[wikt:en:Trebonius#Latin|Trebonium]] [[wikt:en:legatus#Latin|legatum]] [[wikt:en:relinquit|relinquit]].
**<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レーガートゥス</rt><rp>)</rp></ruby> [[w:ガイウス・トレボニウス|ガーイウス・トレボーニウス]]を<small>(ウェッラウノドゥーヌムに)</small>残留させる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[w:la:Gaius Trebonius|Gaius Trebonius]] は、カエサルの副官の一人。)</span>
*Ipse, ut quam primum iter <u>faceret</u><ref>faceret はα系写本の表記で、β系写本では conficeret となっている。</ref>,
**<small>(カエサル)</small>自身は、できるだけ素早く<small>(ゴルゴビナへの)</small>行軍を成就するように、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:quam#Adverb|quam]] [[wikt:en:primum#Latin|primum]] 〜「できるだけ素早く〜」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:faceret|faceret]] だが、<br> β系写本では [[wikt:en:conficeret|conficeret]] となっている。)</span>
*[[wikt:en:Genabum#Latin|Cenabum]] [[wikt:en:Carnutes#Latin|Carnutum]] [[wikt:en:proficiscitur|proficiscitur]];
**カルヌーテース族のケナブムに出発する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ケナブム Cenabum はケルト語風の読みで、現在の[[w:オルレアン|オルレアン]]。)</span>
:
*<!--❹--><sup>(4)</sup> qui tum primum [[wikt:en:adlatus#Latin|adlato]] [[wikt:en:nuntium#Latin|nuntio]] de [[wikt:en:oppugnatio#Latin|oppugnatione]] [[wikt:en:Vellaunodunum#Latin|Vellaunoduni]],
**そのとき彼ら<small>〔カルヌーテース族〕</small>は、当初はウェッラウノドゥーヌムの攻囲についての報告をもたらされて、
*cum [[wikt:en:longe#Latin|longius]] eam rem <u>ductum</u> [[wikt:en:iri#Latin|iri]] [[wikt:en:existimarent|existimarent]],
**その事・軍事作戦はより長く引き延ばされて行われると考えていたので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ductus#Noun_2|ductus]] は、軍事的な指揮・作戦などを表す。[[#62節]]も同様。)</span>
*[[wikt:en:praesidium#Latin|praesidium]] [[wikt:en:Genabum#Latin|Cenabi]] [[wikt:en:tuendus#Latin|tuendi]] causa, quod eo [[wikt:en:mitterent|mitterent]], [[wikt:en:comparabant|comparabant]].
**ケナブムを固守するために、守備隊をそこへ派遣することを準備していた。
:
; カエサルが、カルヌーテース族の城塞都市ケナブムの攻囲を翌日に延期する
*<!--❺--><sup>(5)</sup> [[wikt:en:huc#Latin|Huc]] [[wikt:en:biduum#Latin|biduo]] [[wikt:en:pervenit#Etymology_1|pervenit]].
**<small>(カエサルは)</small>ここ<small>〔ケナブム〕</small>へ2日間で到着する。
*[[wikt:en:castra#Latin|Castris]] ante oppidum [[wikt:en:positus#Participle|positis]],
**城塞都市の前に陣営を設置したが、
*[[wikt:en:dies#Latin|diei]] [[wikt:en:tempus#Latin|tempore]] [[wikt:en:exclusus#Latin|exclusus]]
**日の時刻<small>〔夕刻〕</small>によって妨げられたので、
*in posterum [[wikt:en:oppugnatio#Latin|oppugnationem]] [[wikt:en:differt|differt]],
**翌日に攻囲を延期する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:in posterum = in [[wikt:en:posterus#Latin|posterum]] [[wikt:en:diem#Latin|diem]]「翌日に」)</span>
*[[wikt:en:quisque#Latin|quaeque]] ad eam rem [[wikt:en:usus#Latin|usui]] [[wikt:en:sint#Latin|sint]],
**その事<small>〔攻囲〕</small>に有益になることは何であれ、
*[[wikt:en:miles#Latin|militibus]] [[wikt:en:imperat|imperat]];
**兵士たちに命令する。
[[画像:Orleans.jpg|thumb|right|400px|ケナブム(Cenabum)すなわち現在の[[w:オルレアン|オルレアン]](Orléans)を流れるリゲル川(現在の[[w:ロワール川|ロワール川]])の景観。左が北岸のオルレアン聖十字架大聖堂、右がジョージ5世橋と思われる。]]
:
*<!--❻--><sup>(6)</sup> et, quod oppidum [[wikt:en:Genabum#Latin|Cenabum]] [[wikt:en:pons#Latin|pons]] [[wikt:en:flumen#Latin|fluminis]] [[wikt:en:Liger#Latin|Ligeris]] [[wikt:en:contingebat|contingebat]],
**城塞都市ケナブムには、リゲル川の橋が接していたので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:リゲル川は、現在の[[w:ロワール川|ロワール川]]。)</span>
*[[wikt:en:veritus#Latin|veritus]] ne [[wikt:en:noctu#Adverb|noctu]] ex oppido [[wikt:en:profugerent|profugerent]],
**夜間に城塞都市から<small>(敵勢が)</small>逃亡するのではないかと恐れて、
*[[wikt:en:duo#Latin|duas]] legiones in [[wikt:en:arma#Latin|armis]] [[wikt:en:excubare|excubare]] [[wikt:en:iubet#Latin|iubet]].
**<small>(カエサルは)</small>2個[[w:ローマ軍団|軍団]]に武装して寝ずの番をすることを命じる。
:
; ケナブムの住民たちが退避し始める
*<!--❼--><sup>(7)</sup> [[wikt:en:Genabensis#Noun|Cenabenses]] paulo ante mediam noctem
**ケナブムの人々は、真夜中の少し前に
*[[wikt:en:silentium#Latin|silentio]] ex oppido [[wikt:en:egressus#Participle|egressi]]
**沈黙のうちに城塞都市から出て、
*flumen [[wikt:en:transire#Latin|transire]] [[wikt:en:coeperunt|coeperunt]].
**川を渡り始めた。
:
; カエサルの諸軍団がケナブムを制圧する
*<!--❽--><sup>(8)</sup> Qua re per [[wikt:en:explorator#Latin|exploratores]] [[wikt:en:nuntiatus#Latin|nuntiata]]
**その事が偵察者たちによって報告されると、
*Caesar legiones, quas [[wikt:en:expeditus#Latin|expeditas]] esse [[wikt:en:iusserat|iusserat]]
**カエサルは、戦備を整えることを命じていた諸軍団を、
*[[wikt:en:porta#Latin|portis]] [[wikt:en:incensus#Participle|incensis]]
**<small>(ケナブムの)</small>城門を焼き打ちさせた後で、
*[[wikt:en:intromittit|intromittit]] atque oppido [[wikt:en:potitur|potitur]],
**<small>(軍団を)</small>送り込み、城塞都市を占領させて、
*[[wikt:en:perpaucus#Latin|perpaucis]] ex hostium numero [[wikt:en:desideratus#Latin|desideratis]] [[wikt:en:quin#Latin|quin]] [[wikt:en:cunctus#Latin|cuncti]] [[wikt:en:caperentur#Etymology_1|caperentur]],
**敵のうちからわずかな数を取り逃がしたが、むしろ皆がことごとく捕らえられた。
*quod [[wikt:en:pons#Latin|pontis]] atque [[wikt:en:iter#Latin|itinerum]] [[wikt:en:angustia#Latin|angustiae]] <u>multitudinis</u> fugam [[wikt:en:intercluserant|intercluserant]].
**──というのは、橋や道の狭さが、大勢の逃亡をさえぎったからである。──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:multitudinis|multitudinis]]<sub> (単数・属格)</sub> だが、<br> β系写本では [[wikt:en:multitudini|multitudini]]<sub> (単数・与格)</sub> となっている。)</span>
: <!-- [[wikt:en:| -->
; カエサル勢がケナブムを略奪・焼き討ち。リゲル川を渡ってビトゥリゲース族領へ達する
*<!--❾--><sup>(9)</sup> Oppidum [[wikt:en:diripit|diripit]] atque [[wikt:en:incendit|incendit]],
**<small>(カエサルは)</small>城塞都市を略奪し、焼き討ちして、
*[[wikt:en:praeda#Latin|praedam]] militibus [[wikt:en:donat#Latin|donat]],
**略奪品を兵士たちに与える。
*[[wikt:en:exercitus#Noun|exercitum]] <u>Ligerem</u> [[wikt:en:traducit|traducit]]
***軍隊にリゲル川を渡らせて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:Ligerem|Ligerem]] だが、<br> β系写本では Ligerim となっている。)</span>
*atque in [[wikt:en:Bituriges#Latin|Biturigum]] fines [[wikt:en:pervenit#Etymology_1|pervenit]].
*ビトゥリゲース族の領土に到達する。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===12節===
[[画像:Sancerre.jpg|thumb|right|250px|ビトゥリゲース族の城塞都市があったと考えられる[[w:サンセール|サンセール]]([[w:en:Sancerre|Sancerre]])の街並み。カエサルがケナブム(現[[w:オルレアン|オルレアン]])からリゲル川(現[[w:ロワール川|ロワール川]])沿いに当初の目的地であったゴルゴビナへ向かい、後にアウァーリクム(現[[w:ブールジュ|ブールジュ]])へ右折したと見なせば、この地がノウィオドゥーヌムであったとも考えられる。街の名 Sancerre の意味が「カエサルに捧げられた」であるという説もある。現在は[[w:ロワールワイン|ロワールワイン]]の産地として有名で、辛口の白ワインなどの銘柄「Sancerre」にもなっている。]]
[[画像:Neung-sur-Beuvron_église_Saint-Denis_1.jpg|thumb|right|250px|城塞都市ノウィオドゥーヌム(Noviodunum)の所在地として現在有力視されている[[w:ロワール=エ=シェール県|ロワール=エ=シェール県]]のヌン=スュル=ブーヴロン([[w:en:Neung-sur-Beuvron|Neung-sur-Beuvron]])のサン=ドニ教会。カエサルは当初の目的地であったボイイー族のゴルゴビナへは真っ直ぐ向かわずに大きく迂回しており、ケナブム(現[[w:オルレアン|オルレアン]])の南方約45kmにあるこの地点(Beuvron川沿いのNeung)がノウィオドゥーヌムであると推定されている。上空からは、ガッリア時代の城塞都市跡の輪郭が見て取れるという。しかしながら、ボイイ族からは遠い位置にある。]]
*<span style="background-color:#ffd;">[[/注解/12節]] {{進捗|00%|2026-02-02}}</span>
;ビトゥリゲース族のノウィオドゥーヌムを降すが、敵の騎兵が来援
:
*<!--❶--><sup>(1)</sup> [[wikt:en:Vercingetorix#Latin|Vercingetorix]], ubi de Caesaris [[wikt:en:adventus#Latin|adventu]] [[wikt:en:cognovit#Latin|cognovit]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、カエサルの到来について知るや否や、
*[[wikt:en:oppugnatio#Latin|oppugnatione]] <u>destitit</u>
**<small>(ボイイー族の城塞都市ゴルゴビナの)</small>攻略を取り止めて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> α系写本では [[wikt:en:destitit|destitit]]<sub> (完了形)</sub> だが、<br> β系写本や印刷本では [[wikt:en:desistit#Latin|desistit]]<sub> (現在形)</sub> となっている。)</span>
*atque [[wikt:en:obviam#Adverb|obviam]] Caesari [[wikt:en:proficiscitur|proficiscitur]].
**カエサルの方に向かって進発する。
:
*<!--❷--><sup>(2)</sup> Ille oppidum [[wikt:en:Biturigēs|Biturigum]] [[wikt:en:positus#Latin|positum]] in via [[wikt:en:Noviodunum#Latin|Noviodunum]] [[wikt:en:oppugnare#Latin|oppugnare]] [[wikt:en:instituerat|instituerat]].
**彼<small>〔カエサル〕</small>は、途中に位置しているビトゥリゲース族の[[w:オッピドゥム|城塞都市]]ノウィオドゥーヌムの攻略を決めていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:どこへの途中なのか明記されていないため、その解釈により場所についての解釈が変わるようである。)</span>
:
; カエサルの城塞都市ノウィオドゥーヌムへの降伏条件
*<!--❸--><sup>(3)</sup> [[wikt:en:qui#Determiner|Quo]] ex oppido
**その城塞都市から
*cum legati ad eum [[wikt:en:venissent|venissent]] [[wikt:en:oratum#Verb|oratum]] ut sibi [[wikt:en:ignosceret|ignosceret]] suaeque vitae [[wikt:en:consuleret|consuleret]],
**使節たちが彼<small>〔カエサル〕</small>のもとへ、自分たちを容赦して生命を助けるように嘆願するために、やって来たときに、
*ut celeritate reliquas res [[wikt:en:conficeret|conficeret]], [[wikt:en:qui#Determiner|qua]] [[wikt:en:pleraque#Latin|pleraque]] erat [[wikt:en:consecutus#Latin|consecutus]],
**<small>(カエサルは)</small>多くのことを実行してきた迅速さによって、ほかの事を成し遂げるために、
*arma [[wikt:en:conferri|conferri]],
**武具が運び集められること、
*[[wikt:en:quus#Latin|equos]] [[wikt:en:produci#Verb_2|produci]],
**馬匹が引き渡されること、
*obsides [[wikt:en:dari#Latin|dari]] [[wikt:en:iubet#Latin|iubet]].
**人質が供出されること、を命じる。
:
*<!--❹--><sup>(4)</sup> Parte iam obsidum [[wikt:en:traditus#Participle|tradita]],
**すでに人質の一部が移送されて、
*cum [[wikt:en:reliqua#Latin|reliqua]] [[wikt:en:administrarentur|administrarentur]],
**残り<small>(の人質たち)</small>が処置されていたときに、
*[[wikt:en:centurio#Latin|centurionibus]] et paucis [[wikt:en:miles#Latin|militibus]] [[wikt:en:intromissus#Latin|intromissis]], qui arma [[wikt:en:iumentum#Latin|iumenta]]<nowiki>que</nowiki> [[wikt:en:conquirerent|conquirerent]],
**<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby>たちや若干の兵士たちが、武器や[[w:使役動物|役畜]]を探し集めるべく<small>(城塞都市の中に)</small>送り込まれていたのだが、
*[[wikt:en:equitatus#Noun|equitatus]] hostium procul [[wikt:en:visus#Latin|visus]] est, qui [[wikt:en:agmen#Latin|agmen]] [[wikt:en:Vercingetorix#Latin|Vercingetorigis]] [[wikt:en:antecesserat|antecesserat]].
**ウェルキンゲトリークスの隊列に先行していた敵の[[w:騎兵|騎兵隊]]が遠くに望見された。
:
; ウェルキンゲトリークスの来援に気づいた城塞の者たちが、籠城に転じる
*<!--❺--><sup>(5)</sup> Quem [[wikt:en:simulatque|simulatque]] [[wikt:en:oppidanus#Noun|oppidani]] [[wikt:en:conspexerunt|conspexerunt]] atque in [[wikt:en:spes#Latin|spem]] [[wikt:en:auxilium#Latin|auxilii]] [[wikt:en:venerunt|venerunt]],
**それ<small></small>を城塞都市の者たちが視認して、救援の希望を抱くや否や、
*[[wikt:en:clamor#Latin|clamore]] [[wikt:en:sublatus#Etymology_1|sublato]]
**雄叫びを上げて、
*arma capere,
**武具を取ること、
*portas [[wikt:en:claudere#Etymology_1|claudere]],
**城門を閉じること、
*[[wikt:en:murus#Latin|murum]] [[wikt:en:complere|complere]] [[wikt:en:coeperunt|coeperunt]].
**城壁を<small>(兵で)</small>満たすこと、を始めた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:sublato は [[wikt:en:tollo|tollo]] の分詞)</span>
: <!-- [[wikt:en:| -->
; 城塞民たちの心変わりに感づいたローマ人の将兵たちが城外に撤収する
*<!--❻--><sup>(6)</sup> [[wikt:en:centurio#Latin|Centuriones]] in oppido,
**城塞都市の中の<small>(カエサルの配下の)</small>百人隊長たちは、
*cum ex [[wikt:en:significatio#Latin|significatione]] Gallorum [[wikt:en:novus#Latin|novi]] [[wikt:en:aliquis#Latin|aliquid]] ab iis [[wikt:en:iniri#Latin|iniri]] consilii [[wikt:en:intellexissent|intellexissent]],
**ガッリア人たちの兆候から、彼らによる何らかの新たな謀りごとが始められていると察知していたので、
*[[wikt:en:gladius#Latin|gladiis]] [[wikt:en:destrictus#Latin|destrictis]]
**<ruby><rb>[[w:グラディウス (武器)|長剣]]</rb><rp>(</rp><rt>グラディウス</rt><rp>)</rp></ruby> を抜いて、
*portas [[wikt:en:occupaverunt|occupaverunt]]
**城門を占拠して、
*suosque omnes [[wikt:en:incolumis#Latin|incolumes]] [[wikt:en:receperunt|receperunt]].
**配下たち皆を無傷なままで退却させた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===13節===
*<span style="background-color:#ffd;">[[/注解/13節]] {{進捗|00%|2026-02-15}}</span>
[[画像:Caesar's_campaign_to_Noviodunum_in_52BC.png|thumb|right|250px|ノウィオドゥーヌムに至るカエサルの進路(青線)および[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の進路(赤線)。青字名は親ローマ部族、赤字名は反ローマ部族。カエサルはアゲディンクムを発してからウェッラウノドゥーヌム、ケナブム、ノウィオドゥーヌムを続けて降し、ボイイー族のゴルゴビナ攻略を諦めたウェルキンゲトリークスもノウィオドゥーヌム来援に駆けつけて来た。ここに、初めて両軍が騎兵戦で激突することになった。]]
;同盟軍の騎兵を撃退、城塞都市を再び降して、アウァーリクム攻めに向かう
:
; カエサルが、騎兵戦の切り札としてゲルマーニア騎兵を繰り出す
*<!--❶--><sup>(1)</sup> Caesar ex castris [[wikt:en:equitatus#Latin|equitatum]] [[wikt:en:educi#Latin|educi]] [[wikt:en:iubet#Latin|iubet]],
**カエサルは、陣営から[[w:騎兵|騎兵隊]]を進発させることを命じて、
*<u>[[wikt:en:proelium#Latin|proelium]]</u> [[wikt:en:equester#Latin|equestre]] [[wikt:en:committit|committit]];
**<small>(ウェルキンゲトリークス勢と)</small>騎兵戦を交える。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> α系写本では proelium だが、<br> β系写本では proelium<u>que</u> となっている。)</span>
*[[wikt:en:laborans#Latin|laborantibus]] iam suis
**配下の者たちがすでに苦戦していたときに、
*[[wikt:en:Germanus#Adjective|Germanos]] [[wikt:en:eques#Latin|equites]] circiter CCCC([[wikt:en:quadringentos|quadringentos]]) [[wikt:en:submittit|submittit]],
**<small>(カエサルは)</small>[[w:ゲルマニア|ゲルマーニア]]人の騎兵たち約400騎を救援に派遣する。
*quos ab [[wikt:en:initium#Latin|initio]] <u>habere [[wikt:en:secum#Latin|secum]]</u> [[wikt:en:instituerat|instituerat]].
**その者らは<small>(戦いの)</small>当初から自分のそばに保持すると決めていたものであった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> χ系・B・M・S写本では habere secum だが、<br> β系・L・N写本では secum habere となっている。)</span>
:
; ゲルマーニア騎兵が、ウェルキンゲトリークス配下の騎兵を一蹴する
*<!--❷--><sup>(2)</sup> Eorum [[wikt:en:impetus#Latin|impetum]] [[wikt:en:Galli#Latin|Galli]] [[wikt:en:sustineo#Latin|sustinere]] non [[wikt:en:potuerunt|potuerunt]]
**彼ら<small>〔ゲルマーニア人騎兵〕</small>の突撃に<small>(敵側の)</small>ガッリア人たちは持ちこたえることができず、
*atque in fugam [[wikt:en:coniectus#Participle|coniecti]]
**敗走に追いやられて、
*multis [[wikt:en:amissus#Latin|amissis]]
**大勢の者を失い、
*se ad [[wikt:en:agmen#Latin|agmen]] [[wikt:en:receperunt|receperunt]].
**<small>(後方にいたウェルキンゲトリークスの)</small>隊列に退却した。
:
; 城塞都市ノウィオドゥーヌムがカエサルの軍門に降る
*Quibus [[wikt:en:profligatus#Latin|profligatis]],
**彼ら<small>〔ウェルキンゲトリークスの騎兵隊〕</small>が制圧されると、
*rursus [[wikt:en:oppidanus#Noun|oppidani]] [[wikt:en:perterritus#Latin|perterriti]]
**[[w:オッピドゥム|城塞都市]]<small>〔ノウィオドゥーヌム〕</small>の者たちは再び怖れをなして、
*[[wikt:en:comprehensus#Latin|comprehensos]] eos, quorum [[wikt:en:opera#Latin|opera]] [[wikt:en:plebs#Latin|plebem]] [[wikt:en:concitatus#Latin|concitatam]] [[wikt:en:existimabant|existimabant]],
**その働きかけによって民衆を扇動したと<small>(城塞の民が)</small>考えていたところの者たちを拘束して、
*ad Caesarem [[wikt:en:perduxerunt|perduxerunt]]
**カエサルのもとへ連行して、
*seseque ei [[wikt:en:dediderunt|dediderunt]].
**自分たちも彼<small>〔カエサル〕</small>に降伏した。
: <!-- [[wikt:en:| -->
; カエサルが、ビトゥリゲース族の城塞都市アウァーリクムを目指す
*<!--❸--><sup>(3)</sup> Quibus rebus [[wikt:en:confectus#Latin|confectis]],
**それらの事が成し遂げられると、
*Caesar ad oppidum [[wikt:en:Avaricum#Latin|Avaricum]],
**カエサルは、[[w:オッピドゥム|城塞都市]]アウァーリクムへ、
*quod erat [[wikt:en:maximus#Latin|maximum]] [[wikt:en:munitissimus#Latin|munitissimum]]<nowiki>que</nowiki> in finibus [[wikt:en:Bituriges#Latin|Biturigum]] atque [[wikt:en:ager#Latin|agri]] [[wikt:en:fertilissimus#Latin|fertilissima]] [[wikt:en:regio#Latin|regione]],
**──それはビトゥリゲース族の領土で耕地の最も肥沃な地方にあり、最大かつ最も要塞化されていたが、──
*[[wikt:en:profectus#Etymology_3|profectus]] est,
**<small>(そこへ)</small>出発した。
*quod eo oppido [[wikt:en:receptus#Latin|recepto]]
**──というのは、その城塞都市を獲得することで、
*[[wikt:en:civitas#Latin|civitatem]] [[wikt:en:Bituriges#Latin|Biturigum]] se in [[wikt:en:potestas#Latin|potestatem]] [[wikt:en:redacturus#Latin|redacturum]] [[wikt:en:confidebat|confidebat]].
**ビトゥリゲースの部族国家を<small>(カエサルの)</small>隷下に引き戻すであろうと、確信していたからである──。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
==アウァーリクム攻略戦==
===14節===
*<span style="background-color:#ffd;">[[/注解/14節]] {{進捗|00%|2026-03-08}}</span>
;ウェルキンゲトリークスが兵站妨害と焦土戦術を決断
:
*<!--❶--><sup>(1)</sup> [[wikt:en:Vercingetorix#Latin|Vercingetorix]] tot [[wikt:en:continuus#Latin|continuis]] [[wikt:en:incommodum#Latin|incommodis]] [[wikt:en:Vellaunodunum#Latin|Vellaunoduni]], [[wikt:en:Genabum#Latin|Cenabi]], [[wikt:en:Noviodunum#Latin|Novioduni]] [[wikt:en:acceptus#Latin|acceptis]]
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、ウェッラウノドゥーヌム、ケナブム、ノウィオドゥーヌムと、このような多くの引き続く敗北をこうむると、
*suos ad [[wikt:en:concilium#Latin|concilium]] [[wikt:en:convocat#Latin|convocat]].
**麾下の者たちを会合へ召集する。
: <!-- [[wikt:en:| -->
; ウェルキンゲトリークスが、ローマ勢の糧道を断つことを提言
*<!--❷--><sup>(2)</sup> [[wikt:en:docet|Docet]] longe alia ratione esse bellum [[wikt:en:gerendus#Latin|gerendum]] atque antea [[wikt:en:gestus#Participle|gestum]] sit.
**以前に遂行されていたのとはまったく別の作戦で戦争が遂行されるべきである、と説く。
*Omnibus [[wikt:en:modus#Latin|modis]] huic rei studendum, ut [[wikt:en:pabulatio#Latin|pabulatione]] et [[wikt:en:commeatus#Noun|commeatu]] Romani [[wikt:en:prohibeantur|prohibeantur]].
**ローマ人たちが[[w:糧秣|糧秣]]徴発と物資輸送を妨げられるべく、この事をあらゆる方法で追求するべきだ。
:
*<!--❸--><sup>(3)</sup> Id esse facile,
**そのことは、容易である。
*quod [[wikt:en:equitatus#Latin|equitatu]] ipsi [[wikt:en:abundent#Latin|abundent]]
**というのは<small>(我々ガッリア勢)</small>自身は[[w:騎兵|騎兵隊]]がたくさんおり、
*et quod anni tempore [[wikt:en:subleventur|subleventur]].
**<small>(冬という)</small>時季に支えられているのだから。
:
; ローマ人が穀物倉に群がるところを騎兵で襲撃するべし
*<!--❹--><sup>(4)</sup> [[wikt:en:pabulum#Latin|Pabulum]] [[wikt:en:secari|secari]] non posse;
**<small>(この時季には)</small><ruby><rb>[[w:秣|秣]]</rb><rp>(</rp><rt>まぐさ</rt><rp>)</rp></ruby> は刈り取られることができない。
*[[wikt:en:necessario#Adverb|necessario]] [[wikt:en:dispersus#Latin|dispersos]] hostes ex [[wikt:en:aedificium#Latin|aedificiis]] [[wikt:en:petere|petere]];
**敵たち<small>〔ローマ勢〕</small>はやむなく分散して、家屋から<small>(糧秣を)</small>求める。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ほとんどの会話が間接話法を採る本書で、<br> ローマ勢が「敵」hostes と表現されることは極めてまれである。)</span>
*hos omnes [[wikt:en:cotidie#Latin|cotidie]] ab [[wikt:en:eques#Latin|equitibus]] <u>deleri</u> posse.
**これら皆を日々に<small>(ガッリア側の)</small>騎兵隊によって壊滅させることができる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系写本では [[wikt:en:deleri|deleri]]「滅ぼされる」だが、<br> α系写本では [[wikt:en:diligi#Latin|diligi]]「分断される」となっている。)</span>
:
; 焦土戦術をもって、ローマ人と軍馬を飢えさせるべし
*<!--❺--><sup>(5)</sup> Praeterea [[wikt:en:salus#Latin|salutis]] causa rei [[wikt:en:familiaris#Adjective|familiaris]] [[wikt:en:commodum#Latin|commoda]] [[wikt:en:neglegendus#Latin|neglegenda]];
**さらに<small>(同盟諸部族に共通の)</small>安全のために、私有資産の利益はなおざりにされるべきだ。
*[[wikt:en:vicus#Latin|vicos]] atque [[wikt:en:aedificium#Latin|aedificia]] [[wikt:en:incendi#Verb_2|incendi]] [[wikt:en:oportet#Latin|oportere]]
**<small>(以下のような領域の)</small>村々や建物は焼かれるべきだ。
*hoc spatio ab Boia quoque versus, quo [[wikt:en:pabulandi#Verb|pabulandi]] causa [[wikt:en:adire#Latin|adire]] posse [[wikt:en:videantur|videantur]].
**[[w:ボイイ族|ボイイー族]]のところから四方八方へ糧秣徴発するために赴くことができると思われる領域では。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:主要写本ω にある ab Boia「ボイイー族のところから」は、<br> 現代では「街道から」ab via と修正読みされることが多い。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:quoque#Latin|quōque]] [[wikt:en:versus#Adverb|versus]] = [[wikt:en:quisque#Latin|quōquō]] versus「あらゆる方向へ」)</span>
[[画像:Eglise_saint_parize_le_chatel.jpg|thumb|right|250px|ボイイ族(Boii)の領内であったと思われる現在のサン=パリーズ=ル=シャテルの教会。ボイイー族の首邑ゴルゴビナは、[[w:ニエーヴル県|ニエーヴル県]]のサン=パリーズ=ル=シャテル([[w:en:Saint-Parize-le-Châtel|Saint-Parize-le-Châtel]])あるいは[[w:シェール県|シェール県]]のラ・ゲルシュ=スュル=ローボワ([[w:en:La Guerche-sur-l'Aubois|La Guerche-sur-l'Aubois]])の近辺にあったと推定されている。]]
:
*<!--❻--><sup>(6)</sup> Harum ipsis rerum copiam [[wikt:en:suppeto#Latin|suppetere]],
**<small>(ガッリア勢)</small>自身には、これらの物は、豊富に貯えてある。
*quod quorum in finibus bellum [[wikt:en:geratur|geratur]], eorum [[wikt:en:ops#Noun_4|opibus]] [[wikt:en:subleventur|subleventur]];
**──というのは、戦争が遂行される領土内の者たちの、彼らの助力に支えられているからだ。──
:
*<!--❼--><sup>(7)</sup> Romanos <u>aut</u> [[wikt:en:inopia#Latin|inopiam]] non [[wikt:en:laturus#Latin|laturos]] <span style="color:#009900;">(esse)</span>
**ローマ人たちは、あるいは<small>(糧食の)</small>欠乏に耐えられないであろうし、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:aut#Latin|aut]] ~ aut …「あるいは~あるいは…」)</span>
*<u>aut</u> magno <u>cum</u> periculo longius <u>ab</u> castris [[wikt:en:processurus#Latin|processuros]] <span style="color:#009900;">(esse)</span>;
**あるいは大きな危険とともに陣営からより遠くに進み出るであろう。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:cum は、ρ系写本・写本Tの記述で、<br> α系写本・写本Vにはない。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ab は、α系・ρ系写本・写本Vの記述で、写本Tでは a となっている。)</span>
:
*<!--❽--><sup>(8)</sup> neque [[wikt:en:interesse#Latin|interesse]], ipsos<u>ne</u> [[wikt:en:interficiant|interficiant]], [[wikt:en:impedimentum#Latin|impedimentis]]<u><nowiki>ne</nowiki></u> [[wikt:en:exuant|exuant]],
**<small>(ローマ人の)</small>当人たちを殺戮するか、輜重を奪い取るか、<small>(どちらであろうが)</small>違いはない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:-ne#Latin|-ne]] は疑問小辞。~ -ne, … -ne 「~か、…か」)</span>
*quibus [[wikt:en:amissus#Latin|amissis]] bellum [[wikt:en:geri#Latin|geri]] non [[wikt:en:possit|possit]].
**それら<small>〔輜重〕</small>を失えば、戦争を遂行することができないのだから。
:
*<!--❾--><sup>(9)</sup> Praeterea oppida [[wikt:en:incendi#Verb_2|incendi]] [[wikt:en:oportet#Latin|oportere]],
**さらに、<small>(以下のような)</small>[[w:オッピドゥム|城塞都市]]は焼かれなければならない。
*quae non [[wikt:en:munitio#Latin|munitione]] et loci natura <u>ab omni</u> sint <u>periculo</u> [[wikt:en:tutus#Latin|tuta]],
**防塁や地勢によってあらゆる危険から守られていない<small>(城塞都市は)</small>。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ab [[wikt:en:omni#Latin|omni]] [[wikt:en:periculum#Latin|periculo]] 「あらゆる危険から」)</span>
*<u>neu</u> suis sint ad <u>detrectandam</u> [[wikt:en:militia#Latin|militiam]] [[wikt:en:receptaculum#Latin|receptacula]]
**麾下の者たちにとっては<small>(城塞都市が)</small>[[w:兵役逃れ|兵役を忌避すること]]のための隠れ場所になることがないように、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:neu#Latin|neu]] は α系写本の記述で、β系写本では [[wikt:en:ne#Latin|ne]] となっている。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:detrectandam|detrectandam]] は α系・ρ系写本の表記で、π系写本では [[wikt:en:detractandam|detractandam]] となっている。)</span>
*neu [[wikt:en:Romani#Latin|Romanis]] [[wikt:en:propositus#Latin|proposita]] ad [[wikt:en:copia#Latin|copiam]] [[wikt:en:commeatus#Noun|commeatus]] [[wikt:en:praeda#Latin|praedam]]<nowiki>que</nowiki> [[wikt:en:tollendus#Latin|tollendam]],
**ローマ人たちにとって<small>(城塞都市が)</small>豊富な物資や戦利品を奪うための置き場所ともならないように。
:
*<!--❿--><sup>(10)</sup> Haec si [[wikt:en:gravis#Latin|gravia]] aut [[wikt:en:acerbus#Latin|acerba]] [[wikt:en:videantur|videantur]],
**もし、これら<small>(の作戦)</small>が厳しい、または苦しいと見えるとしても、
*multo illa [[wikt:en:graviter#Latin|gravius]] <u>aestimare</u>, [[wikt:en:liber#Noun_6|liberos]], [[wikt:en:coniunx#Latin|coniuges]] in [[wikt:en:servitus#Latin|servitutem]] [[wikt:en:abstrahi|abstrahi]], ipsos [[wikt:en:interfici|interfici]];
**それより、子供や配偶者たちが奴隷状態で連れ去られ、自身が殺されることの方が、はるかに厳しいと判断されるべきだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:aestimare|aestimare]] だが、 <br> β系写本では [[wikt:en:aestimari|aestimari]] [[wikt:en:debere|debere]] となっている。)</span>
*quae sit [[wikt:en:necesse#Latin|necesse]] [[wikt:en:accido#Etymology_1|accidere]] [[wikt:en:victus#Participle|victis]].
**それらのことは、打ち負かされた者たちには、起こることが必然なのである。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===15節===
[[画像:Bourges_-_002_-_Low_Res.jpg|thumb|right|300px|'''アウァーリクム'''(Avaricum)すなわちビトゥリゲース族(Bituriges)の名を残すともいわれる現在の[[w:ブールジュ|ブールジュ]](Bourges)の[[w:サン=テチエンヌ大聖堂 (ブールジュ)|サン=テティエンヌ大聖堂]]([[w:世界遺産|世界遺産]])。この街はガッリア時代からこの地方の中心的な城塞都市であり、現代ではそれほど大都会ではないが、世界遺産の大聖堂や音楽祭などで広く知られている。]]
[[画像:Bourges.JPG|thumb|right|300px|アウァーリクムすなわち[[w:ブールジュ|ブールジュ]]の大聖堂から眺めた街並み。'''ビトゥリゲース族'''はかつてはイタリア北部に移住したこともある強大な部族で、この当時はブルディガラ(Burdigala:現在の[[w:ボルドー|ボルドー]])周辺にいたビトゥリゲース・ウィウィスキ族(Bituriges Vivisci)およびアウァーリクム周辺にいた'''ビトゥリゲース・クビ族'''(Bituriges Cubi)の二派に分かれていた。『ガリア戦記』に登場するのはビトゥリゲース・クビ族の方である。]]
*<span style="background-color:#ffd;">[[/注解/15節]] {{進捗|00%|2026-03-08}}</span>
;焦土戦術開始、しかしアウァーリクムの防衛を決定
:
; 焦土戦術として、ビトゥリゲース族の街々が焼かれる
*<!--❶--><sup>(1)</sup> Omnium [[wikt:en:consensus#Latin|consensu]]
**<small>(会合の参加者)</small>全員の合意により
*hac [[wikt:en:sententia#Latin|sententia]] [[wikt:en:probatus#Latin|probata]],
**<small>(ウェルキンゲトリークスの)</small>この意向が承認されると、
*uno die [[wikt:en:amplius|amplius]] [[wikt:en:viginti|viginti]]<sub> (XX)</sub> [[wikt:en:urbs#Latin|urbes]] [[wikt:en:Bituriges#Latin|Biturigum]] [[wikt:en:incenduntur|incenduntur]].
**一日で、20より多いビトゥリゲース族の街々が焼かれる。
:
; ほかの諸部族の街々も焼かれる
*<!--❷--><sup>(2)</sup> Hoc idem fit in reliquis [[wikt:en:civitas#Latin|civitatibus]]:
**これと同じことが、ほかの諸部族でも行なわれて、
*in omnibus partibus
**あらゆる方面において、
*[[wikt:en:incendium#Latin|incendia]] [[wikt:en:conspiciuntur|conspiciuntur]];
**炎上が望見される。
*quae <u>etsi</u> magno cum [[wikt:en:dolor#Latin|dolore]] omnes [[wikt:en:ferebant|ferebant]],
**それらの皆が大きな悲嘆とともに耐えていたとしても、
*<u>tamen</u> hoc sibi [[wikt:en:solacium#Latin|solacii]] [[wikt:en:proponebant|proponebant]],
**しかし、自分らにとっての<small>(以下の)</small>慰めを抱いていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:etsi#Latin|etsi]] ~ [[wikt:en:tamen#Latin|tamen]] …<br> 「~としても、にもかかわらず…」)</span>
*quod se prope [[wikt:en:exploratus#Latin|explorata]] [[wikt:en:victoria#Latin|victoria]]
**勝利はほぼ確実なものとされて、
*celeriter [[wikt:en:amissus#Latin|amissa]] [[wikt:en:reciperaturus#Latin|reciperaturos]] <span style="color:#009900;">(esse)</span>
**失ったものを速やかに回復するであろう、
*[[wikt:en:confidebant|confidebant]].
**と確信していたことである。
:
; アウァーリクムは、焦土戦術か、それとも防衛すべきか?
*<!--❸--><sup>(3)</sup> [[wikt:en:deliberatur|Deliberatur]] de [[wikt:en:Avaricum#Latin|Avarico]] in [[wikt:en:communis#Latin|communi]] [[wikt:en:concilium#Latin|concilio]], [[wikt:en:incendi#Latin|incendi]] <u>placeret</u> an [[wikt:en:defendi#Latin|defendi]].
**合同の会合において、アウァーリクムについて (も) 焼き討ちが良いか、あるいは防衛か、が吟味される。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:placeret|placeret]]<sub> (接続法・未完了過去)</sub> だが、<br> β系写本では [[wikt:en:placeat|placeat]]<sub> (接続法・現在)</sub> となっている。)</span>
:
; ビトゥリゲース族が、要害であるアウァーリクムの防衛を懇願する
*<!--❹--><sup>(4)</sup> [[wikt:en:procumbunt|Procumbunt]] omnibus Gallis ad pedes [[wikt:en:Bituriges#Latin|Bituriges]],
**<small>(会合に参加していた)</small>すべてのガッリア人の足元へ、ビトゥリゲース族の者たちはひれ伏す。
*ne [[wikt:en:pulcherrimus#Latin|pulcherrimam]] prope <u>[[wikt:en:totus#Latin|totius]] Galliae</u> [[wikt:en:urbs#Latin|urbem]], quae <u>et</u> [[wikt:en:praesidium#Latin|praesidio]] et [[wikt:en:ornamentum#Latin|ornamento]] sit [[wikt:en:civitas#Latin|civitati]],
**ほぼ全ガッリアの街々で最も美しいもの、部族にとっては要害でも誉れでもあるものを、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:totius Galliae は α系写本の語順で、β系写本では Galliae totius となっている。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et は β系写本にはあるが、α系写本にはない。)</span>
*suis manibus [[wikt:en:succendo#Latin|succendere]] [[wikt:en:cogerentur|cogerentur]];
**自分たちの手で燃やすことを強いられないように、と(懇願した)。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ne ~ cogerentur;~を強いられないように)</span>
:
; アウァーリクムの地の利
*<!--❺--><sup>(5)</sup> facile se loci natura [[wikt:en:defensurus#Latin|defensuros]] [[wikt:en:dicunt|dicunt]],
**自分たちは<small>(アウァーリクムを)</small>地勢によって容易に防衛するだろう、と述べる。
*quod prope ex omnibus partibus [[wikt:en:flumen#Latin|flumine]] et [[wikt:en:palus#Latin|palude]] [[wikt:en:circumdatus#Latin|circumdata]]
**というのは<small>(アウァーリクムは)</small>ほぼあらゆる方向から川や沼地で囲まれており、
*unum habeat et [[wikt:en:perangustus#Latin|perangustum]] [[wikt:en:aditus#Latin|aditum]].
**一つだけ、非常に狭い進入路を持っているからだ。
[[画像:Bourges_2.JPG|thumb|right|300px|アウァーリクムすなわち[[w:ブールジュ|ブールジュ]]の大聖堂から眺めた沼地。イェーヴル川([[w:fr:Yèvre (Cher)|fr:Yèvre]])と沼地は、カエサルが書いたようにガッリア時代からこの街を囲んでいる。]]
:
; アウァーリクムの防衛が認められる
*<!--❻--><sup>(6)</sup> [[wikt:en:datur#Latin|Datur]] [[wikt:en:petens#Latin|petentibus]] [[wikt:en:venia#Latin|venia]]
**<small>(アウァーリクムの防衛を)</small>求める者たちに許可が与えられる。
*[[wikt:en:dissuadens#Latin|dissuadente]] primo [[wikt:en:Vercingetorix#Latin|Vercingetorige]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は当初は思い止まらせていたが、
*post [[wikt:en:concedens#Latin|concedente]] et [[wikt:en:prex#Latin|precibus]] ipsorum et [[wikt:en:misericordia#Latin|misericordia]] [[wikt:en:vulgus#Latin|vulgi]].
**後には、彼ら当人の懇願にも、民衆への哀れみにも、譲歩した。
*[[wikt:en:defensor#Latin|Defensores]] [[wikt:en:oppidum#Latin|oppido]] [[wikt:en:idoneus#Latin|idonei]] [[wikt:en:deliguntur|deliguntur]].
**城塞都市の適切な防衛者たちが選ばれる。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===16節===
*<span style="background-color:#ffd;">[[/注解/16節]] {{進捗|00%|2026-03-22}}</span>
;アウァーリクムをめぐる両軍の駆け引き
:
; ウェルキンゲトリークスが、アウァーリクムから16マイル離れたところに宿営する
*<!--❶--><sup>(1)</sup> [[wikt:en:Vercingetorix#Latin|Vercingetorix]] [[wikt:en:minor#Latin|minoribus]] Caesarem [[wikt:en:iter#Latin|itineribus]] [[wikt:en:subsequitur|subsequitur]]
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、カエサルを緩やかな行軍で追尾して、
*et locum [[wikt:en:castra#Latin|castris]] [[wikt:en:eligit#Latin|deligit]] [[wikt:en:palus#Latin|paludibus]] [[wikt:en:silva#Latin|silvis]]<nowiki>que</nowiki> [[wikt:en:munitus#Latin|munitum]]
**沼地や森林で防御された地点を陣営のために選んだ。
*ab [[wikt:en:Avaricum#Latin|Avarico]] longe milia passuum [[wikt:en:sedecim#Latin|sedecim]]<sub> (XVI)</sub>.
**アウァーリクムから16<u>ローママイル</u>隔たっていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ミーッレ・パッスーム、ミーリア(ローママイル)|ローママイル]]は約1.48 kmで、16マイルは約24 km)</span>
:
; ウェルキンゲトリークスが、斥候を放ってアウァーリクムを探り、部下たちに指図する
*<!--❷--><sup>(2)</sup> Ibi per [[wikt:en:certus#Latin|certos]] [[wikt:en:explorator#Latin|exploratores]]
**そこで、一定の斥候たちを通して、
*in [[wikt:en:singulus#Latin|singula]] diei tempora, quae ad [[wikt:en:Avaricum#Latin|Avaricum]] <u>agerentur</u>, [[wikt:en:cognoscebat|cognoscebat]]
**日中の毎時、アウァーリクム近傍で行なわれていることを探知して、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:agerentur|agerentur]] だが、<br> β系写本では [[wikt:en:gererentur|gererentur]] となっている。)</span>
*et, [[wikt:en:quis#Latin|quid]] [[wikt:en:fieri#Latin|fieri]] [[wikt:en:vellet#Latin|vellet]], [[wikt:en:imperabat|imperabat]].
**<small>(彼自身が)</small>なされることを欲していることを<small>(麾下の者たちに)</small>命令していた。
:
; ウェルキンゲトリークスとローマ勢の糧秣調達をめぐる攻防
*<!--❸--><sup>(3)</sup> Omnes nostras [[wikt:en:pabulatio#Latin|pabulationes]] [[wikt:en:frumentatio#Latin|frumentationes]]<nowiki>que</nowiki> [[wikt:en:observabat|observabat]]
**我が方<small>〔ローマ勢〕</small>の[[w:糧秣|秣や糧食]]の徴発の一部始終を注視していて、
*[[wikt:en:dispersus#Latin|dispersos]]<nowiki>que</nowiki>, cum longius necessario [[wikt:en:procederent|procederent]], [[wikt:en:adoriebatur|adoriebatur]]
**<small>(ローマ勢が)</small>分散して、やむを得ずにはるか遠くに進み出たときに、<small>(ガッリア勢が)</small>襲いかかって、
*[[wikt:en:magnus#Latin|magno]]<nowiki>que</nowiki> [[wikt:en:incommodum#Latin|incommodo]] [[wikt:en:adficiebat|adficiebat]],
**<small>(ローマ勢に)</small>大きな損害を与えていた。
*[[wikt:en:etsi#Latin|etsi]], quantum [[wikt:en:ratio#Latin|ratione]] [[wikt:en:provideri|provideri]] [[wikt:en:poterat|poterat]], ab nostris [[wikt:en:occurrebatur|occurrebatur]],
**とはいえ、できるかぎり用心する判断により<small>(敵の襲撃を)</small>我が方<small>〔ローマ勢〕</small>によって阻止していた。
*ut [[wikt:en:incertus#Latin|incertis]] temporibus [[wikt:en:diversus#Latin|diversis]]<nowiki>que</nowiki> itineribus [[wikt:en:iretur|iretur]].
**不確定な時間帯にまったく別々の道を行き来するというように。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===17節===
[[画像:Carte_du_Cher.svg|thumb|right|250px|アウァーリクム、すなわち現在の[[w:ブールジュ|ブールジュ市]](Bourges)のあるフランス・[[w:シェール県|シェール県]]の地図。中心にブールジュがあり、右下(南東)のラ・ゲルシュ=スュル=ローボワ([[w:en:La Guerche-sur-l'Aubois|La Guerche-sur-l'Aubois]])の近辺にボイイー族の首邑ゴルゴビナ(Gorgobina)があったと推定されている。右(東)隣の[[w:ニエーヴル県|ニエーヴル県]](Nièvre)が[[w:ハエドゥイ族|ハエドゥイー族]]の版図であった。]]
*<span style="background-color:#ffd;">[[/注解/17節]] {{進捗|00%|2026-03-28}}</span>
;アウァーリクム攻囲に取りかかるローマ軍の糧秣欠乏
:
; カエサルが、アウァーリクム攻囲のための堡塁工事に着手
*<!--❶--><sup>(1)</sup> [[wikt:en:castra#Latin|Castris]] ad eam partem [[wikt:en:oppidum#Latin|oppidi]] [[wikt:en:positus#Participle|positis]] Caesar,
**カエサルは、[[w:オッピドゥム|城塞都市]]の<small>(以下に述べるような)</small>方面に陣営を設置して、
*quae [[wikt:en:intermissus#Latin|intermissa]] a flumine et a <u>paludibus</u>
**──<small>(その方面は)</small>川や沼地により<small>(外部から)</small>遮断されて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:paludibus|paludibus]] だが、<br> β系写本では [[wikt:en:palude#Latin|palude]] となっている。)</span>
*[[wikt:en:aditus#Noun_3|aditum]], ut supra [[wikt:en:diximus#Latin|diximus]], [[wikt:en:angustus#Latin|angustum]] [[wikt:en:habebat|habebat]],
**<u>前に述べたように</u>、狭い進入路を持っているというものであるが、──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#15節|15節]]⑤項では、<br> ほぼあらゆる方向から川や沼地で囲まれており、<br> 一つだけ、非常に狭い進入路を持っている、<br> と言及された。)</span>
*[[wikt:en:agger#Latin|aggerem]] [[wikt:en:apparare#Latin|apparare]],
**<small>(さらに)</small><ruby><rb>[[w:土塁|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby> を装備すること、
*[[wikt:en:vinea#Latin|vineas]] [[wikt:en:ago#Latin|agere]],
**<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby> を駆動すること、
*[[wikt:en:turris#Latin|turres]] duas [[wikt:en:constituo#Latin|constituere]] [[wikt:en:coepit|coepit]];
**2つの<ruby><rb>[[w:攻城塔|攻城櫓]]</rb><rp>(</rp><rt>トゥッリス</rt><rp>)</rp></ruby> を建てること、を始めた。
*nam [[wikt:en:circumvallo#Latin|circumvallare]] loci natura [[wikt:en:prohibebat|prohibebat]].
**なぜなら<small>(城塞都市を)</small>堡塁で囲むことを地勢が妨げていたからだ。
<div style="text-align:center;">
{|
|-
|[[画像:Caesar's Gallic war; (Allen and Greenough's ed.) (1898) (14781415375).jpg|thumb|right|350px|城壁(図中の左端)を攻略するために築かれた<ruby><rb>土塁</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby> の復元画([[ガリア戦記_第2巻#12節|第2巻12節]]で既出)。左上には、両軍の<ruby><rb>[[w:攻城塔|攻城櫓]]</rb><rp>(</rp><rt>トゥッリス</rt><rp>)</rp></ruby>が描かれている。]]
|[[画像:Bender - Vinea.JPG|thumb|right|350px|<ruby><rb>工作小屋</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby> [[wikt:en:vinea|vinea]] の復元画([[ガリア戦記_第2巻#12節|第2巻12節]]で既出)。敵の矢玉などから身を守りながら城壁に近づくために用いられたと考えられている。]]
|}
</div>
:
; カエサルが、同盟者であるボイイー族やハエドゥイー族に、糧秣徴発を促す
*<!--❷--><sup>(2)</sup> De re [[wikt:en:frumentarius#Adjective|frumentaria]]
**<small>(カエサルは)</small>[[w:糧秣|糧秣]]調達について、
*[[wikt:en:Boii#Latin|Boios]] atque [[wikt:en:Haedui#Latin|Haeduos]] [[wikt:en:adhortari|adhortari]] non [[wikt:en:destitit|destitit]];
**[[w:ボイイ族|ボイイー族]]や[[w:ハエドゥイ族|ハエドゥイー族]]を鼓舞することを止めなかった。
*quorum [[wikt:en:alter#Latin|alteri]], quod [[wikt:en:nullus#Determiner|nullo]] [[wikt:en:studium#Latin|studio]] [[wikt:en:agebant|agebant]], non multum [[wikt:en:adiuvabant|adiuvabant]],
**彼らのうち一方<small>〔ハエドゥイー族〕</small>は、何らの努力を行なわなかったので、あまり助けにならなかった。
*[[wikt:en:alter#Latin|alteri]] non magnis [[wikt:en:facultas#Latin|facultatibus]], quod [[wikt:en:civitas#Latin|civitas]] erat [[wikt:en:exiguus#Latin|exigua]] et [[wikt:en:infirmus#Latin|infirma]],
**他方<small>〔ボイイー族〕</small>は、貧弱かつ無力な部族であったので、大した貯えもなく、
*celeriter quod [[wikt:en:habuerunt|habuerunt]] [[wikt:en:consumpserunt|consumpserunt]].
**早々と持っていたものを消費し切ってしまった。
:
; 糧秣の欠乏が続くが、ローマの将兵たちが耐え抜く
*<!--❸--><sup>(3)</sup> [[wikt:en:summus#Latin|Summa]] [[wikt:en:difficultas#Latin|difficultate]] rei [[wikt:en:frumentarius#Adjective|frumentariae]] [[wikt:en:adfectus#Latin|adfecto]] [[wikt:en:exercitus#Noun|exercitu]]
**<small>(ローマ人の)</small>軍隊は糧秣調達の大いなる困難さに苦悩させられながらも、
*[[wikt:en:tenuitas#Latin|tenuitate]] [[wikt:en:Boii#Latin|Boiorum]],
**──<small>(その困難は)</small>ボイイー族の微力さ、
*[[wikt:en:indiligentia#Latin|indiligentia]] [[wikt:en:Haedui#Latin|Haeduorum]],
**ハエドゥイー族の怠慢、
*[[wikt:en:incendium#Latin|incendiis]] [[wikt:en:aedificium#Latin|aedificiorum]],
**<small>(敵勢による)</small>家屋の焼き打ちによるものであったが、──
*usque eo ut [[wikt:en:complures#Determiner|complures]] dies [[wikt:en:frumentum#Latin|frumento]] [[wikt:en:miles#Latin|milites]] [[wikt:en:caruerint|caruerint]]
**かなりの日々にわたって兵士たちは糧食を欠くまでになり、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:usque#Latin|usque]] eo ut ~「~まで」)</span>
*et [[wikt:en:pecus#Latin|pecore]] ex [[wikt:en:longinquior#Latin|longinquioribus]] [[wikt:en:vicus#Latin|vicis]] [[wikt:en:adactus#Latin|adacto]]
**かなり遠方の村々から家畜を駆り立てたので
*[[wikt:en:extremus#Latin|extremam]] [[wikt:en:fames#Latin|famem]] [[wikt:en:sustentarent|sustentarent]],
**極限の飢えに耐え通すまでになったのであるが、
*[[wikt:en:nullus#Determiner|nulla]] tamen <u>vox est ab iis</u> [[wikt:en:auditus#Latin|audita]] populi Romani [[wikt:en:maiestas#Latin|maiestate]] et [[wikt:en:superior#Latin|superioribus]] [[wikt:en:victoria#Latin|victoriis]] [[wikt:en:indignus#Latin|indigna]].
**しかしながら、ローマ人民の威厳やかつての勝利にふさわしからぬ声は、彼らから何ら聞かれなかった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:vox#Latin|vox]] est <u>ab</u> iis だが、<br> β系写本では <u>ex</u> iis vox est となっている。)</span>
:
; ローマ人将兵たちがカエサルに攻囲の継続を訴える
*<!--❹--><sup>(4)</sup> [[wikt:en:quin#Latin|Quin]] etiam Caesar cum in [[wikt:en:opus#Latin|opere]] [[wikt:en:singulus#Latin|singulas]] [[wikt:en:legio#Latin|legiones]] [[wikt:en:appellaret|appellaret]],
**いやそればかりか、カエサルが作業中のそれぞれの[[w:ローマ軍団|軍団]]に呼びかけたとき、
*et, si [[wikt:en:acerbe#Latin|acerbius]] [[wikt:en:inopia#Latin|inopiam]] [[wikt:en:ferrent#Latin|ferrent]], se [[wikt:en:dimissurus#Latin|dimissurum]] <span style="color:#009900;"><sub>(esse)</sub></span> [[wikt:en:oppugnatio#Latin|oppugnationem]] [[wikt:en:diceret|diceret]],
**もし、とても過酷に欠乏に耐えているのならば、自分は攻囲を放棄するであろう、とカエサルが言っていたときに、
:
*<!--❺--><sup>(5)</sup> [[wikt:en:universi#Latin|universi]] ab eo, ne id [[wikt:en:faceret|faceret]], [[wikt:en:petebant|petebant]] :
**<small>(各軍団の)</small>一同は、彼<small>〔カエサル〕</small>に、それ<small>〔攻囲の放棄〕</small>をしないように求めていた。
*sic se complures annos illo [[wikt:en:imperans#Latin|imperante]] [[wikt:en:meruisse|meruisse]],
**自分たちは<small>(以下のように)</small>幾年にもわたって彼<small>〔カエサル〕</small>の麾下で努めてきた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:sic ~ ut …「…のように~である」)</span>
*ut [[wikt:en:nullus#Determiner|nullam]] [[wikt:en:ignominia#Latin|ignominiam]] [[wikt:en:acciperent|acciperent]], <u>nusquam incepta</u> re [[wikt:en:discederent|discederent]]:
**何ら不名誉を蒙ってないし、事<small>〔戦役〕</small>が完遂されないまま<small>(戦列を)</small>離脱することは決してなかったのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:nusquam#Latin|nusquam]] [[wikt:en:inceptus#Latin|incepta]] だが、<br> β系写本では [[wikt:en:numquam#Latin|numquam]] [[wikt:en:infectus#Adjective|infecta]] となっている。)</span>
:
*<!--❻--><sup>(6)</sup> hoc se [[wikt:en:ignominia#Latin|ignominiae]] <u>loco [[wikt:en:laturus#Latin|laturos]]</u> <span style="color:#009900;"><sub>(esse)</sub></span>, si [[wikt:en:inceptus#Latin|inceptam]] [[wikt:en:oppugnatio#Latin|oppugnationem]] [[wikt:en:reliquissent|reliquissent]];
**もし<small>(自分たちが)</small>着手した攻囲を放棄してしまったならば、自分たちはこの状態を不名誉と見なすであろう。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系写本では loco laturos の語順だが、<br> α系写本では laturos loco の語順となっている。)</span>
:
*<!--❼--><sup>(7)</sup> <u>praestare</u> omnes [[wikt:en:perferre|perferre]] [[wikt:en:acerbitas#Latin|acerbitates]],
**あらゆる厳しさに持ちこたえることは<small>(以下のこと)</small>よりましである。
**:<span style="color:#009900;">(訳注:[[wikt:en:praestare|praestare]] ~ [[wikt:en:quam#Adverb|quam]] …「…よりも~がより優る」)</span>
*<u>quam</u> non [[wikt:en:civis#Latin|civibus]] Romanis, qui [[wikt:en:Genabum#Latin|Cenabi]] [[wikt:en:perfidia#Latin|perfidia]] Gallorum [[wikt:en:interissent|interissent]], [[wikt:en:parentarent|parentarent]].
**ケナブムでガッリア人たちの不義により滅びたローマ市民たちの仇討ちをしないよりも。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#3節|3節]]①項を参照。仇討ちをしないのなら、苦しむ方がましである、の意)</span>
:
*<!--❽--><sup>(8)</sup> Haec [[wikt:en:idem#Latin|eadem]] [[wikt:en:centurio#Latin|centurionibus]] [[wikt:en:tribunus#Latin|tribunis]]<nowiki>que</nowiki> [[wikt:en:miles#Latin|militum]]
**これらと同じことを、<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby>たちや<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>たちに、
*[[wikt:en:mandabant|mandabant]], ut per eos ad Caesarem [[wikt:en:deferrentur|deferrentur]].
**彼らを通じてカエサルに申し立てるように、依頼していた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===18節===
*<span style="background-color:#ffd;">[[/注解/18節]] {{進捗|00%|2026-04-13}}</span>
;カエサルがウェルキンゲトリークス不在の敵陣へ迫る
:
; カエサルは、ウェルキンゲトリークスが糧秣の欠乏によりローマ勢の糧秣徴発隊を襲撃に向かったと知る
*<!--❶--><sup>(1)</sup> Cum iam [[wikt:en:murus#Latin|muro]] [[wikt:en:turris#Latin|turres]] [[wikt:en:adpropinquassent#Latin|adpropinquassent]],
**すでに<small>(アウァーリクムの)</small>城壁に<small>(ローマ勢の)</small>[[w:攻城塔|攻城櫓]]が近づいていた際に、
*ex [[wikt:en:captivus#Noun|captivis]] Caesar [[wikt:en:cognovit#Latin|cognovit]],
**カエサルは、捕虜たちから<small>(以下のことを)</small>知った。
*[[wikt:en:Vercingetorix#Latin|Vercingetorigem]], [[wikt:en:consumptus#Latin|consumpto]] [[wikt:en:pabulum#Latin|pabulo]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は[[w:糧秣|糧秣]]を消費し切ると、
*castra [[wikt:en:movisse#Latin|movisse]] propius [[wikt:en:Avaricum#Latin|Avaricum]],
**陣営をアウァーリクムのより近くに移動させて、
*atque ipsum cum [[wikt:en:equitatus#Latin|equitatu]] [[wikt:en:expeditus#Noun|expeditis]]<nowiki>que</nowiki>, qui inter [[wikt:en:eques#Latin|equites]] [[wikt:en:proeliari#Verb|proeliari]] [[wikt:en:consuessent#Latin|consuessent]],
**彼自身は、[[w:騎兵|騎兵]]隊、および騎兵たちの間で争闘することに習熟していた[[w:軽装歩兵|軽装歩兵]]たちとともに、
*<u>insidiarum</u> causa eo [[wikt:en:profectus#Etymology_3|profectum]], quo nostros postero die [[wikt:en:pabulatum#Verb|pabulatum]] [[wikt:en:venturus#Latin|venturos]] [[wikt:en:arbitraretur#Latin|arbitraretur]].
**我が方<small>〔ローマ勢〕</small>が翌日に糧秣徴発にやって来るであろうと思われるところで待ち伏せするために、出発した、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:insidiarum|insidiarum]] だが、<br> β系写本では [[wikt:en:insidiandi#Latin|insidiandi]] となっている。)</span>
[[画像:AVARICUM Battaglia 52 aC.png|thumb|right|300px|アウァーリクム攻略戦の布陣図(<small>イタリア語</small>)。中央がアウァーリクム(AVARICUM)、右下の赤枠内がカエサルと8個軍団の陣営、赤い矢印の先端がローマ軍の土塁。左上の楕円形がウェルキンゲトリークスが移動させた陣営。]]
[[画像:Funerary chariot in the archeological museum of Strasbourg.jpg|thumb|right|300px|[[w:ハルシュタット文化|ハルシュタット文化]]の墳墓の副葬品として発掘された '''四輪荷馬車''' のレプリカ(仏ストラスブール考古学博物館)。]]
:
*<!--❷--><sup>(2)</sup> Quibus rebus [[wikt:en:cognitus#Participle|cognitis]]
**<small>(カエサルは)</small>それらの事情を知るや、
*media nocte [[wikt:en:silentium#Latin|silentio]] [[wikt:en:profectus#Etymology_3|profectus]]
**真夜中の静けさのうちに出発して、
*ad hostium castra [[wikt:en:mane#Adverb_2|mane]] [[wikt:en:pervenit#Etymology_2|pervenit]].
**敵の陣営の辺りへ朝方に到着した。
:
*<!--❸--><sup>(3)</sup> Illi, celeriter per [[wikt:en:explorator#Latin|exploratores]] [[wikt:en:adventus#Latin|adventu]] Caesaris [[wikt:en:cognitus#Participle|cognito]]
**あの者たちは、速やかに斥候たちを通じてカエサルの到来を知るや、
*<u>carros</u> [[wikt:en:impedimentum#Latin|impedimenta]]<nowiki>que</nowiki> sua in [[wikt:en:artior#Latin|artiores]] [[wikt:en:silva#Latin|silvas]] [[wikt:en:abdiderunt#Latin|abdiderunt]],
**自分たちの<u>四輪荷馬車</u>と[[w:輜重|輜重]]をとても深い森の中に隠して、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:四輪荷馬車 [[wikt:en:carrus#Latin|carrus]] は、例えば右の画像のものを参照。)</span>
*copias omnes in loco [[wikt:en:editus#Latin|edito]] atque [[wikt:en:apertus#Latin|aperto]] [[wikt:en:instruxerunt#Latin|instruxerunt]].
**全軍勢を高くそびえて開けている場所に配置した。
:
*<!--❹--><sup>(4)</sup> Qua re [[wikt:en:nuntiatus#Latin|nuntiata]]
**その事を報告されて、
*Caesar celeriter [[wikt:en:sarcina#Latin|sarcinas]] [[wikt:en:conferri#Latin|conferri]],
**カエサルは速やかに<small>(兵士たちの)</small>[[w:背嚢|背嚢]]が運び集められること、
*[[wikt:en:arma#Latin|arma]] [[wikt:en:expediri#Latin|expediri]] [[wikt:en:iussit#Verb|iussit]].
**武具が<small>(すぐ使えるように)</small>整えられることを命じた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===19節===
*<span style="background-color:#ffd;">[[/注解/19節]] {{進捗|00%|2026-04-20}}</span>
;丘の上のガッリア勢と沼沢を挟んで対峙する
:
; ガッリア勢の陣営の地勢
*<!--❶--><sup>(1)</sup> [[wikt:en:collis#Latin|Collis]] erat <u>leniter</u> ab [[wikt:en:infimus#Latin|infimo]] [[wikt:en:adclivis#Latin|adclivis]].
**<small>(ガッリア勢がいる)</small>丘陵はふもとから緩やかに、登り坂になっていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系・χ系・B・M・S・N<sup>c</sup> 写本では [[wikt:en:leviter#Latin|leviter]] 、<br> L・N写本では [[wikt:en:breviter#Latin|breviter]] だが、<br> より劣った写本 ''[[ガリア戦記/注解編/写本と校訂版#クリティカル・アパラトゥスとその略号|codd.deter.]]'' では [[wikt:en:leniter#Latin|leniter]] となっている。
*Hunc ex omnibus fere partibus [[wikt:en:palus#Latin|palus]] [[wikt:en:difficilis#Latin|difficilis]] atque [[wikt:en:impeditus#Latin|impedita]] [[wikt:en:cingebat#Latin|cingebat]]
**これ<small>〔丘陵〕</small>を、ほぼすべての方角から、不便で通りにくい沼地が取り巻いていて、
*non [[wikt:en:latior#Latin|latior]] [[wikt:en:pes#Latin|pedibus]] [[wikt:en:quinquaginta#Latin|quinquaginta]].
**<small>(その沼地は)</small>50<u>[[w:ペース (長さ)|ペース]]</u>より幅広くなかった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、50ペースは約15メートル弱。)</span>
:
; 丘の周囲を部族ごとに分かれて守備している
*<!--❷--><sup>(2)</sup> Hoc se [[wikt:en:collis#Latin|colle]] [[wikt:en:interruptus#Latin|interruptis]] [[wikt:en:pons#Latin|pontibus]]
**この丘陵において、橋梁を破却すると、
*Galli [[wikt:en:fiducia#Latin|fiducia]] loci [[wikt:en:continebant#Latin|continebant]]
**ガッリア人たちは、地勢を頼りに留まっていて、
*[[wikt:en:generatim#Latin|generatim]]<nowiki>que</nowiki> [[wikt:en:distributus#Latin|distributi]] in civitates
**<small>(軍勢を)</small>諸部族の種族ごとに分けて配置させて、
*omnia [[wikt:en:vadum#Latin|vada]] ac [[wikt:en:saltus#Etymology_2|saltus]] eius [[wikt:en:palus#Latin|paludis]] <u>certis custodiis</u> [[wikt:en:obtinebant#Latin|obtinebant]],
**その沼地の、すべての浅瀬や隘路を <u>一定の護衛兵たちによって</u> 占領していた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:certus#Latin|certis]] [[wikt:en:custodia#Latin|custodiis]] は β系写本の記述で、α系写本にはない。)</span>
*<u>sic</u> animo [[wikt:en:paratus#Latin|parati]] <u>ut</u>, si eam [[wikt:en:palus#Latin|paludem]] Romani [[wikt:en:perrumpo#Latin|perrumpere]] [[wikt:en:conarentur#Latin|conarentur]], [[wikt:en:haesitans#Latin|haesitantes]] [[wikt:en:premerent#Latin|premerent]] ex loco [[wikt:en:superior#Latin|superiore]];
**もしローマ勢がその沼地を強行突破せんと試みたならば、ぐずぐずしている者らを高地から圧倒する心積もりであった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:sic#Latin|sīc]] ~, [[wikt:en:ut#Latin|ut]] ・・・「…であるように~である」)</span>
:
; 両軍は互角か?
*<!--❸--><sup>(3)</sup> ut, qui [[wikt:en:propinquitas#Latin|propinquitatem]] loci [[wikt:en:videret#Latin|videret]],
**<small>(両軍の)</small>陣地が近接していることを見た者は、
*[[wikt:en:paratus#Latin|paratos]] prope [[wikt:en:aequus#Latin|aequo]] <u>Marte</u> ad [[wikt:en:dimicandum#Latin|dimicandum]] [[wikt:en:existimaret#Latin|existimaret]],
**<small>(ガッリア勢がローマ勢に対して)</small>ほぼ互角の戦い<small>(の条件)</small>で闘うつもりでいると考えただろう。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、[[wikt:en:Mars#Proper_noun_22|Mars]]「戦争の神マールス」ではなく、<br> [[wikt:en:Mars#Noun_4|Mars]]「戦争、闘い」そのものを指す。)</span>
; ガッリア勢は不利なのに虚勢を張っているのか?
*qui [[wikt:en:iniquitas#Latin|iniquitatem]] [[wikt:en:condicio#Latin|condicionis]] [[wikt:en:perspiceret#Latin|perspiceret]],
**<small>(ガッリア勢の)</small>条件の不利なことを見通した者は、
*[[wikt:en:inanis#Latin|inani]] [[wikt:en:simulatio#Latin|simulatione]] sese [[wikt:en:ostentare#Latin|ostentare]] [[wikt:en:cognosceret#Latin|cognosceret]].
**<small>(ガッリア勢が)</small>虚栄の見せかけで己を誇示していることを、理解しただろう。
:
; カエサルが、至近距離の敵への攻撃にいきり立つ将兵らを教え諭す
*<!--❹--><sup>(4)</sup> [[wikt:en:indignans#Latin|Indignantes]] [[wikt:en:miles#Latin|milites]] Gaesar,
**カエサルは<small>(ガッリア勢の誇示に)</small>憤慨している兵士たちに、
*quod [[wikt:en:conspectus#Noun_2|conspectum]] suum hostes <u>perferre</u> [[wikt:en:possent#Latin|possent]] [[wikt:en:tantulus#Latin|tantulo]] [[wikt:en:spatium#Latin|spatio]] [[wikt:en:interiectus#Latin|interiecto]],
**──というのも、これほどのわずかな距離しか介在してないのに、敵勢が自分らを<small>(平然と)</small>見据えていられるためだが──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:perferre#Latin|perferre]] だが、β系写本では [[wikt:en:ferre#Latin|ferre]] となっている。)</span>
*et signum proelii [[wikt:en:exposcens#Latin|exposcentes]] [[wikt:en:edocet#Latin|edocet]],
**および戦闘の合図を熱心に求めている者たちに対して<small>(以下のように)</small>説く。
*[[wikt:en:quantus#Latin|quanto]] [[wikt:en:detrimentum#Latin|detrimento]] et [[wikt:en:quot#Latin|quot]] [[wikt:en:vir#Latin|virorum]] [[wikt:en:fortis#Latin|fortium]] [[wikt:en:mors#Latin|morte]] [[wikt:en:necesse#Adverb|necesse]] sit [[wikt:en:constare#Latin|constare]] [[wikt:en:victoria#Latin|victoriam]];
**勝利を確実にすることが、どれほどの損害と、どれほど多くの勇敢な<ruby><rb>兵士</rb><rp>(</rp><rt>ウィル</rt><rp>)</rp></ruby>たちの死を必要とするか、を。
: <!-- [[wikt:en:| -->
; 多くのローマ兵が死に瀕すれば、カエサル自身が戦争犯罪で弾劾されるだろう
*<!--❺--><sup>(5)</sup> quos cum <u>sic</u> [[wikt:en:animus#Latin|animo]] [[wikt:en:paratus#Latin|paratos]] [[wikt:en:videat#Latin|videat]], <u>ut</u> [[wikt:en:nullus#Determiner|nullum]] pro sua [[wikt:en:laus#Latin|laude]] [[wikt:en:periculum#Latin|periculum]] [[wikt:en:recusent#Latin|recusent]],
**彼ら<small>〔兵士たち〕</small>が己の賞賛のためにいかなる危険をも辞さない心積もりであると<small>(カエサルは)</small>見て取ったので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:sic#Latin|sīc]] ~, [[wikt:en:ut#Latin|ut]] ・・・「…であるように~である」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:pro sua laude 「自らの賞賛のために」は、「カエサルの賞賛のために」と解することもできる。<br> しかし、共和制国家に忠誠を誓っているはずの兵士らが、カエサル個人のために命を投げ出そうとする記述は、<br> 野心家カエサルが軍隊を私兵化しようとしている野望をさらけ出すことになり、政敵たちを利することになる。)</span>
*[[wikt:en:summus#Latin|summae]] se [[wikt:en:iniquitas#Latin|iniquitatis]] [[wikt:en:condemnari#Latin|condemnari]] [[wikt:en:debere#Latin|debere]], [[wikt:en:nisi#Conjunction|nisi]] eorum [[wikt:en:vita#Latin|vitam]] sua [[wikt:en:salus#Latin|salute]] [[wikt:en:habeat#Latin|habeat]] [[wikt:en:carior#Latin|cariorem]].
**<small></small>彼ら<small>〔兵士〕</small>の生命を己<small>〔カエサル〕</small>の安全より貴重と思わない限り、自分<small>〔カエサル〕</small>は極度の不正のために告発されるに違いない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:すでにサビーヌスら多くのローマ市民が戦死しており、ここでさらに多くのローマ市民を死なせることは、<br> カエサルから軍隊を取り上げることを主張していた政敵たちから厳しく糾弾されることになったであろう。)</span>
: <!-- [[wikt:en:| -->
*<!--❻--><sup>(6)</sup> Sic [[wikt:en:miles#Latin|milites]] [[wikt:en:consolatus#Latin|consolatus]]
**<small>(カエサルは)</small>このように兵士たちを<ruby><rb>宥</rb><rp>(</rp><rt>なだ</rt><rp>)</rp></ruby>めて、
*eodem die [[wikt:en:reducit#Latin|reducit]] in castra
**同日に陣営の中に連れ戻して、
*[[wikt:en:reliquus#Latin|reliqua]]<nowiki>que</nowiki> quae ad [[wikt:en:oppugnatio#Latin|oppugnationem]] <u>[[wikt:en:pertinebant#Latin|pertinebant]] [[wikt:en:oppidum#Latin|oppidi]]</u> [[wikt:en:administrare#Latin|administrare]] [[wikt:en:instituit#Latin|instituit]].
**城塞都市<small>〔アウァーリクム〕</small>の攻略に関わっているほかのことに従事することを決めた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、χ系・B・M・S写本では pertinebant oppidi の語順だが、<br> L・N・β系写本では oppidi pertinebant の語順となっている。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===20節===
*<span style="background-color:#ffd;">[[/注解/20節]] {{進捗|00%|2026-05-04}}</span>
;ウェルキンゲトリークスが味方に弁明し、捕虜に問い質す
:
*<!--❶--><sup>(1)</sup> [[wikt:en:Vercingetorix#Latin|Vercingetorix]], cum ad suos [[wikt:en:redisset#Latin|redisset]], [[wikt:en:proditio#Latin|proditionis]] [[wikt:en:insimulatus#Latin|insimulatus]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、味方のもとに戻った際に、<small>(以下のことで)</small>裏切りだと非難されていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:以下、[[wikt:en:quod#Conjunction|quod]] ~ で箇条書き。)</span>
*quod [[wikt:en:castra#Latin|castra]] [[wikt:en:propius#Latin|propius]] [[wikt:en:Romani#Latin|Romanos]] [[wikt:en:movisset#Latin|movisset]],
**陣営をローマ人たちのより近くに移動させていたこと、
*quod cum omni [[wikt:en:equitatus#Noun|equitatu]] [[wikt:en:discessisset#Latin|discessisset]],
**全[[w:騎兵|騎兵隊]]とともに<small>(陣営を)</small>離れていたこと、
*quod sine [[wikt:en:imperium#Latin|imperio]] [[wikt:en:tantus#Latin|tantas]] [[wikt:en:copiae#Latin|copias]] [[wikt:en:reliquisset#Latin|reliquisset]],
**司令権<small>(を持つ者)</small>なしに、これほど多くの軍勢を置き去りにしていたこと、
*quod eius [[wikt:en:discessus#Noun|discessu]] [[wikt:en:Romani#Latin|Romani]] [[wikt:en:tantus#Latin|tanta]] [[wikt:en:opportunitas#Latin|opportunitate]] et [[wikt:en:celeritas#Latin|celeritate]] [[wikt:en:venissent#Latin|venissent]];
**彼<small>〔ウェルキンゲトリークス〕</small>の退去によりローマ人がこれほどの好機とこれほどの迅速さでやって来ていたこと、である。
:
*<!--❷--><sup>(2)</sup> non haec omnia [[wikt:en:fortuito#Latin|fortuito]] aut sine [[wikt:en:consilium#Latin|consilio]] [[wikt:en:accido#Etymology_1|accidere]] [[wikt:en:potuisse#Latin|potuisse]];
**──これらすべてが偶然に、あるいは謀りごとなしに起こることはあり得なかったのだ。
*[[wikt:en:regnum#Latin|regnum]] illum Galliae <u>malle</u> Caesaris [[wikt:en:concessus#Noun|concessu]] <u>quam</u> ipsorum habere [[wikt:en:beneficium#Latin|beneficio]]
**彼<small>〔ウェルキンゲトリークス〕</small>は<small>(ガッリア人)</small>自身の厚遇を得ることよりもむしろカエサルの許しにより[[w:ガリア|ガッリア]]の王権<small>(を持つこと)</small>を好んでいるのだ。──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:malle#Latin|malle]] ~ quam …「…よりも、むしろ~を好む(選ぶ)」)</span>
**:<span style="color:#009900;">(訳注:ウェルキンゲトリークスが王権を望むあまり、同盟部族の生命をカエサルに売り渡したということである。)</span>
[[画像:Vercingetorix_stater_n2_CdM_alternate.jpg|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の横顔が刻まれたガッリアの金貨(パリの[[w:ビブリオテーク・ナショナル|仏国立図書館]]貨幣部蔵)]]
:
; ━━ウェルキンゲトリークスの弁明が始まる━━
*<!--❸--><sup>(3)</sup> [[wikt:en:talis#Latin|tali]] [[wikt:en:modus#Latin|modo]] [[wikt:en:accusatus#Latin|accusatus]]
**こんな風に非難されて、
*ad haec [[wikt:en:respondit#Latin|respondit]]:
**<small>(ウェルキンゲトリークスは)</small>これらのことへ答えた。
*Quod [[wikt:en:castra#Latin|castra]] [[wikt:en:movisset#Latin|movisset]],
**陣営を移動させていたことは、
*[[wikt:en:factus#Latin|factum]] [[wikt:en:inopia#Latin|inopia]] [[wikt:en:pabulum#Latin|pabuli]],
**[[w:糧秣|糧秣]]の欠乏によりなされたのであり、
*etiam ipsis [[wikt:en:hortans#Latin|hortantibus]];
**<small>(ガッリア人たち)</small>自身が熱心に勧めることさえしているのだ。
*quod [[wikt:en:propius#Latin|propius]] [[wikt:en:Romani#Latin|Romanos]] [[wikt:en:accessisset#Latin|accessisset]],
**ローマ人たちのより近くに近寄っていたことは、
*[[wikt:en:persuasus#Latin|persuasum]] loci [[wikt:en:opportunitas#Latin|opportunitate]], qui se <u>ipsum</u> [[wikt:en:munitio#Latin|munitione]] [[wikt:en:defenderet#Latin|defenderet]];
**<small>(移動先の丘陵が)</small>それ自体を<small>(沼地という天然の)</small>要害により守っているという地の利に納得させられたのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:上記の se <u>ipsum</u> munitione defenderet 「そのものを防御物によって守る」は主要写本 ω の記述で、<br>''[[ガリア戦記/注解編/写本と校訂版#Bentley,_Thomas|Th. Bentley]]'' は se <u>ipse sine</u> munitione defenderet 「そのものが防御物なしで守る」と修正提案している。)</span>
:
; 騎兵は、湿地帯での任務に適していない
*<!--❹--><sup>(4)</sup> [[wikt:en:eques#Latin|equitum]] vero [[wikt:en:opera#Latin|operam]]
**騎兵たちの働きはまさに、
*neque in loco [[wikt:en:paluster#Latin|palustri]] [[wikt:en:desiderari#Latin|desiderari]] [[wikt:en:debuisse#Latin|debuisse]]
**沼沢地において望まれるべきものではなかったし、
**:<span style="color:#009900;">(訳注:湿地・沼地では、ぬかるみに馬の足が取られるため、<br> 騎兵の長所である機動力が著しく低下し、<br> 速さを活かした偵察・突撃・迂回・追撃などがし難くなる。)</span>
*et [[wikt:en:illic#Adverb|illic]] fuisse [[wikt:en:utilis#Latin|utilem]], quo sint [[wikt:en:profectus#Participle_2|profecti]].
**<small>(騎兵たちが)</small>発って行ったところにおいては有効だったのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#16節|16節]]冒頭の説明によれば、<br> ウェルキンゲトリークスが最初に宿営した場所は、<br> アウァーリクムから16マイル離れ、沼地や森林に守られていた。<br> [[#19節|19節]]では、より近い、沼地に囲まれたゆるやかな丘陵に移動したという。<br> この移動前後の地勢の優劣を、カエサルは必ずしも明瞭に説明していない。)</span>
:
; 兵は拙速を尊ぶ
*<!--❺--><sup>(5)</sup> [[wikt:en:summa#Latin|Summam]] [[wikt:en:imperium#Latin|imperii]]
**<small>(軍勢の)</small>最高司令権は、
*se [[wikt:en:consulto#Adverb|consulto]] [[wikt:en:nullus#Latin|nulli]] [[wikt:en:discedens#Latin|discedentem]] [[wikt:en:tradidisse#Latin|tradidisse]],
**<small>(ウェルキンゲトリークス)</small>自らが意図的に、立ち去るに当たって、誰にも委託しなかった。
*[[wikt:en:ne#Latin|ne]] is [[wikt:en:multitudo#Latin|multitudinis]] [[wikt:en:studium#Latin|studio]] ad [[wikt:en:dimicandus#Latin|dimicandum]] [[wikt:en:impelleretur#Latin|impelleretur]];
**その者が大勢の熱意によって<small>(ローマ人と)</small>闘うことに駆り立てられないように、である。
*cui rei <u>propter animi [[wikt:en:mollities#Latin|mollitiem]]</u> [[wikt:en:studere#Latin|studere]] omnes [[wikt:en:videret#Latin|videret]],
**その事<small>〔闘って決着を付けること〕</small>を、<u>心の柔弱さのゆえに</u>、皆が求めたがっている。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:「心の柔弱さのゆえに、闘いがしたくなる」というのは、<br> 一見すると奇妙に感じられるが、ここでの柔弱さ([[wikt:en:mollities#Latin|mollities]])とは、<br> 長期の攻囲戦の労苦や疲弊に持ちこたえる忍耐力のなさを指し、<br> 長い苦難から逃避するために早期決戦を志向する心理を意味すると考えられる。)</span>
*quod [[wikt:en:diutius#Latin|diutius]] [[wikt:en:labor#Latin|laborem]] ferre non [[wikt:en:possent#Latin|possent]].
**──というのは、<small>(兵は)</small>より長く<small>(攻囲戦の)</small>労苦に耐えることができないからだ──。
**:<span style="color:#009900;"> (訳注:[[w:孫子 (書物)|孫子]]に曰く「兵は拙速を聞くも、未だ巧の久しきを<ruby><rb>睹</rb><rp>(</rp><rt>み</rt><rp>)</rp></ruby>ざるなり」<ref>[[wikt:en:故に兵は拙速を聞くも、未だ巧の久しきを睹ざるなり|故に兵は拙速を聞くも、未だ巧の久しきを睹ざるなり]]
「戦争というものは、拙劣に短期決戦を挑んだ事例は聞くが、巧妙に長期戦を続けた事例は聞かない」の意。長い戦争は人々を消耗させ、疲弊させてしまう。</ref>)</span>
:
; ローマ人は、闘わずに退却したではないか
*<!--❻--><sup>(6)</sup> Romani si [[wikt:en:casu#Latin|casu]] [[wikt:en:intervenerint#Latin|intervenerint]], [[wikt:en:fortuna#Latin|fortunae]],
**もしローマ人たちが偶然に現われたのならば、命運に<small>(感謝するべきであり)</small>、
*si [[wikt:en:alicuius#Latin|alicuius]] [[wikt:en:indicium#Latin|indicio]] [[wikt:en:vocatus#Latin|vocati]], huic [[wikt:en:habendus#Latin|habendam]] [[wikt:en:gratia#Latin|gratiam]],
**もし<small>(ローマ人たちが)</small>何者かの申し立てに呼ばれて来たのならば、その者に感謝するべきだ。
*quod <u>et</u> [[wikt:en:paucitas#Latin|paucitatem]] eorum ex loco [[wikt:en:superior#Latin|superiore]] [[wikt:en:cognosco#Latin|cognoscere]]
**──というのは、より高い位置から彼ら<small>〔ローマ人〕</small>の少なさを知ることも、
*<u>et</u> [[wikt:en:virtus#Latin|virtutem]] [[wikt:en:despicio#Latin|despicere]] [[wikt:en:potuerint#Latin|potuerint]],
**<small>(ローマ人の)</small>武勇とやらを見下すこともできたのだから。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et ~ et …「~も…も」)</span>
*qui [[wikt:en:dimico#Latin|dimicare]] non [[wikt:en:ausus#Participle|ausi]]
**彼ら<small>〔ローマ人〕</small>は闘うことをあえてせずに、
*[[wikt:en:turpiter#Latin|turpiter]] se in castra [[wikt:en:receperint#Latin|receperint]].
**見苦しくも陣営に退却したのだ──。
:
; ガッリア人が勝つのだから、カエサルに寝返るはずがない
*<!--❼--><sup>(7)</sup> [[wikt:en:imperium#Latin|Imperium]] se <u>ab</u> Caesare per [[wikt:en:proditio#Latin|proditionem]] [[wikt:en:nullus#Latin|nullum]] [[wikt:en:desidero#Latin|desiderare]],
**自分<small>〔ウェルキンゲトリークス〕</small>は、カエサルから裏切りを通じて、どのような司令権も望んではいない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:上の (2) 項では、味方のガッリア人たちは、ウェルキンゲトリークスが<br> カエサルにより [[wikt:en:regnum#Latin|regnum]](王権、支配権)を得ようとしていると非難したのに対し、<br> 彼は [[wikt:en:imperium#Latin|imperium]](軍隊司令権、または支配権)という言葉を巧妙に引きずって答えている。<br> もちろん、言葉を変えたのは、筆者カエサル自身であろう。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ab はα系写本の記述で、β系写本では a となっている。)</span>
*quod habere [[wikt:en:victoria#Latin|victoria]] [[wikt:en:posset#Latin|posset]],
**<small>(支配権は、ローマ人に対する)</small>勝利によって得られるものであり、
*quae iam esset sibi atque omnibus [[wikt:en:Galli#Latin|Gallis]] [[wikt:en:exploratus#Latin|explorata]];
**<small>(勝利は)</small>もはや自分とすべてのガッリア人にとって確実なものとされているのだ。
*quin etiam ipsis <u>remittere</u>,
**いやそればかりか<small>(以下の様であれば、ガッリア人たち)</small>自身に<small>(司令官職を)</small>返還しているだろう。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:remitto#Latin|remittere]] は、写本Sの記述および ''[[ガリア戦記/注解編/写本と校訂版#Stephanus_(Estienne)|Stephanus]]'' や ''[[ガリア戦記/注解編/写本と校訂版#Vascosanus|Vascosanus]]'' による修正提案で、<br> β系・χ系写本・写本B・M・L・N では [[wikt:en:remitteret#Latin|remitteret]] となっている。)</span>
*si sibi <u>magis</u> [[wikt:en:honor#Latin|honorem]] [[wikt:en:tribuo#Latin|tribuere]], <u>quam</u> ab se [[wikt:en:salus#Latin|salutem]] [[wikt:en:accipio#Latin|accipere]] [[wikt:en:videantur#Latin|videantur]].
**もし<small>(ガッリア人が)</small>自分から安全を受け取っているよりも、むしろ顕職を自分に授けていると思っているのならば、だが。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:magis#Latin|magis]] ~, quam …「…というよりは、むしろ~」)</span>
:
; 捕虜のローマ人たちに訊いてみなさい
*<!--❽--><sup>(8)</sup> <!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> Haec ut [[wikt:en:intellegatis#Latin|intellegatis]], <span style="color:#009900;">»</span> </span> [[wikt:en:inquit#Latin|inquit]], <!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> a me [[wikt:en:sincere#Latin|sincere]] [[wikt:en:pronuntiari#Latin|pronuntiari]], [[wikt:en:audite#Latin|audite]] [[wikt:en:Romanus#Adjective|Romanos]] [[wikt:en:miles#Latin|milites]]. <span style="color:#009900;">»</span> </span>
**「これらは諸君が理解しているように、私により率直に示された。ローマ兵たちに聞いてみよ」と言った。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:<!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> ~ <span style="color:#009900;">»</span> </span> の箇所は、直接話法で記されている。)</span>
:
*<!--❾--><sup>(9)</sup> [[wikt:en:producit#Latin|Producit]] [[wikt:en:servus#Latin|servos]], quos in [[wikt:en:pabulatio#Latin|pabulatione]] paucis ante diebus [[wikt:en:exceperat#Latin|exceperat]] et [[wikt:en:fames#Latin|fame]] [[wikt:en:vinculum#Latin|vinculis]]<nowiki>que</nowiki> [[wikt:en:excruciaverat#Latin|excruciaverat]].
**数日前に糧秣徴発しているのを<small>(彼が)</small>ひっ捕らえて、飢えと鎖で拷問していたところの奴隷たちを引き出す。
**:<span style="color:#009900;">(訳注:[[wikt:en:calo#Noun_5|cālō]] カーロー(軍属奴隷)と呼ばれる輜重や陣営を管理する奴隷たちのことであろう。)</span>
:
*<!--❿--><sup>(10)</sup> Hi iam ante [[wikt:en:edoctus#Latin|edocti]], quae [[wikt:en:interrogatus#Latin|interrogati]] [[wikt:en:pronuntiarent#Latin|pronuntiarent]],
**彼ら<small>〔奴隷〕</small>は、すでに前もって<small>(ガッリア勢から)</small>訊問された際に語ることを<small>(ローマ人から)</small>教え込まれており、
**:<span style="color:#009900;">(訳注:カエサルは奴隷たちが誰に教え込まれたのか明記していないため、<br> ウェルキンゲトリークスに教え込まれたと訳している場合もある。)</span>
*[[wikt:en:miles#Latin|milites]] se esse [[wikt:en:legionarius#Latin|legionarios]] [[wikt:en:dicunt#Latin|dicunt]];
**自分たちは[[w:軍団兵|軍団兵]]であると言った。
**:<span style="color:#009900;">(訳注:糧秣徴発に出かけていた者は、たとえ軍団兵でも軽装であったであろうが、<br> 奴隷たちは、もともと戦争で捕虜になったガッリア人たち等であったと考えられるので、<br> 地中海人種のローマ人とは容易に見分けが付きそうなものではある。)</span>
*[[wikt:en:fames#Latin|fame]] <u>et</u> [[wikt:en:inopia#Noun_2|inopia]] [[wikt:en:adductus#Latin|adductos]] [[wikt:en:clam#Latin|clam]] ex castris [[wikt:en:exisse#Latin|exisse]], si [[wikt:en:aliquis#Latin|quid]] [[wikt:en:frumentum#Latin|frumenti]] aut [[wikt:en:pecus#Latin|pecoris]] in agris [[wikt:en:reperio#Latin|reperire]] [[wikt:en:possent#Latin|possent]];
**<small>(奴隷たち曰く)</small>飢えと欠乏に動かされて、何か穀物または家畜が野に見出せないかと、ひそかに陣営から抜け出した。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et はα系写本の記述で、β系写本では atque となっている。)</span>
:
*<!--⓫--><sup>(11)</sup> [[wikt:en:similis#Latin|simili]] omnem [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:inopia#Noun_2|inopia]] [[wikt:en:premi#Latin|premi]],
**<small>(ローマ人の)</small>全軍隊が同様の欠乏に悩まされて、
*<u>nec</u> iam [[wikt:en:vis#Latin|vires]] [[wikt:en:sufficio#Latin|sufficere]] [[wikt:en:quisquam#Latin|cuiusquam]] <u>nec</u> ferre [[wikt:en:opus#Latin|operis]] [[wikt:en:labor#Latin|laborem]] posse;
**もはや<small>(兵士の)</small>誰もが十分な能力がなく、<small>(城攻めの)</small>作業の労苦に耐えることができない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:nec ~ nec …「~でもなく、…でもない」)</span>
*itaque [[wikt:en:statuisse#Latin|statuisse]] [[wikt:en:imperator#Latin|imperatorem]], si [[wikt:en:nihil#Latin|nihil]] in [[wikt:en:oppugnatio#Latin|oppugnatione]] oppidi <u>profecissent</u>, [[wikt:en:triduum#Latin|triduo]] [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:deduco#Latin|deducere]].
**こうして将軍<small>〔カエサル〕</small>は、もし城塞都市の攻略において何ら得られないならば、3日間で軍隊を連れ帰ると決めた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、写本S・L・Nでは [[wikt:en:profecissent#Latin|profecissent]]<sub> (3人称・<u>複数</u>・過去完了・接続法)</sub> だが、<br> β系写本では [[wikt:en:profecisset#Latin|profecisset]]<sub> (3人称・<u>単数</u>・過去完了・接続法)</sub> となっており、<br> χ系および写本B・Mでは proficissent という綴りになっている。)</span>
: <!-- [[wikt:en:| -->
*<!--⓬--><sup>(12)</sup> <!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> Haec, <span style="color:#009900;">»</span> </span> [[wikt:en:inquit#Latin|inquit]], <!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> a me, <span style="color:#009900;">»</span> </span> [[wikt:en:Vercingetorix#Latin|Vercingetorix]],
**「これぞ」「私によって」とウェルキンゲトリークスは言った。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:以下、<!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> ~ <span style="color:#009900;">»</span> </span> の箇所は、直接話法で記されている。)</span>
*<!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> [[wikt:en:beneficium#Latin|beneficia]] [[wikt:en:habetis#Latin|habetis]], quem [[wikt:en:proditio#Latin|proditionis]] [[wikt:en:insimulatis#Verb|insimulatis]];
**「裏切りだと諸君が糾弾している<small>(私という)</small>者のおかげで得ているのだ。
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> cuius [[wikt:en:opera#Latin|opera]] sine [[wikt:en:vester#Latin|vestro]] [[wikt:en:sanguis#Latin|sanguine]]
**その<small>(私という)</small>者の尽力により、諸君らの流血なしに、
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> tantum [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:victor#Latin|victorem]] [[wikt:en:fames#Latin|fame]] <u>paene</u> [[wikt:en:consumptus#Latin|consumptum]] [[wikt:en:videtis#Latin|videtis]];
**これほどの軍隊の勝利者<small>〔ローマ人〕</small>を飢えにより、ほとんど滅ぼしたのを諸君は見ているのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:paene は β系写本の記述で、α系写本にはない。)</span>
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> quem [[wikt:en:turpiter#Latin|turpiter]] se ex <u>hac</u> fuga [[wikt:en:recipiens#Latin|recipientem]]
**彼ら<small>〔ローマ人〕</small>が見苦しくもこのような逃亡から退却したところを、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:hac は β系写本の記述で、α系写本にはない。)</span>
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> ne [[wikt:en:aliqua#Pronoun|qua]] [[wikt:en:civitas#Latin|civitas]] suis finibus [[wikt:en:recipiat#Latin|recipiat]],
**<small>(それらの退却したローマ人を)</small>どの部族も自らの領土に受け入れないように、
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> a me [[wikt:en:provisus#Latin|provisum]] est. <span style="color:#009900;">»</span> </span>
**私<small>〔ウェルキンゲトリークス〕</small>により、手配された。」
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===21節===
*<span style="background-color:#ffd;">[[/注解/21節]] {{進捗|00%|2026-05-10}}</span>
;ウェルキンゲトリークスの誠心とアウァーリクムの重要性を確認
:
*<!--❶--><sup>(1)</sup> [[wikt:en:conclamat#Latin|Conclamat]] omnis [[wikt:en:multitudo#Latin|multitudo]]
**群集すべてが雄叫びを上げて、
*et suo [[wikt:en:mos#Latin|more]] [[wikt:en:arma#Latin|armis]] [[wikt:en:concrepat#Latin|concrepat]],
**自分たちの慣習で武具を打ち鳴らす。
*quod facere in eo [[wikt:en:consuerunt#Verb_2|consuerunt]], cuius [[wikt:en:oratio#Latin|orationem]] [[wikt:en:adprobant#Latin|adprobant]];
**<small>(演説した)</small>その者の雄弁に賛同したら、その者に対してそれをすることが常であったのだ。
*summum esse [[wikt:en:Vercingetorix#Latin|Vercingetorigem]] [[wikt:en:dux#Latin|ducem]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は最高の将帥であり、
*<u>nec</u> de eius [[wikt:en:fides#Latin|fide]] [[wikt:en:dubitandus#Latin|dubitandum]],
**彼の信義については疑念を抱くべきではなく、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:nec#Latin|nec]] ~, nec …「~でもないし、…でもない」)</span>
*<u>nec</u> [[wikt:en:maior#Latin|maiore]] [[wikt:en:ratio#Latin|ratione]] bellum [[wikt:en:administrari#Latin|administrari]] posse.
**これ以上の作戦で戦争を指導することはできない<small>(と、叫んで武具を打ち鳴らす)</small>。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:statuunt#Latin|Statuunt]], ut decem<sub> (X)</sub> milia hominum [[wikt:en:delectus#Latin|delecta]] ex omnibus [[wikt:en:copiae#Latin|copiis]] in oppidum <u>mittantur</u>,
**<small>(彼らは)</small>すべての軍勢から選り抜かれた兵員1万を<small>(アウァーリクムの)</small>[[w:オッピドゥム|城塞都市]]の中に派遣すると決定する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:mittantur#Latin|mittantur]] だが、<br> β系写本では [[wikt:en:submittantur#Latin|submittantur]] となっている。)</span>
:
*<!--❸--><sup>(3)</sup> nec [[wikt:en:solus#Latin|solis]] [[wikt:en:Bituriges#Latin|Biturigibus]] [[wikt:en:communis#Latin|communem]] [[wikt:en:salus#Latin|salutem]] [[wikt:en:committendus#Latin|committendam]] [[wikt:en:censent#Latin|censent]],
**<small>(ガッリア)</small>共通の安全をビトゥリゲース族だけに託すべきではないと考える。
*quod <u>penes eos</u>, si id oppidum [[wikt:en:retinuissent#Latin|retinuissent]],
**というのは、<u>彼らのもとで</u>、その城塞都市を維持したか否かが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> 主要写本ω では [[wikt:en:penes#Latin|penes]] eos 「彼らのもとで」だが、<br> オックスフォード写本 ''[[ガリア戦記/注解編/写本と校訂版#Codex_Oxoniensis_Andino|codd. Andino. Oxon.]]'' や ''[[ガリア戦記/注解編/写本と校訂版#Aldus|Aldus]]'' は paene in eo 「ほぼそのことにおいて」としている。)</span>
*[[wikt:en:summa#Latin|summam]] victoriae [[wikt:en:consto#Latin|constare]] [[wikt:en:intellegebant#Latin|intellegebant]].
**勝利の天王山を確かなものにすること、を理解していたからである。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===22節===
*<span style="background-color:#ffd;">[[/注解/22節]] {{進捗|00%|2026-06-01}}</span>
;アウァーリクムの籠城ガッリア勢が坑道戦で攻防に努める
:
*<!--❶--><sup>(1)</sup> [[wikt:en:singularis#Latin|Singulari]] [[wikt:en:miles#Latin|militum]] nostrorum [[wikt:en:virtus#Latin|virtuti]]
**我が方<small>〔ローマ勢〕</small>の兵士の卓越した武勇に、
*[[wikt:en:consilium#Latin|consilia]] [[wikt:en:quisque#Latin|cuiusque]] [[wikt:en:modus#Latin|modi]] [[wikt:en:Galli#Latin|Gallorum]] [[wikt:en:occurrebant#Latin|occurrebant]],
**<small>(敵勢は)</small>ガッリア人のあらゆる流儀の方策で抗戦していた。
*ut est summae [[wikt:en:genus#Latin|genus]] [[wikt:en:sollertia#Latin|sollertiae]]
**確かに<small>(ガッリア人は)</small>このうえなく器用な種族であり、
*atque ad [[wikt:en:omnia#Noun|omnia]] [[wikt:en:imitandus#Latin|imitanda]] et [[wikt:en:efficiendus#Latin|efficienda]], quae ab [[wikt:en:quisque#Latin|quoque]] [[wikt:en:traduntur#Latin|traduntur]], [[wikt:en:aptissimus#Latin|aptissimum]].
**誰かによって教えられることすべてを模倣すること、造り出すことにとても適しているのだ。
:
; 鉄鉱山の土地柄で、坑道戦を展開する
*<!--❷--><sup>(2)</sup> Nam <u>et</u> [[wikt:en:laqueus#Latin|laqueis]] [[wikt:en:falx#Latin|falces]] [[wikt:en:avertebant#Latin|avertebant]],
**すなわち、輪縄で<small>(ローマ勢の)</small>破城鎌をそらし、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et ~, et …「~でもあり、…でもある」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:破城鎌([[w:en:Falx|falx]])については、右図や[[ガリア戦記 第5巻#42節|第5巻42節]]を参照)</span>
[[画像:Falx_bgiu.png|thumb|right|250px|破城鎌([[w:en:Falx|falx]])の想像画(再掲)]]
[[画像:Doura_Europos_tunnel.jpg|thumb|right|250px|ローマ支配下の城砦跡に残る[[w:坑道|坑道]]の例(シリアの[[w:ドゥラ・エウロポス|ドゥラ・エウロポス]]遺跡)。[[w:サーサーン朝|サーサーン朝]]軍が[[w:坑道戦|坑道戦]]のために掘削したと考えられている。]]
*quas, cum [[wikt:en:destinaverant#Latin|destinaverant]],
**それを縛り付けておいてから、
*[[wikt:en:tormentum#Latin|tormentis]] [[wikt:en:introrsus#Latin|introrsus]] [[wikt:en:reducebant#Latin|reducebant]],
**巻揚げ機で<small>(城塞都市の)</small>内部に引き込んでいたし、
*<u>et</u> [[wikt:en:agger#Latin|aggerem]] [[wikt:en:cuniculus#Latin|cuniculis]] [[wikt:en:subtrahebant#Latin|subtrahebant]],
**<small>(ローマ勢の)</small><ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby> を[[w:坑道|坑道]]によって陥没させたりもした。
*<u>eo</u> [[wikt:en:scienter#Latin|scientius]]
**<small>(以下の理由により、彼らはそのことに)</small>より習熟しているのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:eo#Pronoun_5|eō]] ~ [[wikt:en:quod#Conjunction|quod]] …「…という理由で~」)</span>
*<u>quod</u> apud eos magnae sunt [[wikt:en:ferraria#Latin|ferrariae]]
**──というのも、彼らのもとには多くの[[w:鉄鉱石|鉄鉱]]山があり、
*atque [[wikt:en:omnis#Latin|omne]] [[wikt:en:genus#Latin|genus]] [[wikt:en:cuniculus#Latin|cuniculorum]] [[wikt:en:notus#Latin|notum]]
**坑道のあらゆる類いが知られていて
*atque [[wikt:en:usitatus#Latin|usitatum]] est.
**慣れていただけに<small>(習熟しているのだ)</small>。──
:
; アウァーリクムの全周に防御のための櫓を建てる
*<!--❸--><sup>(3)</sup> [[wikt:en:totus#Latin|Totum]] autem [[wikt:en:murus#Latin|murum]] ex omni parte
**他方で、城壁の全体をあらゆる方向から、
*[[wikt:en:turris#Latin|turribus]] [[wikt:en:contabulaverant#Latin|contabulaverant]]
**<ruby><rb>[[w:攻城塔|攻城櫓]]</rb><rp>(</rp><rt>トゥッリス</rt><rp>)</rp></ruby>を<small>(何層にも)</small>構築しておいて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:動詞 [[wikt:en:contabulo#Latin|contabulare]] は「板張りする」。[[内乱記_第2巻#9節|『内乱記』第2巻9節]]には [[wikt:en:contabulatio#Latin|contabulatio]]「床板張り」という単語が出て来る。)</span>
*atque has [[wikt:en:corium#Latin|coriis]] [[wikt:en:intexerant#Latin|intexerant]].
**これらを皮革で覆っていた。
:
*<!--❹--><sup>(4)</sup> Tum [[wikt:en:creber#Latin|crebris]] [[wikt:en:diurnus#Latin|diurnis]] [[wikt:en:nocturnus#Latin|nocturnis]]<nowiki>que</nowiki> [[wikt:en:eruptio#Latin|eruptionibus]]
**それから、たびたび昼間も夜間も出撃して、
*aut [[wikt:en:agger#Latin|aggeri]] [[wikt:en:ignis#Latin|ignem]] [[wikt:en:inferebant#Latin|inferebant]]
**あるいは土塁に火災を引き起こしたり、
*aut [[wikt:en:miles#Latin|milites]] [[wikt:en:occupatus#Latin|occupatos]] in [[wikt:en:opus#Latin|opere]] [[wikt:en:adoriebantur#Latin|adoriebantur]],
**あるいは工事に従事している<small>(ローマ人)</small>兵士たちを襲撃したりした。
[[画像:University_of_Queensland_Pitch_drop_experiment-white_bg.jpg|thumb|right|200px|<ruby><rb>[[w:ピッチ (樹脂)|樹脂]]</rb><rp>(</rp><rt>ピッチ</rt><rp>)</rp></ruby>の滴下実験の様子(豪州[[w:クイーンズランド大学|クイーンズランド大学]])。[[w:木材|木材]]を密閉加熱すると[[w:木炭|木炭]]が得られるが、その残り物から[[w:乾留液#木タール|木タール]]を[[w:蒸留|蒸留]]させた残り<ruby><rb>滓</rb><rp>(</rp><rt>かす</rt><rp>)</rp></ruby>がピッチである。樹木から得られるピッチは、黒色で[[w:粘度|粘っこく]]、高温で燃焼する。中世ヨーロッパでは城砦の防衛に使用され、城壁に近づく敵の上から熱したピッチを注いで焼死させたりしたという([[w:fr:Poix (matière)|fr:poix]])。]]
*et nostrarum [[wikt:en:turris#Latin|turrium]] [[wikt:en:altitudo#Latin|altitudinem]],
**我が方<small>〔ローマ勢〕</small>の[[w:攻城塔|攻城櫓]]の高さを、
*[[wikt:en:quantum#Latin|quantum]] has [[wikt:en:cotidianus#Latin|cotidianus]] agger [[wikt:en:expresserat#Latin|expresserat]],
**毎日のようにこれらを<small>(ローマ側の)</small>土塁が押し出した分だけ、
*[[wikt:en:commissus#Latin|commissis]] suarum [[wikt:en:turris#Latin|turrium]] [[wikt:en:malus#Noun_5|malis]] [[wikt:en:adaequabant#Latin|adaequabant]],
**自分たち<small>〔ガッリア勢〕</small>の櫓を、柱を組み立てることにより、<small>(ローマ側の櫓の高さと)</small>等しくしようとした。
:
*<!--❺--><sup>(5)</sup> et [[wikt:en:apertus#Latin|apertos]] [[wikt:en:cuniculus#Latin|cuniculos]]
**<small>(ローマ勢が掘削した)</small>坑道の露出したところを
*[[wikt:en:praeustus#Latin|praeusta]] et [[wikt:en:praeacutus#Latin|praeacuta]] [[wikt:en:materia#Latin|materia]]
**先端を焼いて尖らせた木材や、
*et [[wikt:en:pix#Latin|pice]] [[wikt:en:fervefactus#Latin|fervefacta]]
**熱した<ruby><rb>[[w:ピッチ (樹脂)|樹脂]]</rb><rp>(</rp><rt>ピッチ</rt><rp>)</rp></ruby>や、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:pix は<ruby><rb>[[w:歴青|瀝青]]</rb><rp>(</rp><rt>れきせい</rt><rp>)</rp></ruby>と訳されることもあるが、とくに[[w:ピッチ (樹脂)|ピッチ]]を指す<ref>[https://kotobank.jp/word/%E6%9C%A8%E3%81%9F%E3%83%BC%E3%82%8B-3173189 木タール] などを蒸留したあとに残る黒色の物質。</ref>。<br> [[w:歴青|瀝青]]は「ビチューメン」ともいい、ラテン語の [[wikt:en:bitumen#Latin|bitūmen]] に由来する。<br> [[w:ピッチ (樹脂)|ピッチ]]([[w:en:Pitch (resin)|Pitch]])は、ラテン語の [[wikt:en:pix#Latin|pix]] に由来する。)</span>
*et [[wikt:en:maximus#Latin|maximi]] [[wikt:en:pondus#Latin|ponderis]] [[wikt:en:saxum#Latin|saxis]] [[wikt:en:morabantur#Etymology_1|morabantur]]
**たいへんな重さの岩石で、<small>(ローマ勢の掘削を)</small>滞らせたり、
*[[wikt:en:moenia#Latin|moenibus]]<nowiki>que</nowiki> [[wikt:en:adpropinquo#Latin|adpropinquare]] [[wikt:en:prohibebant#Latin|prohibebant]].
**<small>(ローマ勢が)</small>城壁に接近することを<small>(ガッリア勢が)</small>妨げたりしていた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===23節===
{{Commons|Category:Murus gallicus|Murus gallicus}}
*<span style="background-color:#ffd;">[[/注解/23節]] {{進捗|00%|2026-06-14}}</span>
;ガッリア式城壁の構造
:
*<!--❶--><sup>(1)</sup> [[wikt:en:murus#Latin|Muri]] autem omnes [[wikt:en:Gallicus#Latin|Gallici]] hac fere [[wikt:en:forma#Latin|forma]] sunt.
**ところで、ガッリアの<ruby><rb>城壁</rb><rp>(</rp><rt>ムルス</rt><rp>)</rp></ruby>のすべては、ほぼ以下のような形態である。
:
; 木材を2ペースずつ等間隔で離して、ずっと並べていく
*<u>Trabes</u> [[wikt:en:derectus#Latin|derectae]] [[wikt:en:perpetuus#Latin|perpetuae]] <u>in longitudinem</u>
**<u><ruby><rb>木材</rb><rp>(</rp><rt>トラプス</rt><rp>)</rp></ruby></u>が<small>(城壁の)</small><u><ruby><rb>長手方向</rb><rp>(</rp><rt>ロンギトゥードー</rt><rp>)</rp></ruby></u>に、<small>(垂直に)</small>真っ直ぐに、ずっと続いて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:trabs#Latin|trabes]] は、とくに梁のような水平材を指していると思われる。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:in [[wikt:en:longitudo#Latin|longitudinem]] は、ここでは、城壁に沿った長手方向を指す。)</span>
[[画像:Murus gallicus de Lyon Fourvière - Maquette de Nicolas Hirsch - Service Archéologique de la Ville de Lyon - Détail structure.jpg|thumb|right|300px|ガッリア式城壁の[[w:ジオラマ|ジオラマ]](仏[[w:リヨン|リヨン市]]考古学局)。木材を約60cmの間隔で並べる。]]
*[[wikt:en:par#Latin|paribus]] [[wikt:en:intervallum#Latin|intervallis]], [[wikt:en:distans#Latin|distantes]] inter se [[wikt:en:binus#Latin|binos]] [[wikt:en:pes#Latin|pedes]],
**等間隔で、互いに2<u>ペース</u>ずつ離れて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、2ペースは約60 cm弱。)</span>
*in [[wikt:en:solum#Latin|solo]] [[wikt:en:conlocantur#Latin|conlocantur]].
**<ruby><rb>地面</rb><rp>(</rp><rt>ソルム</rt><rp>)</rp></ruby>に配置される。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:右の画像を参照。)</span>
:
; 木材をつなぎ合わせ、土砂を埋めて、石材をかぶせる
[[画像:2018 Rheinisches Landesmuseum Trier, Keltischer Wehrmauer.jpg|thumb|right|300px|同じく城壁のジオラマ(独[[w:トリーア|トリーア市]])。]]
*<!--❷--><sup>(2)</sup> [[wikt:en:hae#Latin|Hae]] [[wikt:en:revinciuntur#Latin|revinciuntur]] [[wikt:en:introrsus#Latin|introrsus]]
**これら<small>〔木材〕</small>は、内側で緊結されて、
**:<span style="color:#009900;">(訳注:明瞭な説明ではなく、肝心な記述が欠落している。<br> 上記の2ペースずつ等間隔で並べられた平行な木材は、<br> 節末で述べられるような40ペースの長い木材によって<br> 井桁状に組み合わされて、鉄の釘で固定されたようである。<br> 右上と右のジオラマの画像を参照。)</span>
*et [[wikt:en:multus#Latin|multo]] [[wikt:en:agger#Latin|aggere]] [[wikt:en:vestiuntur#Latin|vestiuntur]];
**多くの<ruby><rb>土砂</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>で覆われる。
*ea autem, quae [[wikt:en:diximus#Verb|diximus]], [[wikt:en:intervallum#Latin|intervalla]]
**さらに、前述した<small>(2ペースの)</small>間隔には、
*[[wikt:en:grandis#Latin|grandibus]] in [[wikt:en:frons#Latin:_forehead|fronte]] [[wikt:en:saxum#Latin|saxis]] <u>efferciuntur</u>.
**前面に大きな<ruby><rb>石塊</rb><rp>(</rp><rt>サクスム</rt><rp>)</rp></ruby>が詰め込まれる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、ρ系写本・写本V では [[wikt:en:efferciuntur#Latin|efferciuntur]] と表記され、<br> α系写本・写本T では [[wikt:en:effarciuntur#Latin|effarciuntur]] と表記されるが、<br> [[w:母音弱化|母音弱化]]の語形である前者の方が、共和制末期のカエサルが用いたと考えられる。)</span>
[[画像:Keltenmauer.gif|thumb|right|280px|ガッリア式城壁の構成図(上が側面、中が上面、下が前面)。木材を水平な井桁状に並べて[[w:釘|釘]]で緊結し、土砂で覆って何層にも重ね、前面には石をはめ込む。井桁状の骨組によって[[w:破城槌|破城槌]]など横からの力(水平荷重)に耐えられるように工夫されている。]]
:
*<!--❸--><sup>(3)</sup> His [[wikt:en:conlocatus#Latin|conlocatis]] et [[wikt:en:coagmentatus#Latin|coagmentatis]]
**<u>これら</u>が配置されて結び合わされると、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:<u>これら</u> とは、上述の木材や石材のこと。)</span>
*alius [[wikt:en:insuper#Latin|insuper]] [[wikt:en:ordo#Latin|ordo]] [[wikt:en:additur#Latin|additur]],
**上に別の<ruby><rb>階層</rb><rp>(</rp><rt>オルドー</rt><rp>)</rp></ruby>が付け加えられる。
*ut idem illud [[wikt:en:intervallum#Latin|intervallum]] [[wikt:en:servetur#Latin|servetur]],
**その同じ<small>(2ペースの)</small>間隔が保たれて、
*neque inter se [[wikt:en:contingant#Latin|contingant]] [[wikt:en:trabs#Latin|trabes]],
**かつ<ruby><rb>木材</rb><rp>(</rp><rt>トラプス</rt><rp>)</rp></ruby>が互いに接触しないように、
**:<span style="color:#009900;">(訳注:上下の層の水平材どうしが接触しないように、<br> 互い違いに並べているようである。)</span>
*sed [[wikt:en:par#Latin|paribus]] [[wikt:en:intermissus#Latin|intermissae]] [[wikt:en:spatium#Latin|spatiis]] [[wikt:en:singulus#Latin|singulae]]
**けれども、等間隔で間をあけられたそれぞれ<small>(の木材)</small>は、
*[[wikt:en:singulus#Latin|singulis]] [[wikt:en:saxum#Latin|saxis]] [[wikt:en:interiectus#Latin|interiectis]]
**それぞれの<ruby><rb>石塊</rb><rp>(</rp><rt>サクスム</rt><rp>)</rp></ruby>が間に挟まれることによって、
*[[wikt:en:arte#Adverb|arte]] [[wikt:en:contineantur#Latin|contineantur]].
**緊密に連結される。
:
*<!--❹--><sup>(4)</sup> Sic [[wikt:en:deinceps#Latin|deinceps]] omne [[wikt:en:opus#Latin|opus]] [[wikt:en:contexitur#Latin|contexitur]], [[wikt:en:dum#Latin|dum]] [[wikt:en:iustus#Latin|iusta]] [[wikt:en:murus#Latin|muri]] [[wikt:en:altitudo#Latin|altitudo]] [[wikt:en:expleatur#Latin|expleatur]].
**このように、<ruby><rb>城壁</rb><rp>(</rp><rt>ムルス</rt><rp>)</rp></ruby>の十分な高さが満たされるまで、すべての<ruby><rb>工作物</rb><rp>(</rp><rt>オプス</rt><rp>)</rp></ruby>が続けて組み立てられる。
[[画像:Bibracte_murus_gallicus1.jpg|thumb|right|300px|ガッリア式城壁の[[w:ジオラマ|ジオラマ]](仏[[w:ビブラクテ|ビブラクテ]]遺跡のケルト文明博物館)。この構造形式はカエサルの記述から「[[w:ムルス・ガリクス|ムルス・ガリクス]](ガッリア壁)」と呼ばれるが、ガッリアに限らず、[[w:鉄器時代|鉄器時代]]末期すなわちBC1世紀頃の後期[[w:ラ・テーヌ文化|ラ・テーヌ文化]]が及んだ各地に遺構として残る。木材どうしを緊結するために数百トンもの[[w:鉄|鉄]]の[[w:釘|釘]]を用いているのが大きな特徴で、[[w:鉄#製錬|製鉄]]・[[w:鋳造|鋳造]]技術の発達を示す。]]
:
; ガッリア式城壁は、外観が見事で、城塞都市の防御にも有益
:<span style="color:#009900;font-family:Times New Roman;">(訳注:以下、cum ~ tum … の構文「~だけでなく、また…でもある」。)</span>
*<!--❺--><sup>(5)</sup> Hoc <u>cum</u> in [[wikt:en:species#Latin|speciem]] [[wikt:en:varietas#Latin|varietatem]]<nowiki>que</nowiki> [[wikt:en:opus#Latin|opus]] [[wikt:en:deformis#Latin|deforme]] non est [[wikt:en:alternus#Latin|alternis]] [[wikt:en:trabs#Latin|trabibus]] ac [[wikt:en:saxum#Latin|saxis]],
**<ruby><rb>この</rb><rp>(</rp><rt>ホク</rt><rp>)</rp></ruby><ruby><rb>工作物</rb><rp>(</rp><rt>オプス</rt><rp>)</rp></ruby>は、互い違いの<ruby><rb>木材</rb><rp>(</rp><rt>トラプス</rt><rp>)</rp></ruby>と<ruby><rb>石塊</rb><rp>(</rp><rt>サクスム</rt><rp>)</rp></ruby>により、変化に富む外観において不格好でなく、
*quae [[wikt:en:rectus#Latin|rectis]] [[wikt:en:linea#Latin|lineis]] suos [[wikt:en:ordo#Latin|ordines]] [[wikt:en:servant#Latin|servant]],
**──それら<small>〔木材と石〕</small>は真っ直ぐな線により、その<ruby><rb>階層</rb><rp>(</rp><rt>オルドー</rt><rp>)</rp></ruby>を保っているのだが──
*<u>tum</u> ad [[wikt:en:utilitas#Latin|utilitatem]] et [[wikt:en:defensio#Latin|defensionem]] [[wikt:en:urbs#Latin|urbium]]
**同様に、都市の防御の有益性のためにも、
*summam [[wikt:en:habet#Latin|habet]] [[wikt:en:opportunitas#Latin|opportunitatem]],
**きわめて好都合となっている。
*quod et ab [[wikt:en:incendio#Latin|incendio]] [[wikt:en:lapis#Latin|lapis]] et ab [[wikt:en:aries#Latin|ariete]] [[wikt:en:materia#Latin|materia]] [[wikt:en:defendit#Latin|defendit]],
**──というのは、<ruby><rb>石材</rb><rp>(</rp><rt>ラピス</rt><rp>)</rp></ruby>が火災からも、<ruby><rb>材木</rb><rp>(</rp><rt>マーテリア</rt><rp>)</rp></ruby>が<ruby><rb>[[w:破城槌|破城槌]]</rb><rp>(</rp><rt>はじょうつい</rt><rp>)</rp></ruby>からも、防護しており、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et ~ et …「~でもあり、…でもある」)</span>
*quae [[wikt:en:perpetuus#Latin|perpetuis]] [[wikt:en:trabs#Latin|trabibus]] [[wikt:en:pes#Latin|pedes]] [[wikt:en:quadragenus#Latin|quadragenos]] [[wikt:en:plerumque#Adverb|plerumque]] [[wikt:en:introrsus#Latin|introrsus]] [[wikt:en:revinctus#Latin|revincta]]
**それ<small>〔短手方向の材木〕</small>は、たいてい40<u>ペース</u>にわたって<small>(長手方向に)</small>続く<ruby><rb>木材</rb><rp>(</rp><rt>トラプス</rt><rp>)</rp></ruby>により内部で緊結されており、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、40ペースは約12メートル。)</span>
*neque [[wikt:en:perrumpi#Latin|perrumpi]] neque [[wikt:en:distrahi#Latin|distrahi]] potest.
**突破されることも、引きはがされることもできないからである。──
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===24節===
[[画像:Avaricum_westpoint_july_2006.jpg|thumb|right|350px|[[w:アウァリクム包囲戦|アウァーリクム攻略戦]]の[[w:ジオラマ|ジオラマ]]<small>([[w:陸軍士官学校 (アメリカ合衆国)|米国陸軍士官学校]]博物館)</small>。ローマ軍の<ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>は、城壁(奥)の手前に材木と土砂を積み重ねた構築物が築き上げられ、左右の土手道をそれぞれ4層の[[w:攻城塔|攻城櫓]]が城壁に迫る。土塁の周辺には<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby>(vinea)を多数つないだ通路(坑道)が延びている。手前には2台の<ruby><rb>投射機</rb><rp>(</rp><rt>スコルピオ</rt><rp>)</rp></ruby>が見える。]]
*<span style="background-color:#ffd;">[[/注解/24節]] {{進捗|00%|2026-06-15}}</span>
;ローマ勢が徹夜の土塁工事、籠城ガッリア勢の攻勢
:
; ローマ勢が、25日間で大がかりな攻城設備を構築する
*<!--❶--><sup>(1)</sup> His [[wikt:en:tot#Latin|tot]] rebus [[wikt:en:impeditus#Latin|impedita]] [[wikt:en:oppugnatio#Latin|oppugnatione]]
**これら多くの事情により攻囲が妨げられて、
*[[wikt:en:miles#Latin|milites]],
**兵士たちは、
*cum [[wikt:en:totus#Etymology_1|toto]] tempore <u>luto</u> [[wikt:en:frigus#Latin|frigore]] et [[wikt:en:adsiduus#Latin|adsiduis]] [[wikt:en:imber#Latin|imbribus]] <u>tardarentur</u>,
**常時、<ruby><rb><u>泥土</u></rb><rp>(</rp><rt>ルトゥム</rt><rp>)</rp></ruby>、寒さと絶え間ない<ruby><rb>雨嵐</rb><rp>(</rp><rt>イムベル</rt><rp>)</rp></ruby>によって遅らせられていたが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:lutum#Latin|luto]] は、β系写本の記述で、<br> α系写本にはない。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の二つ目は、<br> χ系・β系写本では [[wikt:en:tardarentur#Latin|tardarentur]] だが、<br> 写本B・M・Sでは traderentur、<br> 写本L・Nでは terrerentur などとなっている。)</span>
*tamen [[wikt:en:continens#Adjective|continenti]] [[wikt:en:labor#Latin|labore]] omnia haec [[wikt:en:superaverunt#Latin|superaverunt]]
**しかしながら、絶え間ない労働によってこれらすべてに打ち克って、
*et diebus XXV<small> ([[wikt:en:quinque#Latin|quinque]] et [[wikt:en:viginti#Latin|viginti]])</small>
**25日間で、
*[[wikt:en:agger#Latin|aggerem]] [[wikt:en:latus#Latin:_wide|latum]] [[wikt:en:pes#Latin|pedes]] CCCXXX<small> ([[wikt:en:trecenti#Latin|trecenti]] [[wikt:en:triginta#Latin|triginta]])</small>, [[wikt:en:altus#Latin|altum]] pedes LXXX<small> ([[wikt:en:octoginta#Latin|octoginta]])</small> [[wikt:en:exstruxerunt#Latin|exstruxerunt]].
**幅330<u>ペース</u>、高さ80<u>ペース</u>の<ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>を築き上げた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、幅330ペースは約98メートル。高さ80ペースは約24メートル。)</span>
:
; アウァーリクムに籠城するガッリア勢が、攻囲するローマ勢の土塁に夜襲をしかける
*<!--❷--><sup>(2)</sup> Cum is [[wikt:en:murus#Latin|murum]] hostium paene [[wikt:en:contingeret#Latin|contingeret]],
**それ<small>〔ローマ側の土塁〕</small>が敵の城壁にほとんど接しようとしていたとき、
*et Caesar ad [[wikt:en:opus#Latin|opus]] [[wikt:en:consuetudo#Latin|consuetudine]] [[wikt:en:excubaret#Latin|excubaret]]
**かつ、カエサルが習慣により作業のそばで寝ずの番をしていて、
*[[wikt:en:miles#Latin|milites]]<nowiki>que</nowiki> [[wikt:en:hortaretur#Latin|hortaretur]], ne [[wikt:en:aliquod#Latin|quod]] [[wikt:en:omnino#Latin|omnino]] [[wikt:en:tempus#Latin|tempus]] ab [[wikt:en:opus#Latin|opere]] [[wikt:en:intermitteretur#Latin|intermitteretur]],
**いかなる時も作業がまったく中断されないように、と兵士たちを励ましていたときに、
*paulo ante tertiam [[wikt:en:vigilia#Latin|vigiliam]]
**第三夜警時の少し前に、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:第三夜警時は、真夜中から日の出までの時間帯の前半。「未明」<br> [[古代ローマの不定時法#夜警時|#夜警時]] を参照。)</span>
*est [[wikt:en:animadversus#Participle|animadversum]] [[wikt:en:fumo#Latin|fumare]] [[wikt:en:agger#Latin|aggerem]],
**土塁に煙が上がっていることが気付かれた。
*quem [[wikt:en:cuniculus#Latin|cuniculo]] hostes [[wikt:en:succenderant#Latin|succenderant]];
**<small>(その土塁を)</small>[[w:坑道|坑道]]によって敵たちが焼き討ちしていたものである。
:
*<!--❸--><sup>(3)</sup> [[wikt:en:idem#Latin|eodem]]<nowiki>que</nowiki> [[wikt:en:tempus#Latin|tempore]]
**そして同時に、
*[[wikt:en:totus#Latin|toto]] [[wikt:en:murus#Latin|muro]] [[wikt:en:clamor#Latin|clamore]] [[wikt:en:sublatus#Latin:_raised|sublato]],
**<small>(アウァーリクムの)</small>城壁全体で雄叫びが上がって、
*duabus portis ab [[wikt:en:uterque#Latin|utroque]] [[wikt:en:latus#Latin:_side|latere]] [[wikt:en:turris#Latin|turrium]]
**二つの城門より、<small>(ローマ勢の)</small>[[w:攻城塔|攻城櫓]]の両方の側面から
*[[wikt:en:eruptio#Latin|eruptio]] [[wikt:en:fiebat#Latin|fiebat]].
**<small>(ガッリア勢による)</small>突撃がなされていた。
:
*<!--❹--><sup>(4)</sup> Alii [[wikt:en:fax#Latin|faces]] atque [[wikt:en:aridus#Latin|aridam]] <u>materiam</u> de [[wikt:en:murus#Latin|muro]] in [[wikt:en:agger#Latin|aggerem]] [[wikt:en:eminus#Latin|eminus]] [[wikt:en:iaciebant#Latin|iaciebant]],
**<small>(ガッリア勢の)</small>他の者たちは、<ruby><rb>[[w:たいまつ|松明]]</rb><rp>(</rp><rt>たいまつ</rt><rp>)</rp></ruby>および乾いた材木を、城壁から<small>(ローマ側の)</small>土塁に、遠くから投げ込んで、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系写本では [[wikt:en:materiam#Latin|materiam]] だが、<br> α系写本では [[wikt:en:materiem#Latin|materiem]] となっている。<br> 文法学者[[w:カエサレアのプリスキアヌス|プリスキアーヌス]]は、カエサルの文法書 "De Analogia" について materiam と引用している。)</span>
*[[wikt:en:pix#Latin|picem]] [[wikt:en:reliquus#Latin|reliquas]]<nowiki>que</nowiki> res, quibus [[wikt:en:ignis#Latin|ignis]] [[wikt:en:excitari#Latin|excitari]] potest, [[wikt:en:fundebant#Latin|fundebant]],
**<ruby><rb>[[w:ピッチ (樹脂)|樹脂]]</rb><rp>(</rp><rt>ピッチ</rt><rp>)</rp></ruby>や、火を燃え立たせられるほかのもの<small>〔可燃物〕</small>を注ぎ込んだ。
*ut, [[wikt:en:quo#Latin:_where|quo]] primum <u>curreretur</u> aut cui rei [[wikt:en:ferretur#Latin|ferretur]] [[wikt:en:auxilium#Latin|auxilium]],
**それで、まずどこに駆け付けるのか、あるいはどの事態に支援がなされるのか、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:curreretur#Latin|curreretur]] だが、<br> β系写本では [[wikt:en:occurreretur#Latin|occurreretur]] となっている。)</span>
*vix [[wikt:en:ratio#Latin|ratio]] [[wikt:en:iniri#Latin|iniri]] posset.
**<small>(ローマ兵には)</small>ほとんど分別され得なかった。
:
*<!--❺--><sup>(5)</sup> Tamen, quod [[wikt:en:institutum#Latin|instituto]] Caesaris <u>semper duae</u> [[wikt:en:legio#Latin|legiones]] pro [[wikt:en:castra#Latin|castris]] [[wikt:en:excubabant#Latin|excubabant]]
**しかしながら、カエサルの定めにより常に2個[[w:ローマ軍団|軍団]]が陣営の前に寝ずの番をしていたので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本の語順では semper duae だが、<br> β系写本の語順では duae semper となっている。)</span>
*[[wikt:en:plus#Latin|plures]]<nowiki>que</nowiki> [[wikt:en:partitus#Latin|partitis]] [[wikt:en:tempus#Latin|temporibus]] erant in [[wikt:en:opus#Latin|opere]],
**かつ、より多くの者たちが時間を割り当てられて作業していたので、
*celeriter [[wikt:en:factus#Latin|factum]] est,
**<small>(防戦は)</small>速やかになされた。
*ut <u>alii</u> [[wikt:en:eruptio#Latin|eruptionibus]] [[wikt:en:resisterent#Latin|resisterent]],
**ある者たちは<small>(ガッリア勢の)</small>突撃に抵抗しており、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:alii ~ alii …「~する者もいれば、…する者もいる。」)</span>
*<u>alii</u> [[wikt:en:turris#Latin|turres]] [[wikt:en:reducerent#Latin|reducerent]]
**別のある者たちは[[w:攻城塔|攻城櫓]]を引き戻して、
*[[wikt:en:agger#Latin|aggerem]]<nowiki>que</nowiki> [[wikt:en:interscinderent#Latin|interscinderent]],
**土塁を<small>(城壁側から)</small>切り離していた。
*omnis vero ex [[wikt:en:castra#Latin|castris]] [[wikt:en:multitudo#Latin|multitudo]] ad [[wikt:en:restinguendum#Verb|restinguendum]] [[wikt:en:concurreret#Latin|concurreret]].
**さらに陣営から大勢の皆が、消火するために急ぎ集まっていた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===25節===
*<span style="background-color:#ffd;">[[/注解/25節]] {{進捗|00%|2026-06-29}}</span>
;籠城ガッリア勢が必死の防戦
:
*<!--❶--><sup>(1)</sup> Cum in omnibus locis, <u>[[wikt:en:consumptus#Latin|consumpta]] iam reliqua parte noctis</u>, [[wikt:en:pugnaretur#Latin|pugnaretur]],
**<u>すでに夜も明けて</u>、至る所で戦われていたときに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の直訳は「すでに夜の残りの部分も費やされて」。)</span>
*[[wikt:en:semper#Latin|semper]]<nowiki>que</nowiki> hostibus [[wikt:en:spes#Latin|spes]] [[wikt:en:victoria#Latin|victoriae]] [[wikt:en:redintegraretur#Latin|redintegraretur]],
**かつ、常に敵たちにとって勝利の希望が蘇っており、
*<u>eo magis, quod</u> [[wikt:en:deustus#Latin|deustos]] [[wikt:en:pluteus#Latin|pluteos]] [[wikt:en:turris#Latin|turrium]] [[wikt:en:videbant#Latin|videbant]] nec facile [[wikt:en:adire#Latin|adire]] [[wikt:en:apertus#Latin|apertos]] ad [[wikt:en:auxiliandum#Verb|auxiliandum]] [[wikt:en:animadvertebant#Latin|animadvertebant]],
**<span style="font-family:Times New Roman;font-size:11pt;">[[w:攻城塔|攻城櫓]]の<ruby><rb>障壁</rb><rp>(</rp><rt>プルテウス</rt><rp>)</rp></ruby>が<ruby><rb>焼き落された</rb><rp>(</rp><rt>デウストゥス</rt><rp>)</rp></ruby>のを見ていて、<ruby><rb>身を曝した者</rb><rp>(</rp><rt>アペルトゥス</rt><rp>)</rp></ruby>たちが救援のために容易に近づけないのに気付いていた<u>のでなおさらだったが</u>、</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:eo magis quod|eo magis quod]] ~ 「~なので、その分だけ、より一層」。[[ガリア戦記 第3巻#14節|第3巻14節]]も参照。)</span>
*[[wikt:en:semper#Latin|semper]]<nowiki>que</nowiki> ipsi [[wikt:en:recens#Adjective|recentes]] [[wikt:en:defessus#Latin|defessis]] [[wikt:en:succederent#Latin|succederent]]
**常に彼ら自身<small>〔籠城ガッリア勢〕</small>は新たな者たちが疲れ果てた者たちに交代しており、
*[[wikt:en:omnis#Latin|omnem]]<nowiki>que</nowiki> Galliae [[wikt:en:salus#Latin|salutem]] <u>in illo [[wikt:en:vestigium#Latin|vestigio]] temporis [[wikt:en:positus#Participle|positam]] <span style="color:#009900;"><small>(esse)</small></span></u> [[wikt:en:arbitrarentur#Latin|arbitrarentur]],
**ガッリアのすべての安全が、<u>その瞬間にかかっている</u>と思われていたので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の直訳は「その時の足跡(瞬間)に置かれている」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:以上の cum ~ arbitrarentur, が状況や理由を説明する副文で、以下が主文となっている。)</span>
*[[wikt:en:accidit#Etymology_1|accidit]] [[wikt:en:inspectans#Latin|inspectantibus]] nobis,
**我が方<small>〔ローマ勢〕</small>が見ているなかで起こったのは、
*[[wikt:en:quod#Pronoun|quod]] [[wikt:en:dignus#Latin|dignum]] [[wikt:en:memoria#Latin|memoria]] [[wikt:en:visus#Participle|visum]] [[wikt:en:praetereundus#Latin|praetereundum]] non [[wikt:en:existimavimus#Latin|existimavimus]].
**記憶に値すると思われたことを<small>(我がローマ勢が)</small>見過ごすべきではないと考えていたことである。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:この主文の主語を省略せずに記せば、以下のようになる。<br> [id], quod dignum memoria visum [esse] praetereundum [esse] non existimavimus.)</span>
[[画像:048_Conrad_Cichorius,_Die_Reliefs_der_Traianssäule,_Tafel_XLVIII_(Ausschnitt 01).jpg|thumb|right|250px|<ruby><rb>[[w:スコルピオ|投射機]]</rb><rp>(</rp><rt>スコルピオー</rt><rp>)</rp></ruby>を操作する[[w:ダキア人|ダキア人]]の彫刻([[w:トラヤヌスの記念柱|トラヤヌス帝の記念柱]]に刻まれた[[w:レリーフ|レリーフ]])。]]
[[画像:Balliste_fireing.jpg|thumb|right|250px|<ruby><rb>[[w:スコルピオ|投射機]]</rb><rp>(</rp><rt>スコルピオー</rt><rp>)</rp></ruby>([[w:en:Scorpio (dart-thrower)|Scorpio]])の現代における復元。]]
:
*<!--❷--><sup>(2)</sup> [[wikt:en:quidam#Determiner|Quidam]] ante portam oppidi [[wikt:en:Gallus#Noun|Gallus]], <u>qui</u>
**城塞都市の城門の前にいた、ある<small>(1人の)</small>ガッリア人が、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の qui は、β系写本の記述で、α系写本にはない。)</span>
*per [[wikt:en:manus#Latin:_hand|manus]] [[wikt:en:sebum#Latin|sebi]] ac [[wikt:en:pix#Latin|picis]] [[wikt:en:traditus#Participle|traditas]] [[wikt:en:glaeba#Latin|glaebas]]
**手から手へと渡された<ruby><rb>獣脂</rb><rp>(</rp><rt>セーブム</rt><rp>)</rp></ruby>や<ruby><rb>[[w:ピッチ (樹脂)|樹脂]]</rb><rp>(</rp><rt>ピッチ</rt><rp>)</rp></ruby>の塊を、
*in [[wikt:en:ignis#Latin|ignem]] <u>e regione</u> turris [[wikt:en:proiciebat#Latin|proiciebat]]:
**攻城櫓の正面にある火炎の中に投げ込んでいたが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:e_regione#Latin|ē regiōne]]「まっすぐに」「~の真向かいに」。)</span>
*[[wikt:en:scorpio#Latin|scorpione]] ab [[wikt:en:latus#Latin:_side|latere]] [[wikt:en:dexter#Latin|dextro]] [[wikt:en:traiectus#Participle|traiectus]]
**<ruby><rb>[[w:スコルピオ|投射機]]</rb><rp>(</rp><rt>スコルピオー</rt><rp>)</rp></ruby>で右の横腹を射られて、
*[[wikt:en:exanimatus#Latin|exanimatus]]<nowiki>que</nowiki> [[wikt:en:concidit#Verb|concidit]].
**息絶えて倒れた。
:
*<!--❸--><sup>(3)</sup> Hunc ex [[wikt:en:proximus#Noun|proximis]] unus [[wikt:en:iacens#Latin|iacentem]] [[wikt:en:transgressus#Latin|transgressus]]
**彼が倒れているのを、すぐ近くの者たちのうちの1人が乗り越えて、
*[[wikt:en:idem#Latin|eodem]] illo [[wikt:en:munus#Latin|munere]] [[wikt:en:fungebatur#Latin|fungebatur]];
**その同じ<ruby><rb>任務</rb><rp>(</rp><rt>ムーヌス</rt><rp>)</rp></ruby>を果たしていた。
*[[wikt:en:idem#Latin|Eadem]] [[wikt:en:ratio#Latin|ratione]] [[wikt:en:ictus#Noun_4|ictu]] [[wikt:en:scorpio#Latin|scorpionis]] [[wikt:en:exanimatus#Latin|exanimato]]
**<small>(その第2の者が)</small>同様に<ruby><rb>[[w:スコルピオ|投射機]]</rb><rp>(</rp><rt>スコルピオー</rt><rp>)</rp></ruby>の射撃で息絶えさせられると
*alteri [[wikt:en:successit#Latin|successit]] tertius
**<small>(息絶えた)</small>第2の者に第3の者が代わって、
*et tertio quartus,
**<small>(さらに)</small>第3の者に第4の者が<small>(代わった)</small>。
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> <u>nec prius</u> ille est a [[wikt:en:propugnator#Latin|propugnatoribus]] [[wikt:en:vacuus#Latin|vacuus]] [[wikt:en:relictus#Participle|relictus]] locus
**防戦者たちは、持ち場を放棄することがなかった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:直訳は「その場(ille locus)は、防戦者たちによって空<small>〔無人〕</small>にして置かれることがなかった。」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:nec [[wikt:en:prius#Adverb|prius]] ~ [[wikt:en:quam#Conjunction|quam]] …「…するまでは~しなかった」)</span>
*<u>quam</u> [[wikt:en:restinctus#Latin|restincto]] [[wikt:en:agger#Latin|aggere]] atque <u>omni ex parte</u> [[wikt:en:submotus#Latin|submotis]] hostibus [[wikt:en:finis#Latin:_end|finis]] est [[wikt:en:pugnandi#Verb|pugnandi]] [[wikt:en:factus#Latin:_done|factus]].
**<ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>が鎮火されて、そのすべての方面から敵たちが追い払われて、戦いに終止符が打たれる<u>までは</u>。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、omni <u>ex</u> parte は ''[[ガリア戦記/注解編/写本と校訂版#Ciacconius|Ciacconius]]'' による修正で、<br> α系写本では omni <u>ea</u> parte <br> β系写本では omni parte となっている。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===26節===
*<span style="background-color:#ffd;">[[/注解/26節]] {{進捗|00%|2026-07-13}}</span>
;アウァーリクム脱出の企て、女たちの絶叫
:
; 万策尽きたガッリア勢が、アウァーリクム脱出を企てる
*<!--❶--><sup>(1)</sup> [[wikt:en:omnia#Noun|Omnia]] [[wikt:en:expertus#Participle|experti]] [[wikt:en:Galli#Latin|Galli]],
**ガッリア人たちはあらゆることを試みたが、
*quod res [[wikt:en:nullus#Determiner|nulla]] [[wikt:en:successerat#Latin|successerat]],
**何ら事が成功しなかったので、
*[[wikt:en:posterus#Latin|postero]] die [[wikt:en:consilium#Latin|consilium]] [[wikt:en:ceperunt#Latin|ceperunt]] ex [[wikt:en:oppidum#Latin|oppido]] [[wikt:en:profugio#Latin|profugere]],
**<small>(戦いの夜が明けて)</small>翌日には、<small>(アウァーリクムの)</small><ruby><rb>城塞都市</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>から退避する計画を立てた。
*[[wikt:en:hortans#Latin|hortante]] et [[wikt:en:iubens#Latin|iubente]] [[wikt:en:Vercingetorix#Latin|Vercingetorige]].
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]によって促され、命じられたものであった。
:
; 脱出をはかるガッリア勢の期待とその理由
*<!--❷--><sup>(2)</sup> Id [[wikt:en:silentium#Latin|silentio]] noctis [[wikt:en:conatus#Participle|conati]]
**そのこと<small>〔アウァーリクムからの退避〕</small>を夜の静けさのうちに試みても、
*non magna <u>iactura</u> suorum
**味方の大きな<ruby><rb>犠牲</rb><rp>(</rp><rt>ヤクトゥーラ</rt><rp>)</rp></ruby>もなしに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:iactura#Noun|iactura]] は「投げ捨てること」、比喩的に「損害、犠牲」。)</span>
*sese [[wikt:en:effecturus#Latin|effecturos]] <span style="color:#009900;"><small>(esse)</small></span> [[wikt:en:sperabant#Latin|sperabant]],
**自分たちは成し遂げるだろうと期待していた。
*<u>propterea quod</u> <u>neque</u> longe ab oppido [[wikt:en:castra#Latin|castra]] [[wikt:en:Vercingetorix#Latin|Vercingetorigis]] [[wikt:en:aberant#Latin|aberant]],
**──というのも、ウェルキンゲトリークスの陣営は<small>(アウァーリクムの)</small></small><ruby><rb>城塞都市</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>からあまり離れていなかったし、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:propterea_quod#Latin|propterea quod]] ~「なぜなら~からである」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:neque ~ et …「~ではなく、…である」)</span>
*<u>et</u> [[wikt:en:palus#Latin|palus]], <u>quae [[wikt:en:perpetuus#Latin|perpetua]]</u> [[wikt:en:intercedebat#Latin|intercedebat]], [[wikt:en:Romani#Latin|Romanos]] ad [[wikt:en:insequendum#Verb|insequendum]] [[wikt:en:tardabat#Latin|tardabat]].
**沼地も絶え間なく介在していて、ローマ人たちの追跡を遅らせていたからだ。──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:二つ目の下線部は、α系写本の語順は quae perpetua だが、<br> β系写本の語順は perpetua quae となっている。)</span>
:
; 母親たちが男たちに、女子供を置き去りにして敵のいけにえにするな、と哀願する
*<!--❸--><sup>(3)</sup> [[wikt:en:iam#Latin|Iam]]<nowiki>que</nowiki> <u>hoc</u> facere [[wikt:en:noctu#Latin|noctu]] [[wikt:en:apparabant#Latin|apparabant]],
**すでに、<u>このことを</u>実行することを夜間に準備していた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、主要写本ω では [[wikt:en:haec#Latin|haec]]<sub> (中性・複数・対格)</sub> だが、<br> 最初の印刷本 [[ガリア戦記/注解編/写本と校訂版#Editio_princeps|ed.pr]] では [[wikt:en:hoc#Latin:_this|hoc]]<sub> (中性・単数・対格)</sub> としている。)</span>
*<u>cum</u> [[wikt:en:mater#Latin|matres]] [[wikt:en:familia#Latin|familiae]] [[wikt:en:repente#Adverb_2|repente]] in [[wikt:en:publicum#Noun|publicum]] [[wikt:en:procurrerunt#Latin|procurrerunt]],
**そのときに家族の母親たちが不意に公の場に走り出て来て、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の cum は、「倒逆のcum」([[wikt:en:cum inversum|cum inversum]])と呼ばれ、<br> cum 以下 ~ impediret までの副文が、上記の主文よりも重要な構文の中心になる。)</span>
*[[wikt:en:flens#Latin|flentes]]<nowiki>que</nowiki> [[wikt:en:proiectus#Latin|proiectae]] ad [[wikt:en:pes#Latin|pedes]] suorum
**泣きながら、味方<small>(の男たち)</small>の足元に<small>(身を)</small>投げ出して、
*omnibus [[wikt:en:prex#Latin|precibus]] [[wikt:en:petierunt#Latin|petierunt]],
**あらゆる懇願でもって頼んだ。
*ne se et [[wikt:en:communis#Latin|communes]] [[wikt:en:liberi#Noun_2|liberos]] hostibus ad [[wikt:en:supplicium#Latin|supplicium]] [[wikt:en:dederent#Latin|dederent]],
**自分たち<small>〔女たち〕</small>と<small>(男たちとの)</small>共通の子供たちを、処刑されることのために敵方に引き渡さないで、
*<u>quos</u> ad [[wikt:en:capiendus#Latin|capiendam]] [[wikt:en:fuga#Latin|fugam]] [[wikt:en:natura#Latin|naturae]] et [[wikt:en:vis#Latin|virium]] [[wikt:en:infirmitas#Latin|infirmitas]] [[wikt:en:impediret#Latin|impediret]].
**それらの者<small>〔女子供たち〕</small>が逃亡をとるためには、性質や体力の弱さが、妨げるのだ、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:quos#Latin|quos]]<sub> (男性・複数・対格)</sub> だが、<br> β系写本では [[wikt:en:quas#Latin|quas]]<sub> (女性・複数・対格)</sub> となっている。)</span>
:
; 窮した母親たちが、男たちの脱出の兆候をローマ人に伝えようとする
*<!--❹--><sup>(4)</sup> [[wikt:en:ubi#Latin|Ubi]] eos in [[wikt:en:sententia#Latin|sententia]] [[wikt:en:perstare#Latin|perstare]] [[wikt:en:viderunt#Latin|viderunt]],
**彼ら<small>〔男たち〕</small>が<small>(女・子供を置き去りで脱出するという)</small>意思を固持していると<small>〔女たちが〕</small>見て取るや、
*[[wikt:en:quod#Conjunction|quod]] [[wikt:en:plerumque#Adverb|plerumque]] in [[wikt:en:summus#Latin|summo]] [[wikt:en:periculum#Latin|periculo]] [[wikt:en:timor#Latin|timor]] [[wikt:en:misericordia#Latin|misericordiam]] non [[wikt:en:recipit#Latin|recipit]],
**──というのは、たいてい最大級の危険においては、恐怖が<ruby><rb>憐憫</rb><rp>(</rp><rt>れんびん</rt><rp>)</rp></ruby>の<ruby><rb>情</rb><rp>(</rp><rt>じょう</rt><rp>)</rp></ruby>を受け入れないものであるからだが、──
*[[wikt:en:conclamo#Latin|conclamare]] et [[wikt:en:significo#Latin|significare]] de [[wikt:en:fuga#Latin|fuga]] [[wikt:en:Romani#Latin|Romanis]] [[wikt:en:coeperunt#Latin|coeperunt]].
**<small>(女たちは)</small>叫び声を上げて、ローマ人たちに<small>(男たちの)</small>逃亡について知らしめ始めた。
:
; ガッリア勢の男たちが、ローマ側の騎兵隊を恐れて、アウァーリクム脱出を断念する
*<!--❺--><sup>(5)</sup> [[wikt:en:qui#Determiner|Quo]] [[wikt:en:timor#Latin|timore]] [[wikt:en:perterritus#Latin|perterriti]] [[wikt:en:Galli#Latin|Galli]],
**<small>(女たちがローマ側へ男たちの脱出について報知したことで)</small>その恐怖によって脅かされたガッリア人<small>(の男)</small>たちは、
*[[wikt:en:ne#Latin:_no|ne]] ab [[wikt:en:equitatus#Latin|equitatu]] Romanorum [[wikt:en:via#Latin|viae]] [[wikt:en:praeoccuparentur#Latin|praeoccuparentur]],
**ローマ方の[[w:騎兵|騎兵隊]]によって道があらかじめ占拠されないように、
*[[wikt:en:consilium#Latin|consilio]] [[wikt:en:destiterunt#Latin|destiterunt]].
**<small>(アウァーリクムからの脱出の)</small>計画を取り止めた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===27節===
[[画像:Avaricum_westpoint_july_2006.jpg|thumb|right|300px|[[w:アウァリクム包囲戦|アウァーリクム攻略戦]]の[[w:ジオラマ|ジオラマ]](再掲;[[w:陸軍士官学校 (アメリカ合衆国)|米国陸軍士官学校]]博物館)。ローマ軍の<ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>の周辺には、<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby>(vinea)の両端を開いて多数つないだ廊下状の通路(坑道)が延びている。]]
*<span style="background-color:#ffd;">[[/注解/27節]] {{進捗|00%|2026-08-01}}</span>
;ローマ軍が大雨の中でアウァーリクムの城壁を占拠
:
*<!--❶--><sup>(1)</sup> Postero die Caesar,
**翌日にカエサルは、
*[[wikt:en:promotus#Latin|promota]] [[wikt:en:turris#Latin|turri]]
**<small>(後退していた)</small>[[w:攻城塔|攻城櫓]]<small>(の1基)</small>が前進させられて、
*<u>perfectis</u><nowiki>que</nowiki> [[wikt:en:opus#Latin|operibus]], quae facere [[wikt:en:instituerat#Latin|instituerat]],
**実施を定めていた作業が<u>成し遂げられると</u>、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> π系写本では [[wikt:en:perfectis#Latin|perfectīs]] 「完成されると」だが、<br> α系・ρ系写本では [[wikt:en:derectis#Latin|dērēctīs]] 「整えられると」<br> となっている。)</span>
*magno [[wikt:en:coortus#Latin|coorto]] <u>imbre</u>
**激しい嵐が起こったが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:imbre#Latin|imbre]] だが、β系写本では [[wikt:en:imbri#Latin|imbri]] となっている。)</span>
*non [[wikt:en:inutilis#Latin|inutilem]] hanc ad [[wikt:en:capiendus#Latin|capiendum]] [[wikt:en:consilium#Latin|consilium]] [[wikt:en:tempestas#Latin|tempestatem]] <u>arbitratus est</u>,
**作戦計画を立てるために、この天候は不利ではないと思われた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:arbitratus#Participle|arbitratus]] est だが、β系写本では単に arbitratus となっている。)</span>
*[[wikt:en:quod#Conjunction|quod]] paulo [[wikt:en:incautius#Adverb|incautius]] [[wikt:en:custodia#Latin|custodias]] in [[wikt:en:murus#Latin|muro]] [[wikt:en:dispositus#Latin|dispositas]] [[wikt:en:videbat#Latin|videbat]],
**──というのは、城壁に配置された番兵たちが少しより油断していると見ていたからだが、──
*<u>suosque</u> [[wikt:en:languide#Adverb|languidius]] in [[wikt:en:opus#Latin|opere]] [[wikt:en:versor#Latin|versari]] [[wikt:en:iussit#Verb|iussit]]
**配下の者たちには<small>(わざと)</small>より緩慢に作業に従事することを命じて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:suos#Latin|suōs]]<nowiki>que</nowiki> だが、β系写本では [[wikt:en:suos#Latin|suōs]] [[wikt:en:quoque#Adverb|quoque]] となっている。)</span>
*et, [[wikt:en:quid#Pronoun_2|quid]] [[wikt:en:fieri#Latin|fieri]] [[wikt:en:vellet#Latin|vellet]], [[wikt:en:ostendit#Latin|ostendit]].
**何がなされることを<small>(カエサルが)</small>欲しているか、を示した。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:legio#Latin|Legionibus]]<nowiki>que</nowiki> <u>extra castra intra [[wikt:en:vinea#Latin|vineas]]</u> in occulto [[wikt:en:expeditus#Participle|expeditis]],
**[[w:ローマ軍団|諸軍団]]が<u>陣営の外の<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby>の内側で</u>ひそかに準備を整えており、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、写本や校訂版によって異同がある。[[ガリア戦記_第7巻/注解/27節#注記|注記]]を参照。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:in_occulto#Latin|in occulto]]「ひそかに」「隠れた所で」)</span>
*[[wikt:en:cohortatus#Latin|cohortatus]], ut [[wikt:en:aliquando#Latin|aliquando]] pro [[wikt:en:tantus#Latin|tantis]] [[wikt:en:labor#Latin|laboribus]] [[wikt:en:fructus#Latin:_noun|fructum]] victoriae [[wikt:en:perciperent#Latin|perciperent]],
**<small>(カエサルは)</small>やっと、これほどの労苦の見合う勝利の報酬を我がものとするように激励し、
*iis, qui [[wikt:en:primus#Latin|primi]] [[wikt:en:murus#Latin|murum]] [[wikt:en:adscendissent#Latin|adscendissent]], [[wikt:en:praemium#Latin|praemia]] [[wikt:en:proposuit#Latin|proposuit]]
**一番乗りとして城壁に登った者たちには、恩賞を約束して、
*[[wikt:en:miles#Latin|militibus]]<nowiki>que</nowiki> [[wikt:en:signum#Latin|signum]] [[wikt:en:dedit#Latin|dedit]].
**兵士たちに号令を発した。
:
*<!--❸--><sup>(3)</sup> Illi [[wikt:en:subito#Adverb_8|subito]] ex omnibus partibus [[wikt:en:evolaverunt#Latin|evolaverunt]]
**彼ら<small>〔ローマ軍団兵〕</small>は不意にあらゆる方角から飛び出して、
*[[wikt:en:murus#Latin|murum]]<nowiki>que</nowiki> celeriter [[wikt:en:compleverunt#Latin|compleverunt]].
**速やかに<small>(アウァーリクムの)</small>城壁を埋め尽くしたのだ。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===28節===
*<span style="background-color:#ffd;">[[/注解/28節]] {{進捗|00%|2026-08-11}}</span>
;ローマ軍がアウァーリクムの市民4万人を大虐殺
:
*<!--❶--><sup>(1)</sup> Hostes re nova [[wikt:en:perterritus#Latin|perterriti]],
**敵たち<small>〔籠城するガッリア勢〕</small>は新たな事態に脅かされて、
*[[wikt:en:murus#Latin|muro]] [[wikt:en:turris#Latin|turribus]]<nowiki>que</nowiki> [[wikt:en:deiectus#Participle|deiecti]]
**<small>(ローマ兵によって)</small>城壁や櫓から追い落とされて、
*in [[wikt:en:forum#Latin|foro]] ac locis [[wikt:en:patentior#Latin|patentioribus]] [[wikt:en:cuneatim#Latin|cuneatim]] [[wikt:en:constiterunt#Etymology_1|constiterunt]],
**<ruby><rb>広場</rb><rp>(</rp><rt>フォルム</rt><rp>)</rp></ruby>や開けた場所に楔状に立ちふさがった。
*hoc animo, ut, si [[wikt:en:aliqui#Latin|qua]] ex parte [[wikt:en:obviam#Adverb|obviam]] <span style="color:#009900;">[</span>contra<span style="color:#009900;">]</span> [[wikt:en:veniretur#Latin|veniretur]], [[wikt:en:acies#Latin|acie]] [[wikt:en:instructus#Latin|instructa]] [[wikt:en:depugnarent#Latin|depugnarent]].
**もし、どの方向から相対して対抗して来られても、戦列を整えて決戦しようという心積もりでいたのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:contra#Latin|contra]] は α系・π系写本・写本Rにある記述だが、<br> 写本U にはなく、削除提案されている。)</span>
:
*<!--❷--><sup>(2)</sup> Ubi [[wikt:en:nemo#Latin|neminem]] in aequum locum sese [[wikt:en:demitto#Latin|demittere]], sed [[wikt:en:totus#Latin:_whole|toto]] [[wikt:en:undique#Latin|undique]] [[wikt:en:murus#Latin|muro]] [[wikt:en:circumfundi#Latin|circumfundi]] [[wikt:en:viderunt#Latin|viderunt]],
**<small>(ローマ兵が)</small>誰も平らな所に降りて来ず、しかし城壁全体の至る所で取り囲まれたことを見たときに、
*[[wikt:en:veritus#Latin|veriti]], ne [[wikt:en:omnino#Latin|omnino]] spes fugae [[wikt:en:tolleretur#Latin|tolleretur]],
**<small>(籠城ガッリア勢は)</small>逃亡のあらゆる希望を奪われないかと怖れて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:veriti, [[wikt:en:ne#Latin:_no|ne]] ~ 「~ではないかと恐れて」恐れの表現。)</span>
*[[wikt:en:abiectus#Latin|abiectis]] [[wikt:en:arma#Latin|armis]]
**武器を投げ捨てて、
*[[wikt:en:ultimus#Latin|ultimas]] oppidi partes
**城塞都市の<small>(ローマ勢から)</small>最も遠くの方面を
*[[wikt:en:continens#Latin|continenti]] [[wikt:en:impetus#Latin|impetu]] [[wikt:en:petiverunt#Latin|petiverunt]],
**絶え間ない殺到によって求めた。
:
*<!--❸--><sup>(3)</sup> <u>pars</u><nowiki>que</nowiki> ibi, cum [[wikt:en:angustus#Latin|angusto]] [[wikt:en:exitus#Latin|exitu]] portarum se ipsi [[wikt:en:premerent#Latin|premerent]], a militibus,
**ある者たちは、城門の狭い出口で自分らで互いに押し合っていたので、そこで<small>(ローマ人)</small>兵士たちによって<small>(殺され)</small>、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:pars#Latin|pars]] ~, pars …「ある者たちは~、別の者たちは…」。)</span>
*<u>pars</u> iam [[wikt:en:egressus#Latin|egressa]] portis ab [[wikt:en:eques#Latin|equitibus]] est [[wikt:en:interfectus#Latin|interfecta]].
**別の者たちはすでに城門を出ていたが、<small>(ローマ側の)</small>[[w:騎兵|騎兵]]たちによって虐殺された。
:
*<!--❹--><sup>(4)</sup> [[wikt:en:nec#Latin|Nec]] fuit [[wikt:en:quisquam#Pronoun|quisquam]], qui [[wikt:en:praeda#Latin|praedae]] [[wikt:en:studeret#Latin|studeret]].
**<small>(ローマ勢には)</small>戦利品を熱心に求める何者もいなかった。
*[[wikt:en:sic#Latin|Sic]] et <u>Cenabi</u> [[wikt:en:caedes#Latin|caede]] et [[wikt:en:labor#Latin|labore]] [[wikt:en:opus#Latin|operis]] [[wikt:en:incitatus#Latin|incitati]]
**このように、ケナブムの<small>(ローマ市民の)</small>殺害にも、(攻城)作業の労苦にも煽られて
**:<span style="color:#009900;">(訳注:カルヌーテース族によるローマ市民の殺害については[[#3節|3節]]を参照。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の cenabi は、α系写本では [[wikt:en:Genabi#Latin|genabi]] <br> ρ系写本や写本Tでは [[wikt:en:Genabensi#Adjective|genabensi]]<br> 写本Uおよび写本Tの一部では cenabensi となっている。<br> なお、cenabi, cenabensi はケルト語風の表記である。)</span>
*non [[wikt:en:aetas#Latin|aetate]] [[wikt:en:confectus#Latin|confectis]],
**<small>(ローマ勢は)</small>年老いた者たちも、
*non [[wikt:en:mulier#Latin|mulieribus]],
**妻女たちも、
*non [[wikt:en:infans#Noun|infantibus]] [[wikt:en:pepercerunt#Latin|pepercerunt]].
**乳幼児たちも<small>(虐殺することを)</small>思いとどまらなかった。
**:<span style="color:#009900;">(訳注:ビトゥリゲース族はローマ市民の殺害には関与しておらず、報復される対象とするのは的外れである。</span>
**:<span style="color:#009900;">ましてや非戦闘員である老人・女性・子供たちまで殺戮するのは、戦争の狂気というしかない。)</span>
:
*<!--❺--><sup>(5)</sup> [[wikt:en:denique#Latin|Denique]] ex omni <u><span style="color:#009900;">eo</span></u> numero, qui fuit circiter milium XL<small> ([[wikt:en:quadraginta#Latin|quadraginta]])</small>,
**ついには、約40000名もいたすべての人員のうち、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:eo#Latin:_there|eo]] は β系写本の記述で、α系写本にはない。)</span>
*vix DCCC<small> ([[wikt:en:octingenti#Latin|octingenti]])</small>, qui primo [[wikt:en:clamor#Latin|clamore]] [[wikt:en:auditus#Latin|audito]] se ex oppido <u>eiecerunt</u>,
**やっと800名が、はじめにどよめきを聞いて、城塞都市から急ぎ出て、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:eiecerunt#Latin|eiecerunt]]<small> (直接法・完了)</small> だが、<br> β系写本では [[wikt:en:eiecerant#Latin|eiecerant]]<small> (直接法・過去完了)</small> となっている。)</span>
*[[wikt:en:incolumis#Latin|incolumes]] ad [[wikt:en:Vercingetorix#Latin|Vercingetorigem]] [[wikt:en:pervenerunt#Latin|pervenerunt]].
**無傷のままで[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]のもとへ到着した。
:
*<!--❻--><sup>(6)</sup> Quos ille multa iam nocte <u>silentio</u> ex fuga [[wikt:en:excepit#Latin|excepit]],
**彼<small>〔ウェルキンゲトリークス〕</small>は、逃亡して来たその者たちを、すでに夜も更けた<u>静寂のうちに</u>迎え入れた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:silentio#Latin|silentio]] だが、β系写本にはない。<br> 他方、β系写本では [[wikt:en:sic#Latin|sic]] とあるが、α系写本にはない。)</span>
*[[wikt:en:veritus#Latin|veritus]], ne qua in castris ex eorum [[wikt:en:concursus#Latin:_convergence|concursu]] et [[wikt:en:misericordia#Latin|misericordia]] [[wikt:en:vulgus#Latin|vulgi]] seditio <u>oreretur</u>,
**彼らの密集や一般兵士たちの同情から、陣営の中で何らかの暴動が生じないように怖れて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ne [[wikt:en:aliqui#Latin|qua (aliqua)]] ~ [[wikt:en:seditio#Latin|seditio]]「何らかの暴動が~ないように」
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、一部の写本は [[wikt:en:oreretur#Latin|oreretur]] だが、<br> 他の写本では [[wikt:en:oriretur#Latin|oriretur]] となっているが、語形の相違。)</span>
*ut procul in via [[wikt:en:dispositus#Latin|dispositis]] [[wikt:en:familiaris#Noun|familiaribus]] suis [[wikt:en:princeps#Latin|principibus]]<nowiki>que</nowiki> [[wikt:en:civitas#Latin|civitatum]],
**自らの郎党たちや部族の領袖たちを<small></small>(陣営の)遠くから道沿いに配置して、
*[[wikt:en:disparandus#Latin|disparandos]] [[wikt:en:deducendus#Latin|deducendos]]<nowiki>que</nowiki> ad suos [[wikt:en:curaret#Latin|curaret]],
**<small>(敗走者たちを)</small>味方のもとへ、引き離して連れて行くように手配した。
*quae [[wikt:en:cuique#Latin|cuique]] civitati pars castrorum ab [[wikt:en:initium#Latin|initio]] [[wikt:en:obvenerat#Latin|obvenerat]].
**陣営の各部分は、おのおのの部族にはじめから与えられていたのだ。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===29節===
*<span style="background-color:#ffd;">[[/注解/29節]] {{進捗|00%|2026-08-11}}</span>
[[画像:Vercingetorix stater CdM.jpg|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の横顔が刻まれたガリアの金貨(パリの[[w:ビブリオテーク・ナショナル|仏国立図書館]]貨幣部蔵)]]
;ウェルキンゲトリークスが演説で味方を鼓舞する
:
*<!--❶--><sup>(1)</sup> Postero die [[wikt:en:concilium#Latin|concilio]] [[wikt:en:convocatus#Latin|convocato]],
**翌日に、会合が召集されると、
*[[wikt:en:consolatus#Latin|consolatus]] [[wikt:en:cohortatus#Latin|cohortatus]]<nowiki>que</nowiki> est,
**<small>(ウェルキンゲトリークスは、味方の者たちを)</small>慰めて、励ました:
*<u>ne</u> se [[wikt:en:admodum#Latin|admodum]] animo [[wikt:en:demitterent#Latin|demitterent]],
**あまり気を落とさないように、
*<u>ne</u> [[wikt:en:perturbarentur#Latin|perturbarentur]] [[wikt:en:incommodum#Latin|incommodo]].
**敗北により取り乱さないように、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:上の下線部は、α系写本では [[wikt:en:ne#Latin:_no|ne]] ~ ne だが、<br> β系写本では ne ~ [[wikt:en:neve#Latin|neve]] となっている。)</span>
:
*<!--❷--><sup>(2)</sup> Non [[wikt:en:virtus#Latin|virtute]] neque in [[wikt:en:acies#Latin|acie]] [[wikt:en:vicisse#Latin|vicisse]] [[wikt:en:Romani#Latin|Romanos]],
**ローマ人たちが勝ったのは、武勇においてでも、戦列<small>〔野外の合戦〕</small>においてでもなく、
*sed [[wikt:en:artificium#Noun|artificio]] [[wikt:en:quidam#Determiner|quodam]] et [[wikt:en:scientia#Latin:_knowledge|scientia]] [[wikt:en:oppugnatio#Latin|oppugnationis]],
**ある種の技巧および攻城戦の知識によるものであって、
*cuius rei [[wikt:en:fuerint#Latin|fuerint]] ipsi [[wikt:en:imperitus#Latin|imperiti]].
**その事柄に<small>(ガッリア人)</small>自身が通じていなかったのだ。
**:<span style="color:#009900;">(訳注:[[ガリア戦記 第5巻#42節|第5巻42節]]では、ネルウィイー族らガッリア北部のベルガエ勢はローマ人の攻城術をまねていた。)</span>
:
*<!--❸--><sup>(3)</sup> [[wikt:en:erro#Latin:_wander|Errare]], si [[wikt:en:aliqui#Latin|qui]] in [[wikt:en:bellum#Latin|bello]] omnes [[wikt:en:secundus#Adjective|secundos]] rerum [[wikt:en:proventus#Latin|proventus]] [[wikt:en:exspectent#Latin|exspectent]].
**誰であれ、戦争において、万事が順調な成功になることを期待するのならば、<small>(その者らは)</small>誤っている。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:語順が判りにくいが、<br> 物事のすべて(omnes rerum)が幸運な結果(secundos proventus)であることを期待するのならば~。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:errare の意味上の主語([[wikt:en:eos#Latin|eos]])が省略されている。)</span>
:
*<!--❹--><sup>(4)</sup> Sibi [[wikt:en:numquam#Latin|numquam]] [[wikt:en:placuisse#Latin|placuisse]] [[wikt:en:Avaricum#Latin|Avaricum]] [[wikt:en:defendi#Latin|defendi]],
**自分<small>〔ウェルキンゲトリークス〕</small>にとって、アウァーリクムが防衛されることは決して好ましいものではなかった。
*cuius rei [[wikt:en:testis#Latin:_witness|testes]] ipsos [[wikt:en:haberet#Latin|haberet]];
**その事の証人は<small>(諸君ら)</small>自身である。
*sed <u>factum</u> [[wikt:en:inprudentia#Latin|inprudentia]] [[wikt:en:Bituriges#Latin|Biturigum]] et [[wikt:en:nimius#Latin|nimia]] [[wikt:en:obsequentia#Latin|obsequentia]] reliquorum, <u>uti</u> hoc [[wikt:en:incommodum#Latin|incommodum]] [[wikt:en:acciperetur#Latin|acciperetur]].
**だが、ビトゥリゲース族の軽率さと、ほかの者たちの過度な同調により、この敗北を蒙るようになったのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:factus#Latin:_done|factum]] (esse) ~ [[wikt:en:uti#Latin:_how|uti]] …「…ようになった」)</span>
:
*<!--❺--><sup>(5)</sup> Id tamen se celeriter [[wikt:en:maior#Adjective_2|maioribus]] [[wikt:en:commodum#Latin:noun|commodis]] [[wikt:en:sanaturus#Latin|sanaturum]] <span style="color:#009900;">(esse)</span>.
**しかしながら、自分がそれ<small>〔敗北〕</small>を速やかに大いなる勝利によって埋め合わせるであろう。
:
*<!--❻--><sup>(6)</sup> Nam quae ab reliquis [[wikt:en:Galli#Latin:_Gauls|Gallis]] civitates [[wikt:en:dissentirent#Latin|dissentirent]],
**一方、<small>(ウェルキンゲトリークスら)</small>ほかのガッリア人たちとは意見を相異する諸部族、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:先行詞 [[wikt:en:civitas#Latin|civitates]] が quae 以下の関係文中に入り込む倒置の語順。)</span>
*has sua [[wikt:en:diligentia#Noun|diligentia]] [[wikt:en:adiuncturus#Latin|adiuncturum]] <span style="color:#009900;">(esse)</span>
**彼ら<small>〔諸部族〕</small>を自分<small>〔ウェルキンゲトリークス〕</small>の入念さにより合流させるであろうし、
*atque unum [[wikt:en:consilium#Latin|consilium]] [[wikt:en:totus#Latin:_whole|totius]] [[wikt:en:Gallia#Latin|Galliae]] [[wikt:en:effecturus#Latin|effecturum]] <span style="color:#009900;">(esse)</span>,
**全ガッリアの考えを一つにするであろう。
*cuius [[wikt:en:consensus#Latin|consensui]] ne orbis quidem terrarum [[wikt:en:possit#Latin|possit]] [[wikt:en:obsistere#Latin|obsistere]];
**その団結には、全世界でさえ邪魔することはできない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:orbis#Latin|orbis]] [[wikt:en:/terrarum#Latin|terrarum]]「全世界」)</span>
*[[wikt:en:id#Latin|id]]<nowiki>que</nowiki> se [[wikt:en:prope#Adverb|prope]] iam [[wikt:en:effectus#Latin:_participle|effectum]] habere.
**それを自分<small>〔ウェルキンゲトリークス〕</small>は、ほとんどすでに成し遂げたと思う。
:
*<!--❼--><sup>(7)</sup> [[wikt:en:interea#Latin|Interea]] [[wikt:en:aequus#Latin|aequum]] esse ab iis [[wikt:en:communis#Latin|communis]] [[wikt:en:salus#Latin|salutis]] causa [[wikt:en:impetrari#Latin|impetrari]],
**その間に<small>(ガッリアの)</small>共通の安全のために、彼ら<small>〔ガッリア人〕</small>によって<small>(以下のように)</small>達成されることが好都合である。
*ut castra [[wikt:en:munio#Latin|munire]] [[wikt:en:instituerent#Latin|instituerent]],
**陣営を防御することを実施するように、
*[[wikt:en:quo#Latin:_where|quo]] [[wikt:en:facilius#Latin|facilius]] [[wikt:en:repentinus#Latin|repentinos]] hostium [[wikt:en:impetus#Latin|impetus]] <u>sustinerent</u>.
**それにより、敵たち<small>〔ローマ人〕</small>の予期せぬ襲撃に対して、より容易に持ちこたえられるように。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:sustinerent#Latin|sustinerent]] だが、<br> β系写本では [[wikt:en:sustinere#Latin|sustinere]] [[wikt:en:possent#Latin|possent]] となっている。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===30節===
*<span style="background-color:#ffd;">[[/注解/30節]] {{進捗|00%|2026-08-29}}</span>
;ガッリア勢がウェルキンゲトリークスに心服し、希望を抱く
:
*<!--❶--><sup>(1)</sup> Fuit haec [[wikt:en:oratio#Latin|oratio]] non [[wikt:en:ingratus#Latin|ingrata]] [[wikt:en:Galli#Latin:_Gauls|Gallis]],
**この演説は、ガッリア人たちにとっては不快なものではなかった。
*et maxime, quod ipse animo non [[wikt:en:defecerat#Latin|defecerat]], [[wikt:en:tantus#Latin|tanto]] [[wikt:en:acceptus#Latin|accepto]] [[wikt:en:incommodum#Latin|incommodo]],
**──というのは、とりわけ<small>(ウェルキンゲトリークス)</small>自身がこれほどの敗北を蒙っても意気消沈することなく、
*neque <u>se</u> [[wikt:en:in_occultum#Latin|in occultum]] [[wikt:en:abdiderat#Latin|abdiderat]]
**秘密の場所に身を隠したり、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の再帰代名詞 se は 最初の印刷本 [[ガリア戦記/注解編/写本と校訂版#Editio_princeps|''ed. pr.'']] で挿入されたもので、主要写本 ω にはない。)</span>
*et [[wikt:en:conspectus#Latin:_noun|conspectum]] [[wikt:en:multitudo#Latin|multitudinis]] [[wikt:en:fugerat#Latin|fugerat]]<!--,-->;
**大勢の見ているところを避けたりしなかったからである──。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:plus#Latin:_adverb|plus]]<nowiki>que</nowiki> animo [[wikt:en:provideo#Latin|providere]] et [[wikt:en:praesentio#Latin|praesentire]] [[wikt:en:existimabatur#Latin|existimabatur]],
**<small>(ウェルキンゲトリークスは他の者よりも)</small>より先見の明があり、予感していると考えられていた。
*quod re [[wikt:en:integer#Latin|integra]]
**──というのは、事態が手つかずのままで、
*[[wikt:en:primo#Latin:_adverb|primo]] [[wikt:en:incendendus#Latin|incendendum]] <span style="color:#009900;">(esse)</span> [[wikt:en:Avaricum#Latin|Avaricum]],
**当初はアウァーリクムが焼き払われるべきだと<small>(主張し)</small>、
*post [[wikt:en:deserendus#Latin|deserendum]] <span style="color:#009900;">(esse)</span>, [[wikt:en:censuerat#Latin|censuerat]].
**後には<small>(アウァーリクムは)</small>放棄されるべきだ、と主張していたからだ──。
:
*<!--❸--><sup>(3)</sup> [[wikt:en:itaque#Latin|Itaque]] <u>ut</u> [[wikt:en:reliquus#Latin|reliquorum]] [[wikt:en:imperator#Latin|imperatorum]] res adversae [[wikt:en:auctoritas#Latin|auctoritatem]] [[wikt:en:minuunt#Latin|minuunt]],
**それゆえに、逆境がほかの将軍たちの影響力を減ずる一方で、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ut#Conjunction|ut]] ~, [[wikt:en:sic#Latin|sic]] …「~であるように、同様に…」あるいは「~である一方で、…」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:res#Latin|res]] [[wikt:en:adversus#Participle|adversae]]「逆境、(戦争における)敗北」。)</span>
*<u>sic</u> huius <u>ex contrario</u> [[wikt:en:dignitas#Latin|dignitas]] <u>incommodo</u> [[wikt:en:acceptus#Latin|accepto]] <u>in dies</u> [[wikt:en:augebatur#Latin|augebatur]].
**それどころか、彼の威厳は、災難を蒙っても、日ごとに高まっていたのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ex_contrario#Latin|ex contrario]]「それどころか」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:incommodum#Latin|incommodum]]「不運、災難、(戦争における)敗北」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:in_dies#Latin|in dies]]「日に日に」「日ごとに」。)</span>
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> [[wikt:en:simul#Latin|Simul]] <u>in spem [[wikt:en:veniebant#Latin|veniebant]]</u> eius [[wikt:en:adfirmatio#Latin|adfirmatione]] de reliquis [[wikt:en:adiungendus#Latin|adiungendis]] [[wikt:en:civitas#Latin|civitatibus]];
**同時に、彼の断言によって<small>(ガッリア人たちは)</small>ほかの諸部族を合流させることについて希望を抱いていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:in [[wikt:en:spes#Latin|spem]] [[wikt:en:venio#Latin|venire]]「希望を抱くようになる」。)</span>
*[[wikt:en:primum#Adverb|primum]]<nowiki>que</nowiki> eo tempore [[wikt:en:Galli#Latin:_Gauls|Galli]] [[wikt:en:castra#Latin|castra]] [[wikt:en:munio#Latin|munire]] [[wikt:en:instituerunt#Latin|instituerunt]],
**そのときに初めて、ガッリア人たちは陣営の防備を固めることに着手した。
*et <u>sic</u> <u>sunt</u> animo <u>consternati</u>, homines [[wikt:en:insuetus#Latin|insueti]] [[wikt:en:labor#Latin|laboris]],
**<small>(陣営の防備という)</small>労苦に慣れていない人々が、<u>気持ちが狼狽していたので、</u>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:sic#Latin|sic]] ~, [[wikt:en:ut#Conjunction|ut]] …「~であるので、その結果…ほどだった」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の sunt は主要写本 ω の記述だが、erant とする修正提案もある。<br> sunt なら未完了過去 (sunt consternati)、erant なら過去完了 (erant consternati) になる。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:consternati#Latin|consternati]] は主要写本 ω の記述だが、<br> ''[[ガリア戦記/注解編/写本と校訂版#Nipperdey|Nipperdey]]'' は [[wikt:en:confirmati#Latin|confirmati]] と修正提案している。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:写本の読みは sunt [[wikt:en:consternati#Latin|consternati]] 「(彼らは)恐怖に陥っていた、混乱していた。」だが、<br> 修正読みでは sunt [[wikt:en:confirmati#Latin|confirmati]] 「(彼らは)励まされた」。)</span>
*<u>ut</u> omnia, quae [[wikt:en:imperarentur#Latin|imperarentur]], sibi [[wikt:en:patiendus#Latin|patienda]] <span style="color:#009900;">(esse)</span> <u>et perferenda <span style="color:#009900;">(esse)</span></u> [[wikt:en:existimarent#Latin|existimarent]].
**自分たちにとって、命令されたことすべてを耐えるべきであり、<u>成就するべきである</u>と考えるに至ったほどであった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の et [[wikt:en:perferenda#Latin|perferenda]] (esseは省略されている) はβ系写本の記述で、<br> α系写本にはない。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===31節===
*<span style="background-color:#ffd;">[[/注解/31節]] {{進捗|00%|2026-08-29}}</span>
;ウェルキンゲトリークスがほかの諸部族を勧誘し、兵力を補充する
:
; ウェルキンゲトリークスが、さらに多くの部族に同盟を誘いかける
*<!--❶--><sup>(1)</sup> Nec minus, quam est [[wikt:en:pollicitus#Latin|pollicitus]],
**約束したことに劣らず、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:nec#Latin|nec]] [[wikt:en:minus#Adverb_4|minus]] [[wikt:en:quam#Latin|quam]] ~「~に劣らず」。)</span>
*[[wikt:en:Vercingetorix#Latin|Vercingetorix]] animo [[wikt:en:laborabat#Latin|laborabat]], ut reliquas [[wikt:en:civitas#Latin|civitates]] [[wikt:en:adiungeret#Latin|adiungeret]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、ほかの諸部族を加盟させるように、心から努力した。
*atque <u>earum principes donis pollicitationibusque</u> [[wikt:en:adliciebat#Latin|adliciebat]].
**それらの領袖たちに贈物を約束することによって、誘い込もうとしていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系写本では earum [[wikt:en:princeps#Noun_3|principes]] [[wikt:en:donum#Latin|donis]] [[wikt:en:pollicitatio#Latin|pollicitationibus]]<nowiki>que</nowiki> だが、<br> α系写本では eas donis pollicitationibus となっている。)</span>
:
*<!--❷--><sup>(2)</sup> Huic rei [[wikt:en:idoneus#Latin|idoneos]] homines [[wikt:en:deligebat#Latin|deligebat]],
**この事<small>〔同盟に誘うこと〕</small>に適切な人物たちを<small>(ウェルキンゲトリークスが)</small>選び出して、
*quorum [[wikt:en:quisque#Latin|quisque]] aut [[wikt:en:oratio#Latin|oratione]] [[wikt:en:subdolus#Latin|subdola]] aut [[wikt:en:amicitia#Latin|amicitia]]
**その者たちのおのおのは、巧妙な演説により、あるいは友情により、
*[[wikt:en:facillime#Latin|facillime]] <u>capere</u> posset.
**かなり容易に<small>(同盟者を)</small>得ることができた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、χ系写本・写本Lでは [[wikt:en:capere#Latin|capere]] だが、<br> β系写本では [[wikt:en:capi#Latin|capi]] となっている。)</span>
:
; アウァーリクムからの逃亡者たちに、武具と衣服を支給する
*<!--❸--><sup>(3)</sup> <span style="color:#009900;">[eos]</span> qui [[wikt:en:Avaricum#Latin|Avarico]] [[wikt:en:expugnatus#Latin|expugnato]] [[wikt:en:refugerant#Latin|refugerant]],
**<small>(ウェルキンゲトリークスは)</small>アウァーリクムが攻略されたので逃げて来ていた者たちに、
*[[wikt:en:armandus#Latin|armandos]] [[wikt:en:vestiendus#Latin|vestiendos]]<nowiki>que</nowiki> [[wikt:en:curat#Latin|curat]];
**武装させられ、服を着せられるように、手配する。
:
; 同盟部族に徴集する兵員の数と集まる期日を指示する
*<!--❹--><sup>(4)</sup> [[wikt:en:simul#Latin|simul]], ut [[wikt:en:deminutus#Latin|deminutae]] [[wikt:en:copiae#Latin|copiae]] [[wikt:en:redintegrarentur#Latin|redintegrarentur]],
**同時に、減り衰えた軍勢が補充されるように、
*[[wikt:en:imperat#Latin|imperat]] [[wikt:en:certus#Latin|certum]] <u>numerum</u> militum civitatibus, <u>quem</u> et <u>quam ante diem</u> in castra [[wikt:en:adduci#Latin|adduci]] [[wikt:en:velit#Latin|velit]],
**諸部族に、兵の一定の<u>数</u>を<u>どれほど</u>、かつ、<u>いつの日の前までに</u>陣営に連れて来ることを欲しているかを指図し、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:qui#Determiner|quem]] [[wikt:en:numerus#Latin|numerum]] 「どれほどの数を」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:qui#Determiner|quam]] ante [[wikt:en:dies#Latin|diem]] 「いつの日の前までに」。)</span>
*[[wikt:en:sagittarius#Noun|sagittarios]]<u>que</u> omnes, quorum erat [[wikt:en:permagnus#Latin|permagnus]] <u>numerus in Gallia</u>, [[wikt:en:conquiri#Latin|conquiri]] et ad se [[wikt:en:mitti#Latin|mitti]] [[wikt:en:iubet#Latin|iubet]].
**ガッリアにかなり大勢がいた弓兵のすべてを、徴募して自分<small>〔ウェルキンゲトリークス〕</small>のもとへ派遣することを命じる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本の語順は numerus in Gallia で、<br> β系写本の語順は in Gallia numerus となっている。)</span>
*His rebus celeriter id, quod [[wikt:en:Avaricum#Latin|Avarici]] [[wikt:en:deperierat#Latin|deperierat]], [[wikt:en:expletur#Latin|expletur]].
**これらの事により、速やかに、アウァーリクムで壊滅していたそれら<small>(の軍勢)</small>が補充される。
:
; ニティオブロゲース族の王テウトマトゥスが、騎兵隊らとともにウェルキンゲトリークスに合流する
*<!--❺--><sup>(5)</sup> [[wikt:en:interim#Latin|Interim]] [[wikt:en:Teutomatus#Latin|Teutomatus]], [[wikt:en:Ollovico#Latin|Olloviconis]] filius, rex <u>Nitiobrogum</u>,
**その間に、オッロウィコーの息子で、ニティオブロゲース族の王であるテウトマトゥスが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、主要写本ω では Nitiobrogum だが、<br> 写本Uの一部では [[wikt:en:Nitiobriges#Latin|Nitiobrigum]] となっている。)</span>
*cuius pater ab [[wikt:en:senatus#Latin|senatu]] nostro amicus erat [[wikt:en:appellatus#Latin|appellatus]],
**その父<small>〔オッロウィコー〕</small>は、我が方<small>〔ローマ人〕</small>の[[w:元老院 (ローマ)|元老院]]から友人と呼ばれていたのだが、
*cum magno [[wikt:en:eques#Latin|equitum]] suorum numero et quos ex [[wikt:en:Aquitania#Latin|Aquitania]] [[wikt:en:conduxerat#Latin|conduxerat]] ad eum [[wikt:en:pervenit#Etymology_2|pervenit]].
**自らの騎兵の多数およびアクィーターニアから募っていた者たちとともに、彼<small>〔ウェルキンゲトリークス〕</small>のもとへ到着した。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
==ゲルゴウィア攻略戦、ハエドゥイー族の離反==
===32節===
*<span style="background-color:#ffd;">[[/注解/32節]] {{進捗|00%|2026-09-23}}</span>
;ハエドゥイー族内紛の危機
:
*<!--❶--><sup>(1)</sup> Caesar [[wikt:en:Avarici#Latin|Avarici]] complures dies [[wikt:en:commoratus#Latin|commoratus]]
**カエサルは、アウァーリクムに幾日も留まって、
*[[wikt:en:summus#Latin|summam]]<nowiki>que</nowiki> ibi [[wikt:en:copia#Latin|copiam]] [[wikt:en:frumentum#Latin|frumenti]] et reliqui [[wikt:en:commeatus#Latin:_noun|commeatus]] [[wikt:en:nactus#Latin|nactus]]
**そこでかなり多量の糧食やほかの必需品を手に入れて、
*[[wikt:en:exercitus#Latin:_noun|exercitum]] ex [[wikt:en:labor#Latin:_work|labore]] atque [[wikt:en:inopia#Latin:_noun|inopia]] <u>reficit</u>.
**軍隊を労苦や欠乏から回復させた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、χ系・β系写本では [[wikt:en:reficit#Latin|reficit]]<sub> (現在形)</sub> だが、<br> φ系写本では [[wikt:en:refecit#Latin|refecit]]<sub> (完了形)</sub> となっている。)</span>
:
*<!--❷--><sup>(2)</sup> Iam [[wikt:en:prope#Adverb|prope]] [[wikt:en:hiems#Latin|hieme]] [[wikt:en:confectus#Latin|confecta]],
**すでに、ほぼ冬は過ぎ去り、
*cum ipso anni tempore ad [[wikt:en:gerendus#Latin|gerendum]] bellum [[wikt:en:vocaretur#Latin|vocaretur]] et ad hostem [[wikt:en:proficisci#Latin|proficisci]] [[wikt:en:constituisset#Latin|constituisset]],
**<small>(カエサルが)</small>まさにその時季に戦争を遂行するために呼び寄せられて、敵の方へ発つことを決意していたときに、
*<u>sive</u> eum ex [[wikt:en:palus#Latin|paludibus]] [[wikt:en:silva#Latin|silvis]]<nowiki>que</nowiki> [[wikt:en:elicio#Latin|elicere]] <u>sive</u> [[wikt:en:obsidio#Latin|obsidione]] [[wikt:en:premo#Latin|premere]] [[wikt:en:posset#Latin|posset]],
**<u>あるいは</u><small>(敵を)</small>沼地や森林から誘い出せるか、<u>あるいは</u>包囲により圧倒することができるか、というときに、
**:<span style="color:#009900;">(訳注:sive ~ sive …「あるいは~、あるいは…」)</span>
*[[wikt:en:legatus#Latin:_noun|legati]] ad eum [[wikt:en:princeps#Latin:_noun|principes]] [[wikt:en:Haedui#Latin|Haeduorum]] [[wikt:en:veniunt#Latin|veniunt]]
**[[w:ハエドゥイ族|ハエドゥイー族]]の領袖たちが使節として彼<small>〔カエサル〕</small>のもとへやって来る。
*[[wikt:en:oratum#Latin:_supine|oratum]], ut maxime [[wikt:en:necessarius#Latin:_unavoidable|necessario]] tempore [[wikt:en:civitas#Latin|civitati]] [[wikt:en:subveniat#Latin|subveniat]]<!--;-->:
**きわめて緊急の時に、部族を助けてくれるように、と頼むために。
:
; ハエドゥイー族の救援要請(以下、間接話法)
*<!--❸--><sup>(3)</sup> [[wikt:en:summus#Latin|summo]] esse in [[wikt:en:periculum#Latin|periculo]] rem,
**事態は最大の危機にある。
*quod, cum [[wikt:en:singulus#Latin|singuli]] [[wikt:en:magistratus#Latin|magistratus]] [[wikt:en:antiquitus#Latin|antiquitus]] [[wikt:en:creari#Latin|creari]] atque [[wikt:en:regius#Latin|regiam]] [[wikt:en:potestas#Latin|potestatem]] <u>annum</u> [[wikt:en:obtineo#Latin|obtinere]] [[wikt:en:consuessent#Latin|consuessent]],
**──というのは、昔から一人ずつの統領が選出されて、一年ごとに支配権力に就くことが常であったのに、
**:<span style="color:#009900;">(訳注:[[ガリア戦記 第1巻#16節|第1巻16節]]によれば、ウェルゴブレトゥス [[w:la:Vergobretus|Vergobretus]]という最高官職が毎年選ばれて大権を司る。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:annum#Latin|annum]] だが、<br> β系写本では [[wikt:en:annuam#Adjective|annuam]] となっている。)</span>
*duo [[wikt:en:magistratus#Latin|magistratum]] [[wikt:en:gerant#Latin|gerant]]
**2名が統領を司り、
*et se [[wikt:en:uterque#Latin|uterque]] eorum legibus <u>creatum esse</u> [[wikt:en:dicat#Latin:_speak|dicat]].
**彼らの双方ともに自分は法により<small>〔合法的に〕</small>選出されたのであると言っているのだから──。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:creatus#Latin|creatum]] esse だが、<br> β系写本では esse は省かれている。)</span>
: <!-- [[wikt:en:| -->
{{wikipedia|en:Convictolitavis}}
*<!--❹--><sup>(4)</sup> Horum esse alterum [[wikt:en:Convictolitavis#Latin|Convictolitavem]], [[wikt:en:florens#Latin|florentem]] et [[wikt:en:inlustris#Latin|inlustrem]] [[wikt:en:adulescens#Noun|adulescentem]]<!--,-->;
**彼らの一方は、コンウィクトリタウィスで、声望があり、秀でた青年である。
*alterum [[wikt:en:Cotus#Latin|Cotum]], [[wikt:en:antiquissimus#Latin|antiquissima]] familia [[wikt:en:natus#Latin:_born|natum]]
**他方は、コトゥスで、とても古くからの家系に生まれて、
*atque ipsum hominem summae [[wikt:en:potentia#Latin|potentiae]] et magnae [[wikt:en:cognatio#Latin|cognationis]],
**自身も最大勢力と多くの縁戚関係をもつ人物であり、
*cuius frater Valetiacus proximo anno eundem [[wikt:en:magistratus#Latin|magistratum]] [[wikt:en:gesserit#Latin|gesserit]].
**その兄弟ウァレティアクスは前年に同じ統領を司っていたのである。
: <!-- [[wikt:en:| -->
*<!--❺--><sup>(5)</sup> Civitatem esse omnem in [[wikt:en:arma#Latin|armis]];
**部族は皆が武装している。
*[[wikt:en:divisus#Latin|divisum]] [[wikt:en:senatus#Latin|senatum]], divisum [[wikt:en:populus#Latin:_people|populum]], <u>suas</u> [[wikt:en:cuiusque#Latin|cuiusque]] eorum [[wikt:en:clientela#Latin|clientelas]].
**評議会も分裂し、民衆も分裂し、彼ら<small>〔2名〕</small>の<small>(それぞれの)</small>庇護民となっている。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の suas は主要写本ωの記述だが、より劣った写本では in suas となっている。)</span>
*[[wikt:en:quodsi#Latin|Quodsi]] [[wikt:en:diutius#Latin|diutius]] [[wikt:en:alatur#Latin|alatur]] [[wikt:en:controversia#Latin|controversia]],
**もしこれ以上、紛争が進められれば、
*fore uti pars cum parte civitatis [[wikt:en:confligat#Latin|confligat]].
**部族の派閥と派閥が激突することになるであろう。
*Id ne [[wikt:en:accidat#Etymology_1|accidat]], [[wikt:en:positus#Latin|positum]] in eius [[wikt:en:diligentia#Latin|diligentia]] atque [[wikt:en:auctoritas#Latin|auctoritate]].
**それが起こらないかは、彼(カエサル)の入念さと影響力にかかっている。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===33節===
*<span style="background-color:#ffd;">[[/注解/33節]] {{進捗|00%|2026-10-04}}</span>
;カエサルがハエドゥイー族の権力をコンウィクトリタウィスに与える
:
; カエサルが、ハエドゥイー族の内紛を危惧する
*<!--❶--><sup>(1)</sup> Caesar, <u>etsi</u> a bello atque hoste [[wikt:en:discedo#Latin|discedere]] [[wikt:en:detrimentosus#Latin|detrimentosum]] esse [[wikt:en:existimabat#Latin|existimabat]],
**カエサルは、戦争や敵から離れることは損害をもたらすものである、と考えていたのではあるが、
*<u>tamen</u> non [[wikt:en:ignorans#Latin|ignorans]], [[wikt:en:quantus#Latin|quanta]] ex [[wikt:en:dissensionibus#Latin|dissensionibus]] [[wikt:en:incommodum#Noun|incommoda]] [[wikt:en:oriri#Latin|oriri]] [[wikt:en:consuessent#Latin|consuessent]],
**しかしながら、[[wikt:ja:内訌|内訌]]からどれほどの災厄が生じることが常であるか、知らないではなかったし、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:etsi#Latin|etsi]] ~, [[wikt:en:tamen#Latin|tamen]] …「~ではあるが、しかしながら…」)</span>
*ne [[wikt:en:tantus#Latin|tanta]] et [[wikt:en:tam#Latin|tam]] [[wikt:en:coniunctus#Latin:_participle|coniuncta]] [[wikt:en:populus#Latin|populo]] [[wikt:en:Romanus#Adjective|Romano]] [[wikt:en:civitas#Latin|civitas]],
**──これほど大きく、これほどローマ人民と協同している<small>(ハエドゥイーの)</small>{{ruby|部族国家|キーウィタース}}が、
*quam ipse semper [[wikt:en:aluisset#Latin|aluisset]] [[wikt:en:omnis#Latin|omnibus]]<nowiki>que</nowiki> rebus [[wikt:en:ornasset#Latin|ornasset]],
**彼らのことを<small>(カエサル)</small>自身は常に助成して、かつあらゆる事柄で敬意を表していたのだが、
*ad [[wikt:en:vis#Latin|vim]] atque [[wikt:en:arma#Latin|arma]] [[wikt:en:descenderet#Latin|descenderet]],
**<small>(彼らが内紛という)</small>暴力や戦乱に沈み込まないように、
*atque ea pars, quae [[wikt:en:minus#Latin:_adverb|minus]] sibi [[wikt:en:confideret#Latin|confideret]], [[wikt:en:auxilia#Latin|auxilia]] a [[wikt:en:Vercingetorix#Latin|Vercingetorige]] [[wikt:en:arcesseret#Latin|arcesseret]],
**かつ、自分たちにとって劣勢だと確信している一派が[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の支援を呼び寄せないように──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ne ~ civitas, ~ descenderet, ~ arcesseret「~部族が、~沈まないように、~招かないように」)</span>
*huic rei [[wikt:en:praevertendus#Latin|praevertendum]] [[wikt:en:existimavit#Latin|existimavit]],
**この事柄は<small>(戦争遂行よりも)</small>優先されるべき、と考えた。
:
; ハエドゥイー族の内紛を沙汰すべく、カエサル自らが赴く
*<!--❷--><sup>(2)</sup> et, quod [[wikt:en:lex#Latin|legibus]] [[wikt:en:Haedui#Latin|Haeduorum]] iis, qui summum [[wikt:en:magistratus#Latin|magistratum]] [[wikt:en:obtinerent#Latin|obtinerent]], [[wikt:en:excedo#Latin|excedere]] ex finibus non [[wikt:en:liceret#Latin|liceret]],
**──というのは、[[w:ハエドゥイ族|ハエドゥイー族]]の法により、最高官職に就いている者は領土から出ることを許されないので──
*ne [[wikt:en:aliquid#Latin:_pronoun|quid]] de [[wikt:en:ius#Latin:_justice|iure]] aut de [[wikt:en:lex#Latin|legibus]] eorum [[wikt:en:deminuisse#Latin|deminuisse]] [[wikt:en:videretur#Latin|videretur]],
**<small>(カエサルが)</small>彼らの法令あるいは法制について何ら軽視したとは思われないように、
[[画像:FR-58-Decize29.JPG|thumb|right|250px|デケティア([[w:la:Decetia|Decetia]])すなわち現在のドスィーズ([[w:fr:Decize|Decize]])の景観。[[w:ハエドゥイ族|ハエドゥイー族]]の版図であった[[w:ニエーヴル県|ニエーヴル県]]の南部にあり、リゲル川(現[[w:ロワール川|ロワール川]])のほとりに位置している。]]
*ipse in [[wikt:en:Haedui#Latin|Haeduos]] [[wikt:en:proficisci#Latin|proficisci]] [[wikt:en:statuit#Latin|statuit]]
**<small>(カエサル)</small>自身がハエドゥイー族のもとに出発することを決心した。
*[[wikt:en:senatus#Latin|senatum]]<nowiki>que</nowiki> omnem et <u>quos inter [[wikt:en:controversia#Latin|controversia]] [[wikt:en:esset#Latin:_be|esset]]</u>
**かつ、<u>評議会</u>の全員、および紛争が介在しているところの者たちを
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:部族国家の合議制統治機関を、カエサルの『ガリア戦記』では<br> ローマの元老院になぞらえて [[wikt:en:senatus#Latin|senatus]] と呼んでいるが、<br> 区別して「評議会」と訳す。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:quos inter ~ は、関係節の関係代名詞 quos が<br> 前置詞 inter の前に出ている語順。)</span>
*ad se [[wikt:en:Decetia#Latin|Decetiam]] [[wikt:en:evocavit#Latin|evocavit]].
**デケティアの自分<small>〔カエサル〕</small>のもとへ呼び出した。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:デケティア [[w:la:Decetia|Decetia]] は、現在の[[w:en:Decize|Decize]] ドシーズ(ドゥスィズ<ref>Decize の発音は [[wikt:fr:Decize|Decize]] を参照せよ。</ref>)であると考えられている。)</span>
:
*<!--❸--><sup>(3)</sup> Cum prope omnis civitas eo [[wikt:en:convenisset#Latin|convenisset]], [[wikt:en:doceretur#Latin|doceretur]]<nowiki>que</nowiki>
**部族のほぼすべての<small>(主だった)</small>者たちがそこに集まっていたときに、<small>(以下のことが)</small>報知された。
*[[wikt:en:paucus#Latin|paucis]] [[wikt:en:clam#Latin|clam]] [[wikt:en:convocatus#Latin|convocatis]] [[wikt:en:alius#Latin|alio]] loco, [[wikt:en:alius#Latin|alio]] tempore atque [[wikt:en:oportuerit#Latin|oportuerit]],
**わずかな者たちが密かに、あるべきはずとは別の場所、別の時に呼び集められて、
*[[wikt:en:fratrem#Latin|fratrem]] a [[wikt:en:fratre#Latin|fratre]] [[wikt:en:renuntiatus#Latin|renuntiatum]] <span style="color:#009900;">[esse]</span>,
**兄により弟<small>(の就位)</small>が告げられたというのだ。
**:<span style="color:#009900;">(訳注:前年に統領であった兄ウァレティアクスによって<br> 弟コトゥスの統領への就位が告げられたということであろう。)</span>
*<span style="font-size:11pt;">cum leges <u>duo</u> ex una familia [[wikt:en:vivus#Latin|vivo]] [[wikt:en:utroque#Latin|utroque]] <u>non solum</u> [[wikt:en:magistratus#Latin|magistratus]] [[wikt:en:creari#Latin|creari]] [[wikt:en:vetarent#Latin|vetarent]], <u>sed etiam</u> in [[wikt:en:senatus#Latin|senatu]] esse [[wikt:en:prohiberent#Latin|prohiberent]],</span>
**<span style="font-size:11pt;">──法が、一家族の2名が双方とも存命中に、統領に選出されるのを禁じるだけでなく、<u>評議会</u>にいることも禁じているのに──</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:non [[wikt:en:solum#Latin:_adverb|solum]] ~ [[wikt:en:sed#Latin|sed]] [[wikt:en:etiam#Latin|etiam]] …「~のみならず、…もまた」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、χ・β系写本や写本B・M・Sでは [[wikt:en:duo#Latin|duo]] だが、<br> 写本L・Nでは [[wikt:en:duos#Latin|duos]] となっている。)</span>
*[[wikt:en:Cotus#Latin|Cotum]] [[wikt:en:imperium#Latin|imperium]] [[wikt:en:depono#Latin|deponere]] [[wikt:en:coegit#Latin|coegit]]<!--,-->;
**(カエサルは)コトゥスに支配権を放棄することを強要した。
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> [[wikt:en:Convictolitavis#Latin|Convictolitavem]], qui per [[wikt:en:sacerdos#Latin|sacerdotes]] [[wikt:en:mos#Latin|more]] [[wikt:en:civitas#Latin|civitatis]] [[wikt:en:intermissus#Latin|intermissis]] [[wikt:en:magistratus#Latin|magistratibus]] [[wikt:en:esset#Latin:_be|esset]] [[wikt:en:creatus#Latin|creatus]],
**コンウィクトリタウィスは、統領が空位になったときに、部族の規則により、<u>祭司</u>を通じて選出されたので、
**:<span style="color:#009900;">(訳注:ここでいう祭司 sacerdos が[[ガリア戦記 第6巻#13節|第6巻13節]]以下で説明された[[w:ドルイド|ドルイド]]と同じか否かは不詳である。)</span>
*[[wikt:en:potestas#Latin|potestatem]] [[wikt:en:obtineo#Latin|obtinere]] [[wikt:en:iussit#Latin|iussit]].
**<small>(カエサルは彼に)</small>権力の座に就くことを命じた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===34節===
*<span style="background-color:#ffd;">[[/注解/34節]] {{進捗|00%|2026-10-18}}</span>
;ハエドゥイー族を動員し、ローマ軍をカエサルとラビエーヌスの二隊に分散
: <!-- [[wikt:en:| -->
*<!--❶--><sup>(1)</sup> Hoc [[wikt:en:decretum#Latin|decreto]] [[wikt:en:interpositus#Latin|interposito]],
**この裁定を裁決すると、
*[[wikt:en:cohortatus#Latin|cohortatus]] [[wikt:en:Haedui#Latin|Haeduos]],
**<small>(カエサルは)</small>[[w:ハエドゥイ族|ハエドゥイー族]]を<small>(以下のように)</small>激励して、
*ut [[wikt:en:controversia#Latin|controversiarum]] ac [[wikt:en:dissensio#Latin|dissensionis]] [[wikt:en:obliviscerentur#Latin|obliviscerentur]]
**<span style="color:#009900;font-size:20pt;">【</span><small>(部族内部の)</small>論争や不和を忘れるように、
*atque, omnibus [[wikt:en:omissus#Latin|omissis]] his rebus
**かつ、これらすべての事情を度外視して、
*huic bello [[wikt:en:servirent#Latin|servirent]],
**<small>(ウェルキンゲトリークスとの)</small>この戦争に尽くすように、
*<u>[[wikt:en:ea#Latin:_things|ea]]<nowiki>que</nowiki>, quae</u> [[wikt:en:meruissent#Latin|meruissent]], [[wikt:en:praemium#Latin|praemia]] ab se [[wikt:en:devictus#Latin|devicta]] Gallia [[wikt:en:exspectarent#Latin|exspectarent]],
**ガッリアが征服されたときには<small>(彼らが)</small>得るに値する自分<small>〔カエサル〕</small>からの恩賞を期待するように、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:ea#Latin:_things|ea]]<nowiki>que</nowiki> quae は、最初の印刷本 [[ガリア戦記/注解編/写本と校訂版#Editio_princeps|ed. pr.]] による修正で、<br> α系・ρ系写本では [[wikt:en:ea#Latin:_things|ea]] quae <br> π系写本では atque quae となっている。)</span>
*[[wikt:en:|equitatum<nowiki>que</nowiki> omnem et [[wikt:en:|peditum milia X([[wikt:en:decem#Latin|decem]]) sibi celeriter [[wikt:en:|mitterent,
**<small>(ハエドゥイー族の)</small>騎兵隊のすべてと歩兵1万名を自分<small>〔カエサル〕</small>に速やかに派遣するように、
*quae in [[wikt:en:|praesidiis rei [[wikt:en:|frumentariae causa [[wikt:en:|disponeret,
**それらは糧食供給のために守備隊として分けて置くものである、と<span style="color:#009900;font-size:20pt;">】</span>
*exercitum in duas partes [[wikt:en:|divisit:
**<small>(カエサルは)</small>軍隊を二つの方面軍に分けた。
[[画像:Brioude pont.JPEG|thumb|right|250px|エラウェル川([[w:la:Elaver|Elaver]])こと現在の[[w:アリエ川|アリエ川]](Allier)。ハエドゥイー族領の境辺りでリゲル川([[w:la:Liger|Liger]])こと現[[w:ロワール川|ロワール川]]([[w:fr:Loire (fleuve)|Loire]])に合流する。]]
: <!-- [[wikt:en:| -->
*<!--❷--><sup>(2)</sup> quattuor legiones in [[wikt:en:Senones#Latin|Senones]] [[wikt:en:Parisii#Latin|Parisios]]<nowiki>que</nowiki> [[wikt:en:Labienus#Latin|Labieno]] ducendas dedit,
**4個[[w:ローマ軍団|軍団]]をセノネース族やパリスィイー族のところに率いて行くべく[[w:ティトゥス・ラビエヌス|ラビエーヌス]]に委ねた。
**:<span style="color:#009900;">(訳注:ラビエーヌス [[w:la:Titus Labienus|Labienus]] のこの遠征については<br> [[#57節|57節]]~62節で述べられる。)</span>
*sex ipse in [[wikt:en:Arverni#Latin|Arvernos]] ad oppidum [[wikt:en:Gergovia#Latin|Gergoviam]]
**6個を自身<small>〔カエサル〕</small>がアルウェルニー族のところの城塞都市ゲルゴウィアへ
*secundum flumen [[wikt:en:Elaver#Latin|Elaver]] duxit;
**エラウェル川に沿って率いて行った。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:エラウェル川 [[w:la:Elaver|Elaver]] は現在の[[w:アリエ川|アリエ川]] Allier である。)</span>
*equitatus partem illi [[wikt:en:adtribuit#Latin|adtribuit]], partem sibi reliquit.
**騎兵隊の一部は彼<small></small>(ラビエーヌス)に割り当てて、(残りの)部分は自分のもとに残した。
: <!-- [[wikt:en:| -->
*<!--❸--><sup>(3)</sup> Qua re cognita
**その事を知ると、
*[[wikt:en:Vercingetorix#Latin|Vercingetorix]]
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は
*omnibus interruptis eius fluminis pontibus
**その川のすべての橋を破却しながら、
*ab altera fluminis parte iter facere coepit.
**川の別の側を行軍し始めた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===35節===
'''カエサルが陽動によってエラウェル川に架橋、渡河する'''
*① Cum uterque utrimque exisset exercitus<ref>utrimque exisset exercitus はα系写本の記述で、β系写本では utrique esset exercitui となっている。</ref>, in conspectu, fereque e regione castris castra ponebant<ref>ponebant はα系写本の記述で、β系写本では poneret となっている。</ref>,
**(ガッリア勢とローマ勢の)軍隊の双方が互いに視界にあって、ほぼ真向かいに互いの陣営を設置したときに、
*dispositis exploratoribus, necubi effecto ponte Romani copias traducerent,
**(ウェルキンゲトリークスは)ローマ人の軍勢がどこにも橋を造って渡河しないように、偵察者たちを分けて置き、
*erat in magnis Caesaris<ref>Caesaris はα系写本などの記述で、π系写本などでは Caesari となっている。</ref> difficultatibus res,
**カエサルにとって事態は大きな困難になっていた。
*ne maiorem aestatis partem flumine impediretur,
**夏の大部分(の対岸の敵との交戦)が川により妨げられるのではないか、
*quod non fere ante autumnum [[w:la:Elaver|Elaver]] vado transiri solet.
**というのは、[[w:アリエ川|エラウェル川]]は秋の前はほとんど浅瀬を渡らない習わしであったからだ。
*② Itaque, ne id accideret, silvestri loco castris positis
**こうして、それが生じないように、森林地帯に陣営を設置した。
*e regione unius eorum pontium, quos [[w:la:Vercingetorix|Vercingetorix]] rescindendos curaverat,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]が切り裂かれるように手配していたところの橋の一つの真向かいに。
*postero die cum duabus legionibus in occulto restitit;
**翌日に、2個[[w:ローマ軍団|軍団]]とともに密かなところに留まった。
*③ reliquas copias cum omnibus impedimentis, ut consueverat, misit,
**残りの軍勢(=4個軍団)をすべての輜重とともに、通常のように、出発させた。
*captis<ref>写本(ω)では captis となっているが、Herald Fuchs の校訂版(1932年)では sic collocatis という記述が提案されている。etc.</ref> quibusdam cohortibus, uti numerus legionum constare videretur.
**軍団の数を保っていると(敵から)見られるように、いくつかの<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>を含ませていた。
*④ His quam longissime possent egredi<ref>egredi はα系写本の記述で、β系写本では progredi となっている。</ref> iussis,
**彼ら(4個軍団)には、できる限り遠くまで前進することを命じた。
*cum iam ex diei tempore coniecturam ceperat<ref>ceperat はα系写本の記述で、β系写本では caperet となっている。</ref> in castra perventum,
**すでに、日の時刻から(彼らが)宿営地に到達したと(カエサルが)推測をしたときに、
*isdem sublicis, quarum pars inferior integra remanebat, pontem reficere coepit.
**(前述の)同じ橋杭は、そのより下方の部分が損なわれないで残っていたので、橋を修復し始めた。
*⑤ Celeriter effecto opere
**速やかに工事が成し遂げられて、
*legionibusque traductis et loco castris idoneo delecto
**(2個)軍団が渡河させられて、陣営に適切な地点を選んで、
*reliquas copias revocavit.
**残りの軍勢(=4個軍団)を呼び戻した。
*⑥ Vercingetorix re cognita,
**ウェルキンゲトリークスは事態を知って、
*ne contra suam voluntatem dimicare cogeretur,
**自らの意向に反して(ローマ勢と)争闘することを強いられないように、
*magnis itineribus antecessit.
**強行軍で(ゲルゴウィアに向けて)先行した。
===36節===
[[画像:FR-63-Gergovie.JPG|thumb|right|300px|[[w:ゲルゴウィア|ゲルゴウィア]]([[w:la:Gergovia|Gergovia]])すなわち現在のジェルゴヴィ高地([[w:fr:Plateau de Gergovie|Plateau de Gergovie]])の[[w:ピュイ=ド=ドーム県|ピュイ=ド=ドーム県]]県道978号(D978)からの眺望。19世紀の[[w:ウジェーヌ・ストッフェル|ウジェーヌ・ストッフェル]]大佐(colonel Eugène Stoffel)の発掘調査によって、城砦やローマ軍の溝の遺構などが発見され、当地がゲルゴウィアの古戦場だと確認された。]]
[[画像:Siège_GergovieI_-52.png|thumb|right|300px|ゲルゴウィアにおける両軍の布陣図。山の頂にある城塞都市に隣接してガッリア諸部族の陣営(黄色部分)、右方にローマ軍の大きな陣営(赤色部分)と左下にローマ軍の小さな陣営(赤色部分)が見える。推定される位置関係は19世紀の[[w:ウジェーヌ・ストッフェル|ストッフェル]]大佐の発掘調査に依拠しており、小陣営があった地点は現在のラ・ロシュ=ブランシュ([[w:fr:La Roche-Blanche (Puy-de-Dôme)|La Roche-Blanche]])だと考えられている。]]
'''両軍がゲルゴウィアの要衝に陣営を築く'''
*① Caesar ex eo loco quintis castris [[w:la:Gergovia|Gergoviam]] pervenit
**カエサルは(渡河した)その地点から5回目の宿営で[[w:ゲルゴウィア|ゲルゴウィア]]に到着した。
*equestrique eo die proelio levi facto,
**(到着した)その日に(ガッリア勢と)軽微な[[w:騎兵|騎兵]]戦を闘って、
*perspecto urbis situ, quae posita in altissimo monte omnes aditus difficiles habebat,
**山の非常に高いところに位置し、すべての接近路を困難なものとしている(ゲルゴウィアの)町の地勢を認識して、
*de expugnatione<ref>expugnatione はα系写本の記述で、β系写本では oppugnatione となっている。</ref> desperavit,
**(拙速に突撃するような)攻略については断念して、
*de obsessione non prius agendum constituit, quam rem frumentariam expedisset.
**糧食調達の整備をするより前には、攻囲について行なうべきでないと決心した。
*② At [[w:la:Vercingetorix|Vercingetorix]], castris prope oppidum in monte<ref>in monte はβ系写本の記述で、α系写本にはない。</ref> positis,
**それに対して、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、山中の城塞都市の近くに陣営を設置して、
*mediocribus circum se intervallis separatim singularum civitatium<ref>civitatium はB・M・L・N写本の記述で、χ・S・β系写本では civitatum となっている。</ref> copias conlocaverat
**自陣の周りに、適切な間隔で個々の部族の軍勢を別々に駐屯させて、
*atque omnibus eius iugi collibus occupatis, qua despici poterat,
**その尾根のうち(山麓を)見下ろすことができたすべての丘陵を占有して、
*horribilem speciem praebebat;
**恐ろしげな姿を現わした。
*③ principesque earum civitatium<ref>civitatium はA・Q・B・M・L・N写本の記述で、Q・S・β系写本では civitatum となっている。</ref>, quos sibi ad consilium capiendum delegerat,
**(ウェルキンゲトリークス)自らが作戦を立てるために選び出していた諸部族の領袖たちに
*prima luce cotidie ad se convenire iubebat,
**毎日、夜明けに自分のところへ集まることを命じた。
*seu quid communicandum, seu quid administrandum videretur,
**何らかのことを伝達・協議するのか、あるいは何らかのことを指導するのだと思われる。
**:<span style="color:#009900;">(訳注:seu ~ seu …「あるいは~、あるいは…」)</span>
*④ neque ullum fere diem intermittebat, quin equestri proelio interiectis sagittariis,
**騎兵戦に弓兵を介在させることを、ほとんどどの日も中断せずに、
*quid in quoque esset animi ac virtutis suorum, perspiceretur<ref>perspiceretur はα系写本の記述で、T写本では perspiceret、β系写本では periclitaretur となっている。</ref>.
**どのような心構えや武勇が、配下の者たちのおのおのにあるかを、吟味した。
*⑤ Erat e regione oppidi collis sub ipsis radicibus montis
**山のその麓の下方に、城塞都市の真向かいに、丘陵があって、
*egregie munitus atque ex omni parte circumcisus;
**あらゆる方面から周囲が険しくて、(その地形により)すばらしく護られていた。
*quem si tenerent nostri, et aquae magna parte et pabulatione libera prohibituri hostes videbantur.
**もし、それを我が方(ローマ勢)が占めれば、水源の大半と自由な糧秣徴発から敵たちを妨げるであろうと思われた。
*⑥ Sed is locus praesidio ab his, non nimis firmo, tenebatur.
**だが、その地点は、彼ら(ガッリア勢)により、大して強力ではない守備隊で占められていた。
*⑦ Tamen silentio noctis Caesar ex castris egressus,
**にもかかわらず(昼間ではなく)夜の静けさのうちに、カエサルは陣営から出撃して、
*priusquam subsidio ex oppido veniri posset,
**城塞都市(のそばの陣営)から援兵に来られるより前に、
*deiecto praesidio potitus loco duas ibi legiones conlocavit
**守備隊を追い出して、地点を占拠して、そこに2個[[w:ローマ軍団|軍団]]を駐屯させた。
*fossamque duplicem duodenum pedum a maioribus castris ad minora perduxit,
**12[[w:ペース (長さ)|ペース]](=約3.6mの幅)の二重の堀を、より大きな陣営から(この丘陵の)より小さな陣営へ至らしめた。
*ut tuto ab repentino hostium incursu singuli commeare possent.
**敵たちの不意の襲撃から安全に、1人1人が往来することができるように。
===37節===
'''ハエドゥイー族のコンウィクトリタウィスがガッリア同盟軍に内応する'''
*① Dum haec ad [[w:la:Gergovia|Gergoviam]] geruntur,
**これらがゲルゴウィアのところでなされている間に、
*Convictolitavis [[w:la:Haedui|Haeduus]],
**[[w:ハエドゥイ族|ハエドゥイー族]]のコンウィクトリタウィスは、
*cui magistratum adiudicatum a Caesare demonstravimus,
**その者はカエサルによって統領として承認されたと([[#33節|33節]]で)既述したが、
*sollicitatus ab Arvernis pecunia cum quibusdam adulescentibus conloquitur,
**[[w:アルウェルニ族|アルウェルニー族]]により金銭でそそのかされて、ある若者たちと談判した。
*quorum erat princeps Litaviccus atque eius fratres,
**その者たちの領袖は[[w:リタウィックス|リタウィックス]]とその兄弟たちであり、
*amplissima familia nati adulescentes.
**とても強大な一族に生まれた若者たちだった。
*② Cum his praemium communicat
**彼らとともに(アルウェルニー族からの)報酬を共有して、
*hortaturque, ut se liberos et imperio natos meminerint.
**自分たちが自由民で支配層の生まれであるのを思い起こせ、と鼓舞した。
*③ Unam esse Haeduorum civitatem, quae certissimam Galliae victoriam distineat<ref>distineat はM・N・π・R写本などの記述で、Q・U写本などでは destineat 、A・B・S写本などでは dedistineat などとなっている。</ref>;
**ハエドゥイーの部族国家は、ガッリアの至極確実な勝利を阻んでいる唯一のものであり、
*eius auctoritate reliquas contineri;
**その声望により、ほかの(同盟部族の)ものたちが(ローマ側に)保持されているが、
*qua traducta locum consistendi Romanis in Gallia non fore.
**それが(ガッリア勢に)引き入れられることによって、ガッリアにおいてローマ人が留まり続ける場はないであろう。
*④ Esse nonnullo se Caesaris beneficio adfectum,
**自分はカエサルの少なからぬ恩義をかけられているが、
*sic tamen, ut iustissimam apud eum causam obtinuerit;
**しかし、彼(カエサル)のもとで至極合法的な理由を手に入れたまでであり、
*sed plus communi libertati tribuere.
**しかし、(ガッリアの)共通の自由に従うことの方がより大きい。
*⑤ Cur enim potius Haedui de suo iure et de legibus ad Caesarem disceptatorem quam Romani ad Haeduos veniant?
**なぜ実際、ハエドゥイー族は自らの法令や法制について、ローマ人がハエドゥイー族へ来るよりむしろ、カエサルを仲裁者とするのか?
*⑥ Celeriter adulescentibus et oratione magistratus et praemio deductis,
**若者たちは速やかに、統領の演説と報酬によって導き入れられた。
*cum se vel principes eius consilii fore profiterentur,
**自分たちがその謀計の首謀者にすらなろうと申し出たときに、
*ratio perficiendi quaerebatur,
**(謀計を)成し遂げる方法が求められた。
*quod civitatem temere ad suscipiendum bellum adduci posse non confidebant.
**というのは、部族がむやみに(ローマ人との)戦争実行へ動かされることができるとは確信していなかったからだ。
*⑦ Placuit, ut Litaviccus decem illis milibus, quae Caesari ad bellum mitterentur, praeficeretur atque ea ducenda curaret,
**リタウィックスに、カエサルに戦争のために派遣されるあの(歩兵)1万名を指揮させ率いさせるのが良いとされた。
**:<span style="color:#009900;">(訳注:歩兵1万名については[[#34節|34節]]を参照。)</span>
*fratresque eius ad Caesarem praecurrerent.
**彼の兄弟たちは、カエサルのところへ先立って行った。
*Reliqua qua ratione agi placeat constituunt.
**残りのことが、どのようなやり方で行なわれるのが良いかが決められた。
===38節===
'''リタウィックスの鼓舞でハエドゥイー族の歩兵1万が挙兵する'''
*① Litaviccus accepto exercitu
**リタウィックスは(1万名の)歩兵隊を受け取って、
*cum milia passuum circiter XXX(triginta)<ref>XXX(triginta) はα系写本の記述で、β系写本では XL(quadraginta) となっている。</ref> ab<ref>ab は写本(ω)の記述であるが、モイゼル(Henricus Meusel)は a を提案している。</ref> [[w:la:Gergovia|Gergovia]] abesset,
**[[w:ゲルゴウィア|ゲルゴウィア]]から約30[[w:ローママイル|ローママイル]](=45km弱)離れたところに来たときに、
*convocatis subito militibus lacrimans,
**兵士たちを突然に呼び集めて、泣きながら、
*② "Quo proficiscimur," inquit, "milites?
**「兵士らよ、どこへ我々は進むのか?」と言った。
*Omnis noster equitatus, omnis nobilitas interiit;
**「我が方(ハエドゥイー族)のすべての[[w:騎兵|騎兵隊]]とすべての高貴な者たちは滅んだ。
*principes civitatis, [[w:la:Eporedorix|Eporedorix]] et Viridomarus,
**部族の領袖たち、エポレドリクスとウィリドマルスは、
*insimulati proditionis ab Romanis indicta causa interfecti sunt.
**裏切りの罪を着せられて、ローマ人たちによって、弁解の余地なく殺されてしまったのだ。
**:<span style="color:#009900;">(訳注:indicta causa「弁解の余地なく」)</span>
*③ Haec ab ipsis<ref>ipsis はα系写本の記述で、β系写本では his となっている。</ref> cognoscite, qui ex ipsa caede fugerunt;
**これは、その虐殺から逃げて来た当人たちから聞き知ってくれ。
*nam ego fratribus atque omnibus meis propinquis interfectis
**なぜなら、私は、兄弟たちやすべての我が親族たちが殺されて
*dolore prohibeor, quae gesta sunt, pronuntiare."
**悲嘆により、なされたことを物語ることを妨げられているからだ。」
*④ Producuntur hi<ref>hi はφ・β系写本の記述で、A写本では ii 、Q写本では hii となっている。</ref>, quos ille edocuerat quae dici vellet,
**彼(リタウィックス)が言って欲しいことを教え込んでいた者たちが連れ出されて来て、
*atque eadem, quae Litaviccus pronuntiaverat, multitudini exponunt:
**リタウィックスが物語ったのと同じことを群衆に説明した。
*⑤ multos<ref>multos はα系写本の記述で、β系写本では omnes となっている。</ref> equites [[w:la:Haedui|Haeduorum]] interfectos, quod conlocuti cum Arvernis dicerentur;
**ハエドゥイー族の多くの騎兵たちは、アルウェルニー族と談判したと言われたので、殺された、と。
*ipsos se inter multitudinem militum occultasse atque ex media caede fugisse.
**(彼ら)自身は、兵士ら多数の間に身を隠して、虐殺の最中から逃げて来たのだ、と。
*⑥ Conclamant Haedui et Litaviccum obsecrant, ut sibi consulat.
**ハエドゥイー族の者たちは叫び声を上げて、リタウィックスに、自分たちに(どうするべきか)助言するように懇願した。
*"Quasi vero" inquit ille "consilii sit res, ac non necesse sit
**彼は言った「実にあたかも、事態が協議するべきというかのようだ。(協議する)必要はないのだ。
*nobis Gergoviam contendere et cum Arvernis nosmet coniungere.
**我々にとって、ゲルゴウィアに急行して、アルウェルニー族と我々が合流することは。
*⑦ An dubitamus, quin nefario facinore admisso Romani iam ad nos interficiendos concurrant?
**非道の悪行を犯したローマ人がもはや我々を殺戮するために襲いかかって来ることを疑うのかね?
*⑧ Proinde, si quid in nobis animi est,
**それゆえに、もし我々に何らかの心構えがあるならば、
*persequamur eorum mortem, qui indignissime interierunt,
**とても不面目に滅びた者たちの死に仇討ちしようではないか。
*atque hos latrones interficiamus."
**かの略奪者たち(ローマ人)を誅殺しようではないか。」
*Ostendit cives Romanos, qui eius praesidii fiducia una erant<ref>erant は写本(ω)の記述であるが、モムゼン(Mommsen)らは ierant を提案している。</ref>:
**(リタウィックスは)彼の護衛を信頼して一緒にいたローマ市民たちを示した。
*⑨ Continuo<ref>Continuo はβ系写本の記述で、α系写本にはない。</ref> magnum numerum frumenti commeatusque diripit,
**ただちに、(ローマ市民たちの)糧食や必需品の多数を略奪して、
*ipsos crudeliter excruciatos interficit.
**当人たちを残酷に拷問して殺した。
*⑩ Nuntios tota civitate Haeduorum dimittit,
**ハエドゥイー族の伝令たちを、部族全体にわたって遣わして、
*in<ref>in はβ系写本の記述だが、α系写本にはない。</ref> eodem mendacio de caede equitum et principum permovet<ref>permovet はL・N写本の記述だが、B写本では permanet 、χ・M・S・β系写本などでは permonet となっている。</ref>;
**騎兵や領袖たちの虐殺について、同じ嘘によって扇動した。
*hortatur ut simili ratione atque ipse fecerit suas iniurias persequantur.
**(リタウィックス)自身がしたのと同様のやり方で、自分たちの(受けた)無法に仇討ちするようにと鼓舞した。
===39節===
'''エポレドリクスがハエドゥイー勢1万の寝返りをカエサルに知らせる'''
*① [[w:la:Eporedorix|Eporedorix]] [[w:la:Haedui|Haeduus]], summo loco natus adulescens et summae domi potentiae,
**[[w:ハエドゥイ族|ハエドゥイー族]]の[[w:エポレドリクス|エポレドリクス]]は、最高の身分に生まれた青年で、本国で最高の権勢にあった。
*et una Viridomarus, pari aetate et gratia, sed genere dispari,
**とともに、[[w:ウィリドマルス|ウィリドマルス]]も、同じ年輩で、同様に敬意を受けていたが、異なる階級であった。
*quem Caesar ab Diviciaco sibi traditum ex humili loco ad summam dignitatem perduxerat,
**カエサルは彼を[[w:ディウィキアクス|ディウィキアクス]]により託されて、低い身分から最高の地位へと引き立てていた。
**:<span style="color:#009900;">(訳注:ディウィキアクスはかつてローマに援助を求めた有力者で、カエサルに殺されたドゥムノリクスの兄弟。)</span>
*in equitum numero convenerant nominatim ab eo evocati.
**(その2人は)彼(カエサル)から名指しで呼び出されて、[[w:騎兵|騎兵]]として(ローマの陣中に)一緒に来ていた。
*② His erat inter se de principatu contentio
**彼ら(2人)には、互いに指揮官の座についての競争があって、
*et in illa magistratuum controversia
**あの統領をめぐる紛争においても
**:<span style="color:#009900;">([[#32節|32節]]~33節を参照。)</span>
*alter pro Convictolitavi, alter pro Coto summis opibus pugnaverant<ref>pugnaverant はα系写本の記述で、β系写本では pugnaverat となっている。</ref>.
**一方は[[w:コンウィクトリタウィス|コンウィクトリタウィス]]のために、他方は[[w:コトゥス|コトゥス]]のために、最大限の助力で奮闘していた。
*③ Ex his Eporedorix cognito Litavicci consilio
**彼らのうちエポレドリクスが[[w:リタウィックス|リタウィックス]]の謀計を知って、
*media fere nocte rem ad Caesarem defert;
**ほぼ真夜中に、事情をカエサルのところへ報知した。
*orat ne patiatur civitatem pravis adulescentium consiliis ab amicitia populi Romani deficere;
**(ハエドゥイーの)部族が青年たちのゆがんだ謀計によってローマ人民の友好から背くことを容認しないように懇願した。
*quod futurum provideat, si se tot hominum milia cum hostibus coniunxerint,
**もし、このように多くの幾千もの同胞が敵たちと協同するならば、(上記の)ことが生じると用心するように、と。
*quorum salutem neque propinqui neglegere,
**(寝返った1万の歩兵たちの)縁者たちは彼らの身の安全をなおざりにすることはないし、
*neque civitas levi momento aestimare posset.
**部族が(寝返った歩兵たちの)影響力を軽く評価できない、と。
===40節===
'''カエサルが4個軍団を率いてハエドゥイー勢1万を制止し、リタウィックスは逃亡'''
*① Magna adfectus sollicitudine hoc nuntio Caesar,
**この知らせにより、大きな不安を感じたカエサルは、
*quod semper [[w:la:Haedui|Haeduorum]] civitati praecipue indulserat,
**常に[[w:ハエドゥイ族|ハエドゥイーの部族]]にとくに気遣っていたので、
*nulla interposita dubitatione legiones expeditas quattuor equitatumque omnem ex castris educit;
**何らためらいを差しはさまずに、戦備を整えた4個[[w:ローマ軍団|軍団]]と[[w:騎兵|騎兵隊]]すべてを陣営から進発させた。
*② nec fuit spatium tali tempore ad contrahenda castra,
**このような情勢で、陣営を縮小するための余地はなかった。
**:<span style="color:#009900;"> (訳注:[[#36節|36節]]で、カエサルはゲルゴウィアの大きな陣営および敵に近い小さな陣営を6個軍団で守っていた。)</span>
*quod res posita in celeritate videbatur;
**というのは、事態は迅速さにかかっていると思われたからだ。
*C.(Gaium) Fabium legatum cum legionibus duabus castris praesidio relinquit.
**総督副官[[w:ガイウス・ファビウス|ガイウス・ファビウス]]を2個軍団とともに陣営の守備に残しておいた。
*③ Fratres Litavicci cum comprehendi iussisset,
**(カエサルは)リタウィックスの兄弟たちを拘束することを命じていたのだが、
*paulo ante reperit ad hostes fugisse.
**少し前に(ゲルゴウィアの)敵たちのところへ去ったことを探り出した。
*④ Adhortatus milites ne necessario tempore itineris labore permoveantur,
**(カエサルは)緊急の時に、行軍の労苦により乱されないように、兵士たちを激励して、
*cupidissimis omnibus progressus milia passuum [[w:la:Viginti quinque|XXV]] agmen Haeduorum conspicatus<ref>conspicatus はα系写本の記述で、β系写本では conspicatur となっている。</ref>
**皆がとても熱中していたので、25[[w:|ローママイル]](約37km)進んで、ハエドゥイー族の隊列を視認した。
*immisso equitatu iter eorum moratur atque impedit
**騎兵隊を突進させて、彼ら(ハエドゥイー勢)の行軍を妨げて、停止させた。
*interdicitque omnibus ne quemquam interficiant.
**(ハエドゥイー勢を)誰一人殺さないように(ローマ勢の)皆に禁じた。
*⑤ [[w:la:Eporedorix|Eporedorigem]] et Viridomarum, quos illi interfectos existimabant,
**彼ら(ハエドゥイー勢)が、殺されたものと考えていた者たち、[[w:エポレドリクス|エポレドリクス]]と[[w:ウィリドマルス|ウィリドマルス]]に、
*inter equites versari suosque appellare iubet.
**(ハエドゥイー勢の)騎兵たちの間を歩き回って、味方に呼びかけることを命じた。
*⑥ His cognitis et Litavicci fraude perspecta Haedui manus tendere,
**彼ら(2人)に気付いて、リタウィックスのごまかしを見通して、ハエドゥイー族の者たちは手を差し出して、
*deditionem significare et proiectis armis mortem deprecari incipiunt.
**降伏の意を表して、武器を投げ出して、死を赦免されることを求め始めた。
*⑦ Litaviccus cum suis clientibus,
**[[w:リタウィックス|リタウィックス]]は、配下の子分たちとともに、
*quibus more Gallorum nefas est etiam in extrema fortuna deserere patronos,
**ガッリア人の風習では、最悪の境遇にあってさえも(子分が自分の)親分を見捨てることは非道であったので、
*[[w:la:Gergovia|Gergoviam]] profugit.
**(親分・子分ともども)[[w:ゲルゴウィア|ゲルゴウィア]]に逃れた。
===41節===
'''副官ファビウスの報告:ゲルゴウィアの敵勢がローマ陣営に襲来'''
*① Caesar nuntiis ad civitatem [[w:la:Haedui|Haeduorum]] missis,
**カエサルは伝令たちを[[w:ハエドゥイ族|ハエドゥイー]]の部族(当局)に遣わして、
*qui suo beneficio conservatos docerent quos iure belli interficere potuisset,
**彼ら(伝令)に、戦時の権限により殺せた者たち(歩兵1万)は(カエサル)自らの恩恵により許されたのだ、と説かせた。
*tribusque horis noctis exercitui ad quietem datis castra ad [[w:la:Gergovia|Gergoviam]] movit.
**(カエサルは)夜の3時間を軍隊に休息のために与えて、陣営を引き払ってゲルゴウィアの方へ向かった。
**:<span style="color:#009900;">(訳注:古代ローマの不定時法では、夏季の夜の3時間は、現在の定時法の3時間よりかなり短い。)</span>
*② Medio fere itinere equites a Fabio missi,
**(ゲルゴウィアへの)道程のほぼ中間のところで、ファビウスから[[w:騎兵|騎兵]]たちが遣わされて来て、
*quanto res in periculo fuerit, exponunt.
**事態がどれほどの危機にあるか、を打ち明けた。
*Summis copiis castra oppugnata demonstrant,
**(ガッリア勢の)最大級の軍勢により(ローマ勢の)陣営が攻撃された、と説明した。
*cum crebro integri defessis succederent
**そのときに(ガッリア勢は)たびたび新たな者たちが疲労した者たちに交代していたが、
*nostrosque adsiduo labore defatigarent,
**我が方(ローマ勢)は絶え間ない労苦により疲れ果てていた。
*quibus propter magnitudinem castrorum perpetuo esset isdem in vallo permanendum.
**彼ら(ローマ勢)にとり、陣営の大きさのために、同じ者たちが防柵の中に留まらざるを得なかった。
**:<span style="color:#009900;">(訳注:カエサルは[[#40節|40節]]②項で「陣営を縮小するための余地はなかった」とあらかじめ弁解している。)</span>
*③ Multitudine sagittarum atque omnis generis<ref>omnis generis はα系写本の記述で、β系写本では omni genere となっている。</ref> telorum multos vulneratos;
**(ガッリア勢からの)矢の多数と飛び道具のあらゆる類いによって(ローマ勢の)多くのものが傷つけられた。
*ad haec sustinenda magno usui fuisse tormenta.
**これに持ちこたえるために、投石器が大いに役立った。
*④ Fabium discessu eorum duabus relictis portis obstruere ceteras
**ファビウスは、彼ら(ガッリア勢)が退却すると、2つの門を残して、ほか(の門)を閉鎖した。
*pluteosque vallo addere et se in posterum diem similemque casum apparare<ref>similemque casum apparare はα系写本の記述で、β系写本では similem ad casum parare となっている。</ref>.
**胸壁を防柵を付け加えて、翌日における似たような状況に備えた。
*⑤ His rebus cognitis Caesar
**これらの事態を知って、カエサルは、
*summo studio militum ante ortum solis in castra pervenit.
**兵士たちの最大級の努力によって、日の出の前に(ゲルゴウィアの)陣営に到着した。
===42節===
'''ハエドゥイー族の者たちが反ローマ暴動を引き起こす'''
*① Dum haec ad [[w:la:Gergovia|Gergoviam]] geruntur,
**これらがゲルゴウィアの辺りでなされている間に、
*[[w:la:Haedui|Haedui]] primis nuntiis ab Litavicco acceptis
**[[w:ハエドゥイ族|ハエドゥイー族]]の者たちは、[[w:リタウィックス|リタウィックス]]からの最初の知らせを受け取ったが、
*nullum sibi ad cognoscendum spatium relinquunt.
**自分たちには(この知らせを)調べるための余地を何ら残さなかった。
*② Impellit alios avaritia, alios iracundia et temeritas
**ある者たちを貪欲さが、ある者たちを激しやすさや無分別が駆り立てた。
*─ quae maxime illi hominum generi est innata ─ ut levem auditionem habeant pro re comperta.
**あの種族の人々はとりわけ、軽率な風聞を確認された事として見なすように、生まれついているのだ。
*③ Bona civium Romanorum diripiunt, caedes faciunt, in servitutem abstrahunt.
**(ハエドゥイー族の者たちは)ローマ市民たちの財産を略奪し、殺戮を行なって、隷属状態に引きずり込んだ。
*④ Adiuvat rem proclinatam Convictolitavis
**(さらに)傾いた事態を[[w:コンウィクトリタウィス|コンウィクトリタウィス]]が助長して、
*plebemque ad furorem impellit, ut facinore admisso ad sanitatem reverti pudeat.
**民衆を狂暴さへと、悪行を犯して冷静さへ引き返すことを恥と思うように、駆り立てた。
*⑤ M.(Marcum) Aristium tribunum militum iter ad legionem facientem
**<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>であるマルクス・アリスティウスが[[w:ローマ軍団|軍団]]のところへ旅しているところを
*fide data ex oppido [[w:la:Cabillonum|Cavillono]] educunt;
**(安全の)保証を与えて、城塞都市カウィッロヌムから連れ出した。
**:<span style="color:#009900;">(訳注:カウィッロヌム Cavillonum はカビッロヌム Cabillonum とも綴り、現在の[[w:シャロン=スュル=ソーヌ|シャロン=スュル=ソーヌ]])</span>
*idem facere cogunt eos, qui negotiandi causa ibi constiterant.
**そこに商売をするために定住していた(ローマ人の)者たちにも同じことをするように強要した。
*⑥ Hos continuo <in><ref>in は写本にないが、近世の活字本から挿入されている。</ref> itinere adorti omnibus impedimentis exuunt;
**直ちに彼らを途中で襲撃して、すべての手荷物を奪い取った。
*repugnantes diem noctemque obsident;
**抵抗する者たちを昼夜にわたって包囲した。
*multis utrimque interfectis
**(ハエドゥイー族とローマ人の)双方とも多くの者たちが殺されて、
*maiorem multitudinem armatorum<ref>armatorum はα系写本の記述で、β系写本では ad arma となっている。</ref> concitant.
**(ハエドゥイー族の)より多くの群衆を武装へと扇動した。
===43節===
'''ハエドゥイー族当局がカエサルに屈服。ガッリア大動乱の予感'''
*① Interim nuntio adlato omnes eorum milites in potestate Caesaris teneri,
**その間に、彼ら(ハエドゥイー族)の兵士すべてがカエサルの権力下で支配されているという知らせがもたらされて、
*concurrunt ad Aristium,
**(ハエドゥイー族当局の者たちは)アリスティウスのところへ急ぎ集まって、
*nihil publico factum consilio demonstrant;
**(ローマ市民に対する襲撃は)何ら公けに企てがなされたものではないと説明した。
*② quaestionem de bonis direptis decernunt,
**(部族当局は、ローマ市民から)略奪された財産についての究明を決定して、
*Litavicci fratrumque bona publicant,
**リタウィックスと兄弟たちの財産を没収し、
*legatos ad Caesarem sui purgandi gratia mittunt.
**カエサルのところへ使節たちを、自分たちを赦免することのために遣わした。
*③ Haec faciunt reciperandorum<ref>reciperandorum はα系写本の記述で、β系写本では recuperandorum となっている。</ref> suorum causa;
**これらを、配下の者たち(=歩兵1万名)を取り戻すために行なったのだ。
*sed contaminati facinore et capti compendio ex direptis bonis,
**しかし(彼らは)悪行に汚染されていて、略奪した財産の利得にとらわれており、
*quod ea res ad multos pertinebat, timore<ref>timore はα系写本の記述で、β系写本では et timore となっている。</ref> poenae exterriti
**その事に多くの者たちが関与していたので、懲罰の恐れに脅かされて、
*consilia clam de bello inire incipiunt
**ひそかに戦争の謀計に取りかかり始めて、
*civitatesque reliquas legationibus sollicitant.
**ほかの諸部族を使節派遣によって、そそのかした。
*④ Quae tametsi Caesar intellegebat, tamen quam mitissime potest legatos appellat;
**カエサルはそのようなことを認識していたけれども、(ハエドゥイー族の)使節たちにできるだけ平静に話しかけた。
*nihil se propter inscientiam levitatemque vulgi gravius de civitate iudicare
**自分は(ハエドゥイー族の)民衆の無知や軽率さのために、部族を何ら厳重に裁断することはない、と。
*neque de sua in [[w:la:Haedui|Haeduos]] benevolentia deminuere.
**自分のハエドゥイー族に対する好意を減ずることはない、と。
*⑤ Ipse maiorem Galliae motum exspectans,
**(カエサル)自身は、ガッリアのより大きな動乱を予期しており、
*ne ab omnibus civitatibus circumsisteretur,
**すべての部族によって包囲されることがないように、
*consilia inibat, quemadmodum ab<ref>ab はχ系写本の記述で、φ系写本では a となっており、β系写本にはない。</ref> [[w:la:Gergovia|Gergovia]] discederet ac rursus omnem exercitum contraheret,
**どのようにゲルゴウィアから撤退して再び軍隊全体を集結するか、策定に取りかかった。
*ne profectio nata ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> timore defectionis similis<ref>similis はα系写本の記述で、β系写本では similisque となっている。</ref> fugae videretur.
**(諸部族の)背反の恐れから生じた出発が、逃亡同然と見られないように。
===44節===
'''ゲルゴウィアの急所の尾根'''
[[画像:Plateau_of_Gergovia.jpg|thumb|center|900px|ゲルゴウィア([[w:la:Gergovia|Gergovia]])すなわち現在のジェルゴヴィ高地([[w:fr:Plateau de Gergovie|Plateau de Gergovie]])の全景(南方のル・クレスト [[w:fr:Le Crest|Le Crest]] から撮影)。<br>画像中央の右下に、ローマ勢が占領して小さい方の陣営を築いていたと推定されているラ・ロシュ=ブランシュ([[w:fr:La Roche-Blanche (Puy-de-Dôme)|La Roche-Blanche]])の丘陵が見える。<br>本節①項で言及されているのは画像の左端に写る丘陵と思われ、尾根伝いにほぼ平坦なゲルゴウィアの山頂(画像中央)に続いている。<br>これらの位置関係の推定は、19世紀の[[w:ウジェーヌ・ストッフェル|ウジェーヌ・ストッフェル]]大佐(colonel Eugène Stoffel)の発掘調査に依拠したものである。]]
[[画像:La_Roche_Blanche.JPG|thumb|right|300px|ローマ勢が占領して小さい方の陣営を築いていたと推定されているラ・ロシュ=ブランシュ([[w:fr:La Roche-Blanche (Puy-de-Dôme)|La Roche-Blanche]])の丘陵]]
*① Haec cogitanti accidere visa est facultas bene rei gerendae<ref>rei gerendae はα系写本の記述で、β系写本では gerendae rei となっている。</ref>.
**(カエサルが)これらを考慮しているときに、事をうまく行なえる可能性が生じたと思われた。
*Nam cum in minora castra operis perspiciendi causa venisset,
**すなわち、(ローマ勢の)小さい方の陣営に、作業を視察するためにやって来たときに、
*animadvertit collem qui ab hostibus tenebatur nudatum hominibus,
**敵たちによって占められていた丘陵が、無人にされているのに気付いた。
*qui superioribus diebus vix prae multitudine cerni poterat.
**それは、前日には、(ガッリア勢の)大勢の者たちのためにほとんど見分けが付けられないものだった。
*② Admiratus quaerit ex perfugis causam,
**(カエサルは)驚いて、(ゲルゴウィアからの)[[w:脱走兵|脱走兵]]たちに理由を尋ねた。
*quorum magnus ad eum cotidie numerus confluebat.
**その者たちの多数は、毎日、彼(カエサル)のところへ群がり集まっていたのだ。
**:<span style="color:#009900;">(訳注:[[#14節|14節]]⑨項で既述のように、ガッリア勢は[[w:兵役逃れ|兵役忌避]]の多さに悩まされていた。)</span>
*③ Constabat inter omnes
**(脱走兵たち)皆の間では同じ意見であった。
*─ quod iam ipse Caesar per exploratores cognoverat ─
**─ すでにカエサル自身が偵察者たちを通して知っていたことであったが ─
*dorsum esse eius iugi prope aequum, sed silvestre<ref>silvestre はβ系写本の記述で、α系写本では hunc silvestrem となっている。</ref> et angustum,
**その尾根の背面はほぼ平地で、しかし森林におおわれて狭く、
*qua esset aditus ad alteram partem oppidi<ref>partem oppidi はα系写本の記述で、β系写本では oppidi partem となっている。</ref>;
**それによって城塞都市の別の方面への出入口となっている、と。
*④ vehementer huic illos loco<ref>vehementer huic illos loco はα系写本の記述で、β系写本では huic loco vehementer illos となっている。</ref> timere nec iam aliter sentire,
**この地帯を彼ら(ガッリア勢)が極度に恐れ、すでに感じていたことには、
*uno colle ab Romanis occupato, si alterum amisissent,
**ローマ人によって一つの丘陵が占領されているので、もしもう一方をも失ったならば、
*quin paene circumvallati atque omni exitu et pabulatione interclusi viderentur;
**(ゲルゴウィアが)ほとんど包囲されて、あらゆる出口と糧秣徴発を阻まれると思われたのである。
*ad hunc muniendum locum<ref>locum はβ系写本の記述で、α系写本にはない。</ref> omnes a [[w:la:Vercingetorix|Vercingetorige]] evocatos.
**この地帯の辺りを防御するために、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]により総勢が召集されていたのだ、と。
===45節===
'''ローマ勢の陽動部隊が敵を引き付け、本隊が敵の本陣を目指す'''
*① Hac re cognita Caesar mittit complures equitum turmas eodem<ref>eodem はβ系写本の記述で、α系写本では eisdem などとなっており、またモイゼル(Meusel)は eo de と解釈している。</ref> media nocte;
**この事を知って、カエサルは多数の[[w:騎兵|騎兵]]<ruby><rb>小隊</rb><rp>(</rp><rt>トゥルマ</rt><rp>)</rp></ruby>を同じところに真夜中に派遣した。
**:<span style="color:#009900;"> (訳注:騎兵小隊 turma は、ローマの同盟部族などからなる騎兵の単位で、30騎ほどからなるとされている。)</span>
*imperat his<ref>his はβ系写本の記述で、α系写本にはない。</ref> ut paulo tumultuosius omnibus locis vagarentur<ref>vagarentur はα系写本の記述で、β系写本では pervagentur となっている。</ref>.
**彼らには、いくらか騒々しく、あらゆる場所を動き回るように命令した。
*② Prima luce magnum numerum impedimentorum ex castris mulorumque produci deque his stramenta detrahi
**夜明けに、陣営から多数の荷馬や[[w:ラバ|ラバ]]を連れ出して、これらから[[w:鞍|荷鞍]]を取り去って、
*mulionesque cum cassidibus equitum specie ac simulatione collibus circumvehi iubet.
**ラバ引きの者たちを鉄兜とともに、騎兵の外見と真似をさせて、丘々を乗り回すことを命じた。
*③ His paucos addit equites, qui latius ostentationis causa vagarentur<ref>vagarentur はα系写本の記述で、β系写本では vagentur となっている。</ref>.
**彼らに少数の騎兵を付き添わせて、より広く見せびらかすために動き回らせた。
*Longo circuitu easdem omnes iubet petere regiones.
**(ラバ引きと騎兵の)皆には、長く迂回して、同じ一帯を目指すことを命じた。
*④ Haec procul ex oppido videbantur, ut erat a Gergovia despectus in castra,
**これらは<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>から遠くに望見され、ゲルゴウィアから(ローマ勢の)陣営が眺められたほどであったが、
*neque tanto spatio certi quid esset explorari poterat.
**これほどの距離のために(ガッリア勢からは)何ごとか確かなことは探り出されなかった。
*⑤ Legionem unam eodem iugo mittit
**(カエサルは)1個[[w:ローマ軍団|軍団]]を同じ尾根に派遣して、
*et paulum progressam inferiore constituit loco silvisque occultat.
**いくらか前進させて低い場所に駐留させ、森林に隠した。
*⑥ Augetur Gallis suspicio
**(これらを見た)ガッリア人には疑念が増されて、
*atque omnes illo ad munitionem copiae traducuntur.
**軍勢のすべてがあそこ(=無人にしていた急所の丘陵)へ防御のために移動した。
*⑦ Vacua castra hostium Caesar conspicatus
**カエサルは敵たちの(ゲルゴウィア山頂の)陣営が空であると気付いて、
*tectis insignibus suorum occultatisque signis militaribus
**配下の者たちの標章を覆い隠し、軍旗を隠して、
*raros milites, ne ex oppido animadverterentur, ex maioribus castris in minora traducit
**兵士たちをまばらに、城塞都市から気付かれないように、大きい方の陣営から小さい方に移動させた。
*legatisque, quos singulis legionibus praefecerat, quid fieri velit, ostendit;
**個々の軍団を指揮させていた<ruby><rb>[[w:レガトゥス|副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>たちに、何がなされることを欲しているかを示した。
*⑧ in primis monet ut contineant milites,
**第一に、兵士たちを抑え留めるように戒めた。
*ne studio pugnandi aut spe praedae longius progrediantur;
**(兵士たちが)戦うことの熱意、あるいは略奪の希望により、より遠くまで進み出ないように、と。
*⑨ quid iniquitas loci habeat incommodi proponit;
**地勢の不利がどれほど敗北を生じるかを示した。
*hoc una celeritate posse vitari<ref>vitari はβ系写本の記述で、α系写本では mutari となっている。</ref>;
**迅速さのみがこれを避けることができる。
*occasionis esse rem, non proelii.
**事の成否は、戦闘にではなく、好機にかかっている。
*⑩ His rebus expositis signum dat
**これらの事柄を説明して、(副官たちに進軍の)号令を出した。
*et ab dextra parte alio ascensu eodem tempore Haeduos mittit.
**右の方面からは、別の登り道を(ローマ軍本隊と)同時に[[w:ハエドゥイ族|ハエドゥイー族]](の騎兵)を派遣した。
===46節===
'''ローマ軍の本隊が防壁を越えて、敵陣の一部を占拠'''
*① Oppidi murus ab<ref>ab はB・M・L・N写本の記述で、β系写本では a となっている。</ref> planitie atque initio ascensus recta regione,
**(ゲルゴウィアの)<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の城壁は、平地や登り道の始まりから真っ直ぐに(=直線距離で)、
*si nullus amfractus<ref>amfractus はα系写本の記述で、β系写本では anfractus となっている。</ref> intercederet, mille CC(mille ducenti)<ref>mille CC(=1200) はα系写本の記述で、β系写本では CC(=200)となっている。</ref> passus aberat;
**もし何らの湾曲が間になければ、1200[[w:パッスス|パッスス]](=約1.8km)離れていた。
*② quicquid huc circuitus ad molliendum clivum accesserat<ref>accesserat は写本(ω)の記述だが、オットー・ゼール [[w:de:Otto Seel|Otto Seel]] の校訂では accesserit としている。</ref>,
**ここに(山の斜面の)傾斜を緩和するために、何らかの回り道が付け加わっていて、
*id spatium itineris augebat.
**その道のりの距離を増していた。
*③ A medio fere colle in longitudinem, ut natura montis ferebat,
**丘陵のほぼ真ん中から、山の地形が作り出したかのように、長きにわたって、
*ex grandibus saxis sex pedum murum qui nostrum<ref>nostrum は中世の写本(ω)の記述だが、近世の版では nostrorum となっている。</ref> impetum tardaret,
**大きな石垣からなる6[[w:ペース (長さ)|ペース]](=約1.8m)もの、我が方(ローマ勢)の突進を遅らせる防壁を、
*praeduxerant Galli,
**ガッリア人は引いて来ており、
*atque inferiore omni spatio vacuo relicto
**(その石垣の防壁)より下方のすべての空間は人気なく残されていて、
*superiorem partem collis usque ad murum oppidi densissimis castris compleverant.
**丘陵のより上方の部分を、城塞都市の城壁の方へ続けざまに、とても密集した(各部族ごとの)陣営で満たしていた。
*④ Milites dato signo celeriter ad munitionem perveniunt
**(ローマ人の)兵士たちは号令を与えられて、速やかに(石垣の)防壁のところへ到達して、
*eamque transgressi trinis castris potiuntur;
**それを越えて行って、3つの(部族ごとの)陣営を占拠した。
*⑤ ac tanta fuit in castris capiendis<ref>castris capiendis はα系写本の記述で、β系写本では capiendis castris となっている。</ref> celeritas,
**(3つの)陣営を奪取することにおいて、これほどにも迅速さがあったので、
*ut Teutomatus, rex Nitiobrogum, subito in tabernaculo oppressus,
**その結果、[[w:ニティオブロゲス族|ニティオブロゲス族]]の王[[w:テウトマトゥス|テウトマトゥス]]は、[[w:テント|天幕]]において突然に襲われて、
*ut meridie conquieverat, superiore corporis parte nudata<ref>nudata はα系写本の記述で、β系写本では nuda となっている。</ref>
**昼寝をしていたが、上半身は裸のままで、
*vulnerato equo vix se ex manibus praedantium militum eriperet.
**傷付けられた馬によって、略奪している(ローマ人)兵士の手から、やっと自らを救い出した。
===47節===
'''血気にはやるローマ兵たちの猪突猛進、ガッリア女たちの命乞い'''
*① Consecutus id quod animo proposuerat
**心に決めていたことを達成したので、
*Caesar receptui cani iussit
**カエサルは退却ラッパを吹くことを命じた。
*legionique decimae, quacum erat, contionatus signa constituit.
**彼とともにいた[[w:第10軍団エクェストリス|第10軍団]]に呼びかけて、軍旗を停止した。
**:<span style="color:#009900;">(訳注:第10軍団はガッリア戦争初期からの最古参の軍団。軍旗を停止するとは、進軍を止めること。)</span>
*② Ac<ref>ac はα系写本の記述で、β系写本では at となっている。</ref> reliquarum legionum milites non exaudito<ref>exaudito はα系写本の記述で、β系写本では audito となっている。</ref> sono tubae,
**ほかの[[w:ローマ軍団|軍団]]の兵士たちは、ラッパの響きを聞き取れなかった。
*quod satis magna valles intercedebat,
**というのは、十分に大きな峡谷が間にあったからである。
*tamen ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> tribunis militum legatisque, ut erat a Caesare praeceptum, retinebantur;
**しかしながら、<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>たちや<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>たちにより、カエサルから指図されていたように、制止されていた。
*③ Sed elati spe celeris victoriae et hostium fuga et superiorum temporum secundis proeliis
**だが(兵士たちは)迅速な勝利の希望や、敵たちの逃亡や、それ以前のときの順調な戦闘により、高慢になっていて、
*nihil adeo arduum sibi esse existimaverunt<ref>esse existimaverunt はα系写本の記述で、β系写本では existimabant となっている。</ref>, quod non virtute consequi possent,
**自分たちにとって、武勇で達することができないほどの困難なものはまったく何もない、と考えており、
*neque finem prius sequendi fecerunt quam muro oppidi portisque adpropinquarunt.
**(ゲルゴウィアの)城塞都市の城壁や城門に近付くまでは、追及を終結させなかった。
*④ Tum vero ex omnibus urbis partibus orto clamore,
**すると、まさに(ゲルゴウィアの)町のあらゆる方面から叫び声が発せられて、
*qui longius aberant, repentino tumultu perterriti,
**(城内の)遠い方に離れていた者たちは、予期せぬ騒ぎに脅えており、
*cum hostem intra portas esse existimarent,
**敵(=ローマ人)が城門の内側にいると考えたので、
*sese ex oppido eiecerunt.
**城塞都市から急ぎ出た。
*⑤ Matres familiae de muro vestem argentumque iactabant
**家庭の母親たちは、城壁から衣類や貨幣をたびたび投げやった。
*et pectore nudo prominentes passis manibus obtestabantur Romanos,
**そして胸を裸にして(城壁の上に)進み出て、手を伸ばしてローマ人たちに哀願した。
*ut sibi parcerent
**自分たちを容赦するように、
*neu, sicut Avarici fecissent, ne a mulieribus quidem atque infantibus abstinerent;
**(ローマ人が)アウァーリクムでしたように女たちや子供たちでさえも赦免しないことのないように、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
**:<span style="color:#009900;">(訳注:ローマ人がアウァーリクムでした行為については、[[#28節|28節]]④項を参照。)</span>
*⑥ nonnullae de muris<ref>muris はα系写本の記述で、β系写本では mure となっている。</ref> per manus demissae sese militibus tradebant.
**少なからぬ者たちは、城壁から手で降ろされて、(ローマ人)兵士たちに身を任せた。
[[画像:Gergovie_mur_pano2.jpg|thumb|center|700px|ゲルゴウィア([[w:la:Gergovia|Gergovia]])すなわち現在のジェルゴヴィ高地([[w:fr:Plateau de Gergovie|Plateau de Gergovie]])で発掘された城壁の遺構。]]
*⑦ L.(Lucius) Fabius centurio legionis VIII(octavae),
**[[w:第8軍団アウグスタ|第8軍団]]の<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby>であるルキウス・ファビウスは、
*quem inter suos eo die dixisse constabat
**配下の者たちの間で、その日、(以下のように)言ったことが知られていた。
*excitari se Avaricensibus praemiis neque commissurum, ut prius quisquam murum ascenderet,
**自分はアウァーリクムの恩賞に奮い立たせられて、何者かが(自分)より早く城壁を登るようなことは生じさせない、と。
*tres suos nactus manipulares
**(ファビウスは)同じ隊の兵士である3人の配下と遭遇して、
**:<span style="color:#009900;">(訳注:manipulares は「[[w:マニプルス|歩兵中隊]]の」とも解されるが、ここでは「同じ隊の兵士」という意味であろう。)</span>
*atque ab his sublevatus murum ascendit,
**彼らによって持ち上げられて城壁を登った。
*hos<ref>hos はα系写本の記述で、π系写本では eos 、ρ系写本では eo となっている。</ref> ipse rursus singulos exceptans in murum extulit.
**彼らは(ファビウス)自身が再び1人ずつ引き出して、城壁に導き上げた。
===48節===
'''ガッリア勢が城塞都市に引き返して、防戦に努める'''
*① Interim hi<ref>hi はα系・π系・R写本の記述で、U写本では ii となっている。</ref> qui ad alteram partem oppidi, ut supra demonstravimus, munitionis causa convenerant,
**その間に、前に述べたように、<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の別の方面へ、防御のために集結していた(ガッリア勢の)者たちは、
**:<span style="color:#009900;">(訳注:[[#45節|45節]]⑥項で述べられている。)</span>
*primo exaudito clamore,
**初めに叫び声を聞き取り、
*inde etiam crebris nuntiis incitati oppidum ab Romanis teneri,
**さらに、城塞都市がローマ人たちによって占領されたという頻繁な知らせにさえも駆り立てられて、
*praemissis equitibus magno concursu<ref>concursu はα系写本の記述で、β系写本では cursu となっている。</ref> eo contenderunt.
**[[w:騎兵|騎兵]]たちを先遣して、(歩兵たちも)駆けに駆けて、そこ(=城塞都市)へ急いだ。
[[画像:Auvergne_Gaul_coin_CdM.jpg|thumb|right|300px|[[w:アルウェルニ族|アルウェルニー族]]の兵士が刻まれた貨幣([[w:ビブリオテーク・ナショナル|仏国立図書館]]貨幣部所蔵)]]
*② Eorum ut quisque primus venerat,
**彼らの(城塞都市に)到着した者から順々に
**:<span style="color:#009900;">(訳注:quisque primus「最初の者ごとに;順々に」)</span>
*sub muro consistebat suorumque pugnantium numerum augebat.
**城壁の下に陣取って、味方の戦う者たちの数を増した。
*③ Quorum cum magna multitudo convenisset,
**その者たちの大群集が集結したときに、
*matres familiae quae paulo ante Romanis de muro manus tendebant,
**少し前にはローマ人たちに城壁から手を差し出していた家庭の母親たちが
*suos obtestari
**味方に哀願して、
*et more Gallico passum capillum ostentare liberosque in conspectum proferre coeperunt.
**ガッリアの風習により、髪を広げて示し、子供たちを(男たちの)眼前に運び始めた。
*④ Erat Romanis nec loco nec numero aequa contentio;
**ローマ人たちにとっては、地の利でも(兵の)数でも、対等な闘いはなかった。
*simul et cursu et spatio pugnae defatigati
**と同時に、戦いの疾走や時間(の長さ)に疲弊させられていて、
*non facile recentes atque integros sustinebant.
**(ガッリア勢の)新来かつ無傷の者たちに、容易に持ちこたえられなかった。
===49節===
'''カエサルが劣勢の自軍に副官セクスティウスを増援する'''
*① Caesar cum iniquo loco pugnari hostiumque augeri copias videret,
**カエサルは(戦闘が自軍に)不利な場所で戦われていること、かつ敵方の軍勢が増やされていることを見たので、
*praemetuens suis
**配下の者たちを気遣って、
*ad T.(Titum) Sextium legatum, quem minoribus castris praesidio reliquerat, misit,
**小さい方の陣営に守備として残しておいた<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>ティトゥス・セクスティウスのところへ(伝令を)遣わして、
**:<span style="color:#009900;">(訳注:セクスティウスについては、すでに副官として[[ガリア戦記 第6巻#1節|第6巻1節]]で言及されている。)</span>
*ut cohortes ex castris celeriter educeret
**陣営から(いくつかの)<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>を速やかに進発させるように、
*et sub infimo colle ab dextro latere hostium constitueret,
**かつ丘陵のふもとの下方で、敵方の右の側面に布陣するように、と。
*② ut, si nostros loco depulsos vidisset, quominus libere hostes insequerentur terreret.
**もし我が方が(戦闘の)場所から追いやられたのを見たら、敵方が自由に追撃することにならぬよう脅かすためである。
*③ Ipse paulum ex eo loco cum legione progressus, ubi constiterat,
**(カエサル)自身は、停止していた場所から、軍団とともに少し前進して、
**:<span style="color:#009900;">([[#47節|47節]]①項で既述のように、カエサルとともに停止していたのは[[w:第10軍団エクェストリス|第10軍団]]である。)</span>
*eventum pugnae exspectabat.
**戦いの決着を待っていた。
===50節===
'''激戦の末、敗勢に陥るローマ軍'''
*① Cum acerrime comminus pugnaretur, hostes loco et numero, nostri virtute confiderent,
**(両軍により)激烈に格闘して戦われていて、敵方は地の利と(兵の)数を、我が方(ローマ軍)が武勇を頼りとしていたときに、
*subito sunt Haedui visi ab latere nostris aperto,
**突如として、我が方にとって開けた側面(=右側)から、[[w:ハエドゥイ族|ハエドゥイー族]]の者たち(の姿)が見られた。
**:<span style="color:#009900;">(訳注:「開けた側面から」ab latere aperto とは、兵士の[[w:スクトゥム|長盾]]で覆われていない右側を指す。)</span>
*quos Caesar ab dextra parte alio ascensu manus distinendae causa miserat.
**カエサルがその者たちを右の方面から別の登り道により(敵の)部隊を分散しておくために派遣していたのだ。
**:<span style="color:#009900;">(訳注:この事は、[[#45節|45節]]⑩項で述べられている。)</span>
*② Hi similitudine armorum vehementer nostros perterruerunt,
**彼らの武具が(ガッリア勢のものと)似ていることが、我が方(の兵士たち)を極度に怖れさせた。
*ac tametsi dextris humeris<ref>humeris が写本(ω)の記述であるが、umeris とするのも一般的となっている。</ref> exsertis animadvertebantur, quod insigne pactum<ref>pactum はHellerによる修正提案で、写本(ω)では pacatum となっており、研究者たちにより他の修正も提案されている。</ref> esse consuerat,
**(ハエドゥイー勢は)右の肩を脱いでいるのが視認され、その印は(味方として)定められているのが常であったが、
*tamen id ipsum sui fallendi causa milites ab hostibus factum existimabant.
**けれども(ローマ人の)兵士たちは、それ自体が自分たちを欺くために、敵方によりなされたと考えたのだ。
[[画像:Dorf_La_Roche_Blanche.JPG|thumb|right|300px|ゲルゴウィア([[w:la:Gergovia|Gergovia]])すなわち現在のジェルゴヴィ高地([[w:fr:Plateau_de_Gergovie|Plateau de Gergovie]])の遠景(南方のル・クレスト [[w:fr:Le_Crest|Le Crest]] から撮影)。画像中央がローマ軍が小さい方の陣営を設置していたと推定されているラ・ロシュ=ブランシュ([[w:fr:La_Roche-Blanche_(Puy-de-Dôme)|La Roche Blanche]])の丘陵で、山頂からこの丘陵の辺りが激戦地だったと思われる。現在は山麓にかけて住宅地が広がっている。]]
*③ Eodem tempore L.(Lucius) Fabius centurio quique una murum ascenderant,
**同じ時に、<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby>ルキウス・ファビウスおよび一緒に城壁を登っていた者たちは、
**:<span style="color:#009900;">(訳注:ファビウスらについては、[[#47節|47節]]⑦項で述べられている。)</span>
*circumventi atque interfecti de<ref>de はβ系写本の記述で、α系写本にはない。</ref> muro praecipitabantur.
**(ガッリア勢に)取り囲まれ、殺害されて、城壁から突き落とされた。
*④ M.(Marcus) Petronius, eiusdem legionis centurio,
**同じ[[w:ローマ軍団|軍団]]の百人隊長マルクス・ペトロニウスは、
**:<span style="color:#009900;">(訳注:ファビウスと同じ軍団とは、[[#47節|47節]]⑦項で述べられているように[[w:第8軍団アウグスタ|第8軍団]]である。)</span>
*cum portas<ref>portas は写本(ω)の記述だが、portam と単数形にする修正も提案されている。</ref> excidere conatus esset,
**城門を突き破って出ることを試みていたときに、
*a multitudine oppressus ac sibi desperans multis iam vulneribus acceptis,
**(敵の)大勢によって圧倒されて、すでに多くの傷を受けて自分に絶望しており、
*manipularibus suis, qui illum secuti erant<ref>secuti erant はα系写本の記述で、β系写本では erant secuti となっている。</ref>,
**彼に付き従っていた同じ隊の配下の者たちに、
*"quoniam" inquit "me una vobiscum servare non possum,
**曰く「私と諸君を一緒に救うことはできないのだから、
*vestrae quidem certe vitae prospiciam, quos cupiditate gloriae adductus in periculum deduxi.
**せめて、栄誉の欲に引き寄せられて危険に引きずり込んでしまった諸君の生命にはきっと見通しを与えるであろう。
*⑤ Vos data facultate vobis consulite."
**諸君は(生き延びる)可能性が与えられているから、諸君(自身)を助けたまえ。」
*Simul in medios hostes inrupit duobusque interfectis reliquos a porta paulum submovit.
**と同時に、敵方の真ん中に押し入って、2名を殺害して、ほかの者たちを城門からいくらか退けた。
*⑥ Conantibus auxiliari suis
**(ペトロニウスは自分の)支援を試みる配下の者たちに、
*"frustra" inquit "meae vitae subvenire conamini, quem iam sanguis viresque deficiunt.
**曰く「もはや血も活力も尽き果てた私の生命を助けることを試みているのは無益だ。
*Proinde abite, dum est facultas, vosque ad legionem recipite."
**ゆえに(生き延びる)可能性がある間に立ち去れ。諸君は軍団のところへ退却せよ。」
*Ita pugnans post paulum<ref>paulum はα系・ρ系写本の記述で、π系写本では paululum となっており、paulo という修正提案もされている。</ref> concidit ac suis saluti fuit.
**こうして(ペトロニウスは)戦って少し後で斃れ、配下の者たちにとっては救いとなった。
===51節===
[[画像:Monument_gergovie_fr.jpg|thumb|right|290px|[[w:ゲルゴウィアの戦い|ゲルゴウィア戦勝]]記念碑。[[w:1903年|1903年]]に[[w:クレルモン=フェラン|クレルモン=フェラン市]]出身の建築家ジャン・テラール([[w:fr:Jean Teillard|Jean Teillard]])が、侵略者カエサルを撃退した郷土の英雄[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]に捧げるためにジェルゴヴィ高地([[w:fr:Plateau_de_Gergovie|Plateau de Gergovie]])に建立したものである。]]
[[画像:Plaque_Napoléon_III_Gergovie.jpg|thumb|right|300px|[[w:ゲルゴウィアの戦い|ゲルゴウィア]]の地に残る銘板。フランス語で「[[w:ナポレオン3世|ナポレオン3世]]は、1862年のゲルゴウィアの[[w:オッピドゥム|城塞都市]](跡)訪問の結果、メルドーニュ(Merdogne)の住民たちの要求に対して、1865年1月11日の政令によって、彼らの村にジェルゴヴィ([[w:fr:Gergovie|Gergovie]])の名を与えることを決定した。」<!-- «A la suite de sa visite sur l'oppidum de Gergovia en 1862, Napoléon III, à la demande des habitants de Merdogne, décida d'attribuer à leur village le nom de Gergovie, par décret du 11 janvier 1865.»-->]]
'''カエサルが一敗地に塗れる'''
*① Nostri cum undique premerentur,
**我が方(ローマ軍)は、至る所で圧倒されたので、
*XLVI(sex et quadraginta)<ref>XLVI はα系写本の記述で、β系写本では sex et XL となっている(どちらも46)。</ref> centurionibus amissis deiecti sunt loco.
**46名の<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby> を失い、(激戦の)場所から追いやられた。
*Sed intolerantius Gallos insequentes
**けれども、容赦なく追撃して来るガッリア人たちを
*legio decima tardavit, quae pro subsidio paulo aequiore loco constiterat.
**予備部隊(もしくは要撃部隊)として、いくらか平らな所に陣取っていた[[w:第10軍団エクェストリス|第10軍団]]が妨げた。
**:<span style="color:#009900;">(訳注:[[#47節|47節]]①項で既述のように、第10軍団はカエサルとともに待機していた。)</span>
*② Hanc rursus XIII(tertiae decimae) legionis cohortes exceperunt,
**これ(=第10軍団)をさらに、第13軍団の諸<ruby><rb>[[w:コホルス|大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>が支えた。
*quae ex castris minoribus eductae cum T.(Tito) Sextio legato ceperant locum<ref>ceperant locum はα系写本の記述で、β系写本では locum ceperant となっている。</ref> superiorem.
**それらは<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>ティトゥス・セクスティウスとともに小さい方の陣営から進発してより高い所を占めていたのだ。
**:<span style="color:#009900;">(訳注:[[#49節|49節]]を参照。)</span>
*③ Legiones ubi primum planitiem attigerunt,
**諸[[w:ローマ軍団|軍団]]は、平野に達するや否や、
*infestis contra hostes signis constiterunt.
**敵方に抗して戦備を整えて陣取った。
*④ [[w:la:Vercingetorix|Vercingetorix]] ab radicibus collis suos intra munitiones reduxit.
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、配下の者たちを丘陵の麓から(ゲルゴウィアの)防備の内側に連れ戻した。
*Eo die milites sunt paulo minus [[wikt:la:Septingenti|septingenti]] desiderati.
**その日、(ローマ軍は)700名よりいくらか少ない兵士を失った。
<br>
:<span style="color:#009900;">(訳注:カエサルとウェルキンゲトリークスは、たびたび交えた騎兵戦ではカエサルが勝っているが、</span>
:<span style="color:#009900;">両軍の主力部隊である歩兵どうしが激突したこの戦闘は、地の利もあって、ウェルキンゲトリークスが完勝した。</span>
:<span style="color:#009900;">カエサルは第8軍団など古参の部隊を投入しながら、歴戦の百人隊長と兵士たちを多く失った。)</span>
===52節===
'''敗軍の将カエサルが兵士たちを責める'''
*① Postero die Caesar contione advocata
**翌日にカエサルは(兵士たちの)集会を召集して、
*temeritatem cupiditatemque militum<ref>cupiditatemque militum はα系写本の記述で、β系写本では militum cupiditatemque となっている。</ref> reprehendit,
**兵士たちの無思慮や功名心をとがめた。
*quod sibi ipsi iudicavissent, quo procedendum aut quid agendum videretur,
**というのは、どこへ進み出るべきか、あるいは何がなされるべきと思われるのか、自分たちに対し自分たちで判断してしまったからだ。
*neque signo recipiendi dato constitissent
**退却することの合図を与えられても留まりもせず、
*neque ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> tribunis militum legatisque retineri potuissent.
**<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>や<ruby><rb>[[w:レガトゥス|総督副官]]たち</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>により制止されることもできなかったからだ。
*② Exposuit quid iniquitas loci posset, quod<ref>quod は写本(ω)では quid となっているが、近世以降の校訂者たちは quod と修正提案している。</ref> ipse ad [[w:la:Avaricum Biturigum|Avaricum]] sensisset,
**地の利のなさがどれほど影響するのか、(カエサル)自身がアウァーリクムで判断したことを説明した。
*cum sine duce et sine equitatu deprehensis hostibus
**将帥もなく騎兵隊もない敵たちを探し当てたときに、
**:<span style="color:#009900;">(訳注:[[#18節|18節]]~[[#19節|19節]]を参照。そのときガッリア勢は、ウェルキンゲトリークスが騎兵隊を連れて出て不在であった。)</span>
*exploratam victoriam dimisisset,
**確実であった勝利を諦めたのだ。
*ne parvum modo detrimentum in contentione propter iniquitatem loci accideret.
**地の利のなさのために、闘いにおいてほんのわずかな損害も生じないように(勝利を諦めたのだ)。
*③ Quanto opere<ref>Quanto opere はα系写本の記述で、β系写本では Quantopere となっている。</ref> eorum animi magnitudinem admiraretur,
**彼ら(兵士たち)の大胆さに(カエサルが)驚嘆すればするほど、
**:<span style="color:#009900;">(訳注:quanto opere ~ tanto opere …/quantopere ~ tantopere …「~すればするほど、ますます…」)</span>
*quos non castrorum munitiones, non altitudo montis, non murus oppidi tardare potuisset,
**彼らのことを(ガッリア勢の)陣営の防備も、山の高さも、[[w:オッピドゥム|城塞都市]]の城壁も妨げることができなかったのではあるが、
*tanto opere<ref>tanto opere はα系・T・ρ系写本の記述で、V写本では tantopere となっている。</ref> licentiam arrogantiamque reprehendere,
**それだけにますます(兵士たちの)勝手気ままさや高慢さを(カエサルは)非難する(と言った)。
*quod plus se quam imperatorem de victoria atque exitu rerum sentire existimarent;
**というのは、自分たちが将軍(カエサル)よりも勝利と事の結末についてよく判断していると考えていたからだ。
*④ nec<ref>nec はα系写本の記述で、β系写本では non となっている。</ref> minus se ab<ref>ab はα系写本の記述で、β系写本では in となっている。</ref> milite modestiam et continentiam quam virtutem atque animi magnitudinem desiderare.
**自分(カエサル)は兵士たちに、武勇や大胆さよりも、慎重さや自制心を望んでいるのだ。
*:<span style="color:#009900;">(訳注:カエサルは兵士たちを上のように責めたが、兵士たちを統制できなかった責任は最高司令官にある。)</span>
===53節===
'''カエサルとローマ軍がゲルゴウィアから撤退'''
*① Hac habita contione et ad extremam orationem confirmatis militibus,
**(カエサルは)このような熱弁を振るって、演説の最後に、兵士たちを元気付けた。
*ne ob hanc causam animo permoverentur
**このような理由のために心をかき乱されないように、
*neu, quod iniquitas loci attulisset, id virtuti hostium tribuerent,
**かつ、地の利のなさが引き起こしたことを、敵方の武勇に転嫁しないように、と。
*eadem de profectione cogitans, quae ante senserat,
**(ゲルゴウィアからの)出発については、以前から判断していたのと同じことを考えていて、
**:<span style="color:#009900;">(訳注:[[#43節|43節]]⑤項を参照。ゲルゴウィアからの撤退が敗走同然に見られないようにと、考えていたのであろう。)</span>
*legiones ex castris eduxit aciemque idoneo loco constituit.
**諸[[w:ローマ軍団|軍団]]を陣営から進発させて、適切な場所に戦列を整えた。
*② Cum [[w:la:Vercingetorix|Vercingetorix]] nihilo minus < intra munitiones remaneret neque > in aequum locum descenderet,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]が、防備の内側に留まったばかりか、平らな場所に降りてこなかったので、
**:<span style="color:#009900;">(訳注:< intra munitiones remaneret neque > は、写本になく、近代に挿入提案された修正案の一つ。)</span>
*levi facto equestri proelio, atque secundo, in castra exercitum reduxit.
**軽微な騎兵戦を行なって、順調のうちに軍隊を陣営に連れ戻した。
*③ Cum hoc idem postero die fecisset,
**翌日もこれと同じことを行なって、
*satis ad Gallicam ostentationem minuendam militumque animos confirmandos factum existimans
**ガッリア人の誇示を弱めること、および(ローマ人)兵士の心を強固にすることが十分になされたと考えたので、
*in [[w:la:Haedui|Haeduos]] movit castra.
**[[w:ハエドゥイ族|ハエドゥイー族]]のところに陣営を移(すために出発)した。
*④ Ne tum quidem insecutis hostibus
**そのとき、敵方は決して追撃して来なかったので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*tertio die ad flumen [[w:la:Elaver|Elaver]] pontes<ref>pontes はα系写本の記述で、β系写本では pontem となっている。</ref> reficit<ref>reficit はχ系・B・M・L・N写本の記述で、S写本では refecit となっている。</ref> eoque exercitum<ref>eoque exercitum はα系写本の記述で、β系写本では exercitumque となっている。</ref> traducit<ref>traducit はα系写本の記述で、β系写本では traduxit となっている。</ref>.
**3日目にはエラウェル川(=現在の[[w:アリエ川|アリエ川]])のところで橋を再建して、そこで軍隊を渡らせた。
===54節===
'''ハエドゥイー族のエポレドリクスとウィリドマルスらがカエサルのもとから立ち去る'''
*① Ibi a Viridomaro atque [[w:la:Eporedorix|Eporedorige]] [[w:la:Haedui|Haeduis]] appellatus discit
**そこで(カエサルが)[[w:ハエドゥイ族|ハエドゥイー族]]の[[w:ウィリドマルス|ウィリドマルス]]と[[w:エポレドリクス|エポレドリクス]]から話しかけられて知ったことには、
**:<span style="color:#009900;">(訳注:[[#39節|39節]]~[[#40節|40節]]を参照。ウィリドマルスとエポレドリクスはカエサルの軍勢に従軍していたと思われる。)</span>
*cum omni equitatu Litaviccum ad sollicitandos Haeduos profectum;
**[[w:リタウィックス|リタウィックス]]がすべての騎兵隊とともに、ハエドゥイー族の者たちをそそのかすために出発したという。
**:<span style="color:#009900;">(訳注:[[#40節|40節]]を参照。リタウィックスは謀計が破れたので、ゲルゴウィアに逃れていた。)</span>
*opus esse ipsos antecedere ad confirmandam civitatem.
**部族の支持を固めるために、(彼ら)自身が(リタウィックスより)先行することが必須であるというのだ。
*② Etsi multis iam rebus perfidiam Haeduorum<ref>perfidiam Haeduorum はα系写本の記述で、β系写本では Haeduorum perfidiam となっている。</ref> Caesar<ref>Caesar はβ系写本の記述で、α系写本にはない。</ref> perspectam habebat
**カエサルは、すでに多くの事により、ハエドゥイー族の背信行為を目にして来ており、
**:<span style="color:#009900;">(訳注:Etsi ~, tamen …「~としても、しかしながら…」)</span>
*atque horum discessu admaturari defectionem civitatis existimabat,
**この者たちが(カエサルのもとから)立ち去ることで、(ハエドゥイー)部族の背反が一層促進されると考えていたのだが、
*tamen eos retinendos non censuit<ref>censuit はπ系写本の記述で、α系・ρ系写本では constituit となっている。</ref>,
**しかしながら、彼ら(2人)を束縛するべきではないと考慮した。
*ne aut inferre iniuriam videretur aut dare<ref>dare はα系写本の記述で、β系写本では daret となっている。</ref> timoris aliquam<ref>timoris aliquam はα系写本の記述で、β系写本では aliquam timoris となっている。</ref> suspicionem.
**(カエサルが)無法行為を起こすと思われないように、あるいは(彼らを)怖れているという何らかの疑念を与えないように。
*③ Discedentibus his breviter sua in Haeduos merita exposuit,
**(カエサルは)立ち去る彼らに、ハエドゥイー族における自分の功績を手短に説明した。
*quos et quam humiles accepisset, compulsos in oppida, multatos agris,
**彼らが、どれほど無力であったのを引き受けたことか、[[w:オッピドゥム|城塞都市]]に押し込められ、耕地を台無しにされて、
**:<span style="color:#009900;">(訳注:et ~, et …「~でもあり、…でもある。」)</span>
*omnibus ereptis sociis<ref>sociis「同盟者たち」 はβ系写本の記述で、α系写本では copiis「軍勢」となっている。</ref>, imposito stipendio, obsidibus summa cum contumelia extortis,
**すべての同盟者たちを奪い取られ、貢物を課せられて、たいへんな侮辱とともに人質をもぎ取られていたことか。
*④ et quam in fortunam quamque in amplitudinem deduxisset,
**かつ、どれほどの境遇に、どれほどの高位に(カエサルが)引き上げもしたことか。
*ut non solum in pristinum statum redissent,
**その結果(ハエドゥイー族は)かつての地位に戻っただけでなく、
*sed omnium temporum dignitatem et gratiam antecessisse viderentur.
**(以前の)あらゆる時期の品格や信望をも越えていると思われる。
*His datis mandatis eos ab se dimisit.
**このような訓示を与えて、彼ら(2人)を自分のもとから送り出した。
===55節===
'''エポレドリクスとウィリドマルスらがローマの拠点ノウィオドゥーヌムで寝返る'''
[[画像:Nevers_-_Vue_depuis_la_rive_sud_de_la_Loire.jpg|thumb|center|700px|ノウィオドゥーヌム([[w:la:Nivernum|Noviodunum]])=現・[[w:ヌヴェール|ヌヴェール]]([[w:fr:Nevers|Nevers]])における、リゲル川([[w:la:Liger|Liger]])=現・[[w:ロワール川|ロワール川]]([[w:fr:Loire (fleuve)|Loire]])の岸辺の景観]]
*① [[w:la:Nivernum|Noviodunum]] erat oppidum [[w:la:Haedui|Haeduorum]] ad ripas [[w:la:Liger|Ligeris]] opportuno loco positum.
**ノウィオドゥーヌムは、[[w:ハエドゥイ族|ハエドゥイー族]]の[[w:オッピドゥム|城塞都市]]で、リゲル川(現[[w:ロワール川|ロワール川]])岸の好都合な所に位置していた。
**:<span style="color:#009900;">(訳注:『ガリア戦記』には同名の都市が計3か所載っているが、こちらは現在の[[w:ヌヴェール|ヌヴェール]] Nevers である。<br> 「[[ガリア戦記/ガリア語の名前#Nouio-dūnon|ガリア語の名前 #Nouio-dūnon]]」を参照せよ。)</span>
*② Huc Caesar omnes obsides Galliae, frumentum, pecuniam publicam,
**ここに、カエサルは、ガッリアのすべての人質たちや、糧食、公金、
*suorum atque exercitus impedimentorum magnam partem contulerat;
**および自分と軍隊の[[w:輜重|輜重]]の大部分を運び集めていた。
*③ huc magnum numerum equorum huius belli causa in [[w:la:Italia|Italia]] atque [[w:la:Hispania|Hispania]] coemptum miserat.
**ここに、この戦争のためにイタリアと[[w:ヒスパニア|ヒスパニア]]から買い集めた馬匹の多数を送っておいた。
*④ Eo cum [[w:la:Eporedorix|Eporedorix]] Viridomarusque venissent et de statu civitatis cognovissent,
**そこに、[[w:エポレドリクス|エポレドリクス]]と[[w:ウィリドマルス|ウィリドマルス]]がやって来て、(以下のような)部族の情勢について察知したときに、
[[画像:Bibracte333_crop.JPG|thumb|right|400px|[[w:ビブラクテ|ビブラクテ]]の[[w:オッピドゥム|城塞都市]]跡に整備された城壁の遺構]]
*Litaviccum [[w:la:Bibracte|Bibracti]] ab Haeduis receptum,
**(すなわち)リタウィックスが、ハエドゥイー族の者たちによって[[w:ビブラクテ|ビブラクテ]]に迎え入れられ、
*─ quod est oppidum apud eos maximae auctoritatis ─,
**それ(ビブラクテ)は彼ら(ハエドゥイー族)のもとで最大の影響力を持つ城塞都市であるが、
*Convictolitavem<ref>Convictolitavem はβ系・N写本の記述で、χ系・B・M・S・L写本では Convictolitabim となっている。</ref> magistratum magnamque partem senatus ad eum convenisse,
**統領コンウィクトリタウィスと評議会の大半の者たちが彼(リタウィックス)のもとへ参集し、
*legatos ad [[w:la:Vercingetorix|Vercingetorigem]] de pace et<ref>et は α系・U写本の記述で、π系・R写本では et de となっている。</ref> amicitia concilianda publice missos,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]のところへ和平と友好を仲介するべく公けに使節たちが遣わされた(ことを知った)ので、
*non praetermittendum instans<ref>instans はβ系写本の記述で、α系写本にはない。</ref> tantum commodum existimaverunt.
**(エポレドリクスとウィリドマルスは)眼前にあるこれほどの好機を放置するべきではないと考えたのだ。
*⑤ Itaque interfectis Novioduni custodibus quique eo negotiandi aut itineris<ref>aut itineris はβ系写本の記述で、α系写本にはない。</ref> causa convenerant,
**こうして(2人は)ノウィオドゥーヌムの(ローマ側の)番兵たちや商用や旅行のために来訪していた者たちを殺害し、
*pecuniam atque equos inter se partiti sunt;
**金銭および馬匹を互いに分け合った。
*⑥ obsides civitatum Bibracte ad magistratum deducendos curaverunt;
**(ガッリアの)部族の人質たちをビブラクテの統領のところへ連れて行くように手配した。
*⑦ oppidum, quod a<ref>a はα系写本の記述で、β系写本では ab となっている。</ref> se teneri non posse iudicabant,
**(ノウィオドゥーヌムの)城塞都市は、自分たちによって固守することはできないと判断したので、
*ne cui esset usui Romanis, incenderunt;
**ローマ人たちの有益になることがないように、焼き打ちした。
*⑧ frumenti quod subito potuerunt navibus avexerunt,
**糧食のうち、急いで(運ぶことが)できるものを船団で運び去って、
*reliquum flumine atque incendio corruperunt.
**残りのものを川(に流すこと)により、および焼き打ちにより、役立たないようにした。
*⑨ Ipsi ex finitimis regionibus copias cogere,
**(彼ら)自身は、近隣の地方から軍勢を徴集して、
*praesidia custodiasque ad ripas Ligeris disponere
**リゲルの川岸のたもとへ守備隊や番兵を分配して、
*equitatumque omnibus locis iniciendi timoris causa ostentare coeperunt,
**(ローマ人に)恐怖(の感情)を起こさせるために、[[w:騎兵|騎兵隊]]に誇示をさせ始めた。
*si ab re frumentaria Romanos excludere
**もし、ローマ人たちが糧食調達することを阻止するなら、
*† aut adductos inopia in provincia<ref>in provincia は、α系写本では ex provincia「属州から」、β系写本では provincia となっているが、コンスタン Constans やクロッツ A.Klotz らにより in provincia「属州に」と修正提案されている。</ref> expellere<ref>expellere「駆逐する」 はα系写本の記述で、β系写本では excludere「阻止する、妨げる」 となっている。</ref> † possent.
**あるいは(糧食などの)欠乏により、属州に駆逐することができるなら、と。
**:<span style="color:#009900;">(訳注:† ~ † は、写本の文章が崩れて校訂者を迷わせていることを表す記号。修正提案されている。)</span>
*⑩ Quam ad spem multum eos adiuvabat,
**そのような希望へ、彼らを大いに励まし助けたのは、
*quod Liger ex nivibus creverat,
**リゲル川(の水位)が雪水により増したことで、
*ut omnino vado non posse transiri videretur.
**すべての浅瀬が渡らせられることができないと思われたのである。
===56節===
'''カエサルが属州へは戻らず、増水したリゲル川の渡河を敢行'''
*① Quibus rebus cognitis Caesar maturandum sibi censuit,
**それらの事態を知ると、カエサルは自らにとって(以下のことを)急ぐべきだと考慮した。
*si esset in perficiendis pontibus periclitandum,
**もし、橋を造り上げる最中に(敵勢と闘うという)危険を冒すのであれば、
*ut prius, quam essent maiores eo coactae copiae, dimicaret.
**そこに(敵方の)より多くの軍勢が集結するよりも早く闘うように(急ぐべきだと)。
*② Nam ut commutato consilio iter in provinciam converteret,
**なぜなら、作戦を変更して、属州([[w:ガリア・ナルボネンシス|ガッリア・トラーンサルピーナ]])に進路を方向転換するようにと、
*ne metu quidem<ref>ne metu quidem はα系写本の記述で、β系写本では nemo tunc quidem 、そのほか近代の校訂者によって修正提案が行なわれている。</ref> necessario faciendum<ref>faciendum はβ系写本の記述で、α系写本では faciundum となっている。</ref> existimabat;
**(ガッリア勢への)怖れによって行なうことは決して必要ではない、と考えたのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*cum infamia atque indignitas rei
**(属州に撤退するという)事の不名誉や恥辱が、
**:<span style="color:#009900;">(訳注:cum ~ tum …「~であるのと同様に特に…である」)</span>
*et oppositus mons Cevenna<ref>Cevenna はχ系・U写本の記述で、π系・R写本の記述では Cebenna、φ系写本では Cevennae となっている。</ref> viarumque difficultas impediebat,
**およびケウェンナ山地が相対して道の(通行の)困難なことが、(属州への撤退を)妨げていたし、
**:<span style="color:#009900;">(訳注:ケウェンナ山地 mons Cevenna は現在のセヴェンヌ山地。[[#8節|8節]]を参照。)</span>
*tum maxime quod abiuncto [[w:la:Titus_Labienus|Labieno]] atque iis legionibus, quas una miserat, vehementer timebat.
**同様に、とりわけ[[w:ティトゥス・ラビエヌス|ラビエーヌス]]と一緒に派遣していた諸[[w:ローマ軍団|軍団]]から遠ざけられて、非常に心配してもいたのだ。
*③ Itaque admodum magnis diurnis nocturnisque itineribus confectis
**こうして、昼間も夜間も非常な強行軍を成し遂げて、
*contra omnium opinionem ad [[w:la:Liger|Ligerem]]<ref>Ligerem はα系写本の記述で、β系写本では Ligerim となっている。</ref> venit
**皆の予想に反して、リゲル川(=現[[w:ロワール川|ロワール川]])の辺りにやって来た。
*④ vadoque per equites invento pro rei necessitate opportuno,
**事態の緊急性に見合う好都合な浅瀬を、[[w:騎兵|騎兵]]たちを通じて見出して、
*ut brachia modo atque humeri<ref>humeri はA・φ系・ρ系写本の記述で、Q写本では umeri となっている。</ref> ad sustinenda arma liberi ab aqua esse possent,
**やっと腕と肩を、武器を差し上げるために、水から自由になることができた。
*disposito equitatu, qui vim fluminis refringeret,
**川の流れの圧力を妨げるべく、騎兵隊を分けて置いて、
*atque hostibus primo aspectu perturbatis,
**敵方は(ローマ勢を)初めに一見するや狼狽していたので、
*⑤ incolumem exercitum traduxit
**(カエサルは)軍隊を無傷のまま渡河させた。
*frumentumque in agris et pecoris copiam nactus
**耕地の穀物、および大量の家畜を獲得して、
*repleto his rebus exercitu
**これらの物を軍隊に補充して、
*iter in Senones facere instituit.
**セノネース族のところに行軍することを決めた。
**:<span style="color:#009900;">(訳注:セノネース族の方面には、副官ラビエーヌスと4個軍団を派遣していた。)</span>
==ラビエーヌスのルテティア遠征==
===57節===
'''副官ラビエーヌスがルテティア制圧に向かう'''
*① Dum haec apud Caesarem geruntur,
**これらがカエサルのもとで遂行されている間に、
*[[w:la:Titus Labienus|Labienus]] eo supplemento, quod nuper ex Italia venerat,
**[[w:ティトゥス・ラビエヌス|ラビエーヌス]]は、最近イタリアから来ていた補充兵(予備兵)を
**:<span style="color:#009900;">(訳注:[[#34節|34節]]で既述のようにラビエーヌスはカエサルから4個軍団とともにガッリア北部の制圧を委ねられていた。</span>
**:<span style="color:#009900;">また、[[#1節|1節]]で既述のようにカエサルはイタリア(属州[[w:ガリア・キサルピナ|ガッリア・キサルピーナ]])で部隊を徴兵していた。)</span>
*relicto [[w:la:Agedincum|Agedinci]], ut esset impedimentis praesidio,
**アゲディンクムに、[[w:輜重|輜重]]にとっての守備隊となるように、残留させて、
**:<span style="color:#009900;">(訳注:[[#10節|10節]]で既述のように、カエサルはアゲディンクム(現在の[[w:サンス|サンス]])に全軍の輜重を残していた。)</span>
*cum quattuor legionibus Luteciam<ref>Luteciam はα系写本の記述で、π系写本では Luceciam 、ρ系写本では Lucetiam となっている。[[ガリア戦記 第6巻#3節|第6巻3節]]では Lutetia(m) とも綴られている。</ref> proficiscitur.
**4個軍団とともに[[w:ルテティア|ルテティア]]に出発した。
**:<span style="color:#009900;">(訳注:ルテティア Lutetia は写本ではルテキア Lutetia とも綴られる。[[ガリア戦記 第6巻#3節|第6巻3節]]を参照。)</span>
*Id est oppidum Parisiorum, quod positum est<ref>quod positum est はα系写本の記述で、β系写本では単に positum となっている。</ref> in insula fluminis [[w:la:Sequana|Sequanae]].
**それ(ルテティア)は[[w:パリシイ族|パリスィイ族]]の<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>で、セクアナ川(=現[[w:セーヌ川|セーヌ川]])の中洲に位置している。
*② Cuius adventu ab hostibus cognito
**彼(ラビエーヌス)の到来が敵方により知られると、
*magnae ex finitimis civitatibus copiae convenerunt.
**近隣の諸部族から大軍勢が集結していた。
*③ Summa imperii traditur Camulogeno Aulerco,
**(北部ガッリア勢の)最高司令権は、[[w:アウレルキ族|アウレルキ族]]の[[w:カムロゲヌス|カムロゲヌス]]に託された。
*qui prope confectus aetate
**その者はかなり年老いていたが、
*tamen propter singularem scientiam rei militaris ad eum est honorem evocatus.
**けれども、彼の卓越した軍事の知識のために、顕職に召集されたのだ。
*④ Is cum animadvertisset perpetuam esse paludem,
**彼(カムロゲヌス)は、沼地が絶え間なくあることに気付いていたので、
*quae influeret in Sequanam atque illum omnem locum magnopere impediret,
**それはセクアナ(川)に流れ込み、かの一帯すべてを大いに近付きにくくしていたので、
*hic consedit nostrosque transitu prohibere instituit.
**ここに陣取って、我が方(ローマ勢)が渡河するのを妨げることに決めた。
===58節===
'''ラビエーヌスがメトロセドゥムを陥落させ、ルテティアのガッリア勢と対峙'''
*① [[w:la:Titus Labienus|Labienus]] primo vineas agere, cratibus atque aggere paludem explere
**[[w:ティトゥス・ラビエヌス|ラビエーヌス]]は初めに、<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby>を駆ること、柴や土砂で沼地を埋め立てること、
*atque iter munire conabatur.
**および道を築くこと、を試みた。
*② Postquam id difficilius confieri<ref>confieri はχ系・β系写本の記述で、Q写本では confici となっている。</ref> animadvertit,
**それが成し遂げられることが困難だと気付いた後で、
*silentio e castris tertia vigilia egressus
**(敵に知られないように)静けさのうちに第三夜警時に陣営から進発して、
*eodem, quo venerat, itinere Metlosedum<ref>Metlosedum はコンスタン L.-A. Constans による修正で、π系・U写本では Metiosedum 、α系・ρ系写本では Mellodunum などとなっており、写本により表記がさまざまである。</ref> pervenit.
**やって来たのと同じ道程により、メトロセドゥムに到達した。
**:<span style="color:#009900;">(訳注:メトロセドゥム Metlosedum は、写本によりメティオセドゥム Metiosedum とも綴られ、</span>
**:<span style="color:#009900;">後にはメロドゥーヌム [[w:la:Melodunum|Melodunum]] として知られる。現在の[[w:ムラン|ムラン]] [[w:fr:Melun|Melun]] である。)</span>
*③ Id est oppidum [[w:la:Senones|Senonum]] in insula [[w:la:Sequana|Sequanae]] positum, ut paulo ante de [[w:la:Lutetia|Lutecia]] diximus.
**それはセノネース族の城塞都市で、少し前に[[w:ルテティア|ルテティア]]について述べたように、セクアナ川の[[w:中州|中州]]に位置している。
**:<span style="color:#009900;">(訳注:ルテティアすなわち現在の[[w:パリ|パリ]]の中心部に[[w:シテ島|シテ島]]や[[w:サン=ルイ島|サン=ルイ島]]という[[w:セーヌ川|セーヌ川]]の中州があるように、</span>
**:<span style="color:#009900;">現在のムランの中心部にもサン=テティエンヌ島 [[w:fr:Île Saint-Étienne|Île Saint-Étienne]] というセーヌ川の中州がある。)</span>
*④ Deprensis<ref>deprensis という語形はα系写本の記述で、β系写本では deprehensis となっている。</ref> navibus circiter quinquaginta celeriterque coniunctis
**約50隻の船を探し出して、速やかに結び合わせて(舟橋として)、
*atque eo militibus iniectis
**そこに兵士たちを投入して、
*et rei novitate perterritis oppidanis,
**事の新奇さに<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の者たちは脅えて、
*quorum magna pars erat ad bellum evocata,
**彼ら(住民)の大部分は戦争へ徴集されていた(ため不在であった)ので、
*sine contentione oppido potitur.
**(ラビエーヌスは)闘うことなしに(中州にあるメトロセドゥムの)城塞都市を掌握した。
*⑤ Refecto ponte, quem superioribus diebus hostes resciderant, exercitum traducit
**それ以前の日々に敵方が破却していた橋を再建して、軍隊を(中州から対岸へ)渡らせて、
*et secundo flumine ad Luteciam iter facere coepit.
**川に沿ってルテティアの方へ行軍を始めた。
*⑥ Hostes re cognita ab iis, qui Metlosedo<ref>Metlosedo はコンスタン L.-A. Constans による修正で、β系・S写本では Metiosedo 、χ系写本では Melloduno 、B・M・L・N写本では Ametlodone(あるいは Ametclodone)などとなっている。</ref> fugerant,
**敵方は、メトロセドゥムから逃げて来た者たちから事態を知って、
*Luteciam incendi pontesque eius oppidi rescindi iubent;
**ルテティアを焼打ちすること、その城塞都市の橋を破却すること、を命じた。
*ipsi profecti a palude ad ripas<ref>ad ripas はχ系・B・M・L・N写本の記述で、S・Vおよびρ系写本では in ripas 、T写本では in ripa となっている。</ref> Sequanae
**彼ら自身は、沼地からセクアナの川岸へ出発して、
*e regione Luteciae contra Labieni castra considunt.
**ルテティア(の対岸)に向かってラビエーヌスの陣営に対抗して陣取った。
===59節===
'''ガッリア諸部族が迫り、ラビエーヌスが作戦変更を決断'''
*① Iam Caesar a [[w:la:Gergovia|Gergovia]] discessisse audiebatur,
**すでに、カエサルが[[w:ゲルゴウィア|ゲルゴウィア]]から撤退したことが聞かれていたし、
*iam de [[w:la:Haedui|Haeduorum]] defectione et secundo Galliae motu rumores adferebantur,
**もはや、[[w:ハエドゥイ族|ハエドゥイー族]]の背反や、ガッリアの動乱の順調さについての噂がもたらされていた。
*Gallique in conloquiis
**(当地の)ガッリア人たちは会話の中で、
*interclusum itinere et [[w:la:Liger|Ligeri]] Caesarem inopia frumenti coactum in provinciam contendisse confirmabant.
**カエサルが行軍やリゲル(渡河)を遮られて、糧食の欠乏により属州([[w:ガリア・ナルボネンシス|ガッリア・トラーンサルピーナ]])に急ぐことを強いられた、と確言した。
*② Bellovaci autem defectione Haeduorum cognita,
**一方で、ベッロウァキ族もハエドゥイー族の背反を知って、
**:<span style="color:#009900;">(訳注:ベッロウァキ族は、ハエドゥイー族の仲介によりカエサルに降伏していた。[[ガリア戦記 第2巻#14節|第2巻14節]]~15節を参照。)</span>
*qui iam<ref>qui iam は古典学者 ニコラエス・ハインシウス1世 [[w:en:Nikolaes_Heinsius_the_Elder|Nikolaes Heinsius the Elder]] による修正提案で、χ系・S・β系写本では qui 、B・M・L・N写本では quia となっている。</ref> ante erant per se infideles,
**彼ら自身もすでに以前から(カエサルやローマ人に)忠誠的でなかったが、
*manus cogere atque aperte bellum parare coeperunt.
**手勢を徴集して、公けに戦争を準備することを始めた。
*③ Tum [[w:la:Titus Labienus|Labienus]] tanta rerum commutatione
**そこで、[[w:ティトゥス・ラビエヌス|ラビエーヌス]]はこれほどの事態の変動により、
*longe aliud sibi capiendum consilium, atque antea senserat, intellegebat,
**自分にとって、以前に判断していたのとはまったく別の作戦が立てられるべきだ、と考えた。
**:<span style="color:#009900;">(訳注:aliud ~ atque …「…とは別の~」)</span>
*④ neque iam, ut aliquid adquireret proelioque hostes lacesseret,
**もはや、何らかのものを獲得したり、敵方に戦闘を挑むようにではなく、
**:<span style="color:#009900;">(訳注:neque ut ~, sed ut …「~ようにではなく、…ように」)</span>
*sed ut incolumem exercitum Agedincum reduceret, cogitabat.
**軍隊を無傷のままでアゲディンクム(=現[[w:サンス|サンス]])に連れ戻すように、と考えた。
**:<span style="color:#009900;">(訳注:アゲディンクムには輜重と守備隊が残されていた。[[#10節|10節]]・[[#57節|57節]]を参照。)</span>
*⑤ Namque altera ex parte Bellovaci,
**実際、一方の側からはベッロウァキ族が、
*quae civitas in Gallia maximam habet opinionem virtutis, instabant,
**ガッリアにおいて武勇に最大の評判を持つその部族が、迫りつつあった。
*alteram Camulogenus parato atque instructo exercitu tenebat:
**他方からは、カムロゲヌスが軍隊を準備し、整列させて、進んでいた。
*tum legiones a praesidio atque impedimentis interclusas
**そのとき、(ラビエーヌス麾下の)諸軍団は(アゲディンクムにいる)守備隊や輜重から遮られて、
*maximum flumen distinebat.
**とても大きな(セクアナ)川が阻んでいた。
*⑥ Tantis subito difficultatibus obiectis
**突然に、これほどの困難が投げ出されたので、
*ab animi virtute auxilium petendum videbat.
**武勇の心構えに救いを求めるべきだと(ラビエーヌスは)思った。
===60節===
'''ラビエーヌスが陽動戦術に努める'''
*① Itaque<ref>Itaque はS・β系写本の記述で、α系写本にはない。</ref> sub vesperum consilio convocato
**こうして([[w:ティトゥス・ラビエヌス|ラビエーヌス]]は)夕方に会議を召集して、
*cohortatus, ut ea, quae imperasset, diligenter industrieque administrarent,
**(彼が)命令したことを入念かつ勤勉に従事するように鼓舞した。
*naves, quas [[w:la:Melodunum|Metlosedo]]<ref>Metlosedo はコンスタン L.-A. Constans による修正で、χ系・S・β系写本では Metiosedo 、B・M写本では ameclodone 、L・N写本では a mellodone 、<i>etc</i>. となっている。</ref> deduxerat, singulas equitibus Romanis attribuit,
**[[w:ムラン|メトロセドゥム]]から引いて来ていた船団を、ローマ人騎士たち1人ずつに配分して、
*et prima confecta vigilia IIII(quattuor) milia passuum secundo flumine silentio progredi
**第一夜警時が終わる頃に、4ローママイル(6km弱)下流に静けさのうちに進発すること、
*ibique se exspectari<ref>exspectari はα系・T・ρ系写本の記述で、S・V写本では exspectare などとなっている。</ref> iubet.
**かつ、そこで自分(ラビエーヌス)を待つことを命じた。
*② Quinque cohortes, quas minime firmas ad dimicandum esse existimabat,
**(白兵戦を)闘うためにはあまり強くないと(ラビエーヌスが)考えていた5個<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>
*castris praesidio relinquit;
**陣営にとっての守備隊として残留させた。
*quinque eiusdem legionis reliquas
**同じ軍団の残りの5個(歩兵大隊)を
*de media nocte cum omnibus impedimentis adverso flumine magno tumultu proficisci imperat.
**真夜中から、すべての[[w:輜重|輜重]]とともに、上流の方に大きな喧騒でもって出発することを命令した。
*④ Conquirit etiam lintres;
**小舟さえも探し集めて、
*has magno sonitu remorum incitatas in eandem partem mittit.
**これらを大きな音とともに[[w:櫂|櫂]]を駆って、同じ方面に派遣した。
*Ipse post paulo silentio egressus cum tribus legionibus
**(ラビエーヌス)自身は、少し後で静けさのうちに3個[[w:ローマ軍団|軍団]]とともに進発して、
*eum locum petit, quo naves appelli iusserat.
**船団が停められることを命じていた地点へ行った。
===61節===
'''ラビエーヌスの陽動により、敵将カムロゲヌスが兵力を分散'''
*① Eo cum esset ventum,
**(ラビエーヌスの軍勢が)そこにやって来たときに、
*exploratores hostium, ut omni fluminis parte erant dispositi,
**敵方の偵察者たちが(セクアナ)川の至る所に分けて置かれていたが、
*inopinantes, quod magna subito erat coorta tempestas,
**突然に大きな嵐が生じたので(ローマ勢の襲撃を)予期していなかった者たちは、
*ab<ref>ab はχ系・B・M・L・N写本の記述で、S・β系写本では a となっている。</ref> nostris opprimuntur;
**我が方(ローマ勢)によって不意を襲われたのだ。
*② exercitus equitatusque equitibus Romanis administrantibus, quos ei negotio praefecerat,
**歩兵隊と騎兵隊が、(ラビエーヌスが)任務を指揮させていたローマ人騎士たちの指導により、
*celeriter transmittitur.
**速やかに(セクアナ川を)渡らせられた。
*③ Uno fere tempore sub lucem hostibus nuntiatur
**夜明け前のほぼ一時に(以下のことが)敵方に報知された。
*in castris Romanorum praeter consuetudinem tumultuari
**ローマ人の陣営において、通例に反して、騒がれていること、
*et magnum ire agmen adverso flumine
**大きな隊列が上流の方へ行軍していること、
*sonitumque remorum in eadem parte exaudiri
**(船を漕ぐ)櫂の音が同じ方面で聞き取られたこと、
*et paulo infra milites navibus transportari.
**少し下流で兵士たちが船で(セクアナ川を)渡されたこと、である。
*④ Quibus rebus auditis,
**それらの事態が聞かれて、
*quod existimabant tribus locis transire legiones atque omnes perturbatos defectione [[w:la:Haedui|Haeduorum]] fugam parare,
**(ローマ勢の)諸軍団が3か所で渡河したこと、[[w:ハエドゥイ族|ハエドゥイー族]]の背反により総勢が取り乱して逃亡を準備していること、を考えたので、
*suas quoque copias in tres partes distribuerunt.
**自分たちの軍勢をも3方面に分配した。
*⑤ Nam praesidio e regione castrorum relicto
**すなわち(一隊がローマ勢の)陣営の真向かいに守備隊として残され、
*et parva manu Metlosedum<ref>Metlosedum はQ写本の記述で、χ系・β系写本では Metiosedum 、などとなっている。</ref> versus missa,
**(別の)わずかな手勢が[[w:ムラン|メトロセドゥム]]の方面へ派遣され、
*quae tantum progrediatur<ref>progrediatur はα系写本の記述で、Q・S・β系写本では progrederetur となっている。</ref>, quantum naves processissent,
**(ローマ勢の)船団が進み出るだけ、(ガッリア兵も)前進するようにした。
*reliquas copias contra Labienum duxerunt.
**残りを軍勢をラビエーヌスに対して(カムロゲヌス自身が)率いて行った。
===62節===
'''ラビエーヌスがカムロゲヌス麾下のガッリア勢を各個撃破して、カエサルと合流'''
*① Prima luce et nostri omnes erant transportati
**夜明けに、我が方(ローマ勢)は総勢が(セクアナ川の左岸に)渡されていたし、
*et hostium acies cernebatur.
**敵方の戦列も見分けられた。
*② [[w:la:Titus Labienus|Labienus]] milites cohortatus,
**[[w:ティトゥス・ラビエヌス|ラビエーヌス]]は兵士たちを(以下のように)鼓舞した。
*ut suae pristinae virtutis et tot<ref>tot はS・β系写本の記述で、α系写本にはない。</ref> secundissimorum proeliorum retinerent memoriam<ref>retinerent memoriam はχ系・B・M・L・N写本の記述で、S・β系写本では memoriam retinerent となっている。</ref>
**自分たちのかつての武勇とこのようにとてもうまくいっている諸戦闘を記憶に留めるように、
*atque ipsum Caesarem, cuius ductu saepe numero hostes superassent, praesentem adesse existimarent,
**かつ、その指揮によって何度もしばしば敵方を打ち破って来たカエサル当人が目下居合わせていると考えるように、と。
*dat signum proelii.
**(それから)戦闘の号令を発した。
*③ Primo concursu ab dextro cornu, ubi septima legio constiterat,
**最初の激突は、[[w:第7軍団クラウディア・ピア・フィデリス|第7軍団]]が布陣していた(ローマ軍の)右翼からで、
*hostes pelluntur atque in fugam coniciuntur;
**敵方は撃退されて、逃亡に追いやられた。
*④ ab sinistro, quem locum duodecima legio tenebat,
**第12軍団が場所を占めていた左翼からは、
*cum primi ordines hostium transfixi pilis<ref>pilis はβ系写本の記述で、α系写本では telis となっている。</ref> concidissent,
**敵方の最前列(の兵たち)が投げ槍で突き通されて斃れたのだが、
*tamen acerrime reliqui resistebant
**けれども残りの者たちがとても激烈に抵抗していて、
*nec dabat suspicionem fugae quisquam.
**誰も逃亡の予兆を示さなかった。
*⑤ Ipse dux hostium Camulogenus suis aderat atque eos cohortabatur.
**敵方の将帥カムロゲヌス自身は、麾下の者たちに居合わせて、彼らを激励していた。
*⑥ At<ref>cohortabatur. At はχ系写本などの記述で、別の写本では記述が異なる。</ref> incerto nunc etiam<ref>nunc etiam はB・M・L・N写本の記述で、χ系・S・β系写本では etiamnunc となっている。</ref> exitu victoriae,
**勝敗の帰趨は今もなお不確実だったが、
*cum septimae legionis tribunis esset nuntiatum, quae in sinistro cornu gererentur,
**第7軍団の<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>たちに、左翼で<ruby><rb>出来</rb><rp>(</rp><rt>しゅったい</rt><rp>)</rp></ruby>したことが報告されたときに、
*post tergum hostium legionem ostenderunt signaque intulerunt.
**敵方の背後に(第7)軍団を差し向けて、軍旗を進めた(=進撃した)。
*⑦ Ne eo quidem tempore quisquam loco cessit,
**その時でさえ、(ガッリア勢の)誰も(戦闘の)場から退却しなかった
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*sed circumventi omnes interfectique sunt.
**けれども、総勢が包囲されて(ローマ軍により)殺戮された。
*Eandem fortunam tulit Camulogenus.
**同じ不幸をカムロゲヌスも蒙った。
*⑧ At ii<ref>ii はχ系写本の記述で、他の写本では記述が異なる。</ref>, qui praesidio contra castra Labieni erant relicti,
**これに対して、ラビエーヌスの陣営に対して守備隊として残されていた(ガッリア勢の)者たちは、
*cum proelium commissum audissent, subsidio suis ierunt collemque ceperunt,
**(両軍が)戦闘を交えているのを聞き付けたので、味方の援兵として出て行って、丘陵を占めていたが、
*neque nostrorum militum victorum impetum sustinere potuerunt.
**勝勢の我が方(ローマ軍)の兵士たちの突撃を持ちこたえることができなかった。
*⑨ Sic cum suis fugientibus permixti,
**このようにして、敗走している味方と混じり合ったときに、
*quos non silvae montesque texerunt, ab equitatu sunt interfecti.
**森林や山岳が覆い隠すことのなかったその者たちは、(ローマ側の)騎兵隊によって殺戮された。
*⑩ Hoc negotio confecto Labienus revertitur Agedincum,
**この戦役が成し遂げられると、ラビエーヌスは[[w:サンス|アゲディンクム]]に引き返した。
*ubi impedimenta totius exercitus relicta erant;
**そこには軍隊全体の[[w:輜重|輜重]]が残されていたのだ。
*inde die Ⅲ.<ref>inde die Ⅲ. は近代の校訂者による修正提案で、Q・M・S・N・β系写本では単に inde 、他の写本では別の記述になっている。</ref> cum omnibus copiis ad Caesarem pervenit.
**そこから3日目(=2日後)にすべての軍勢とともにカエサルのところへ到着した。
==ガッリア戦乱の拡大==
===63節===
'''ハエドゥイー族がウェルキンゲトリークスに主導権争いを挑む'''
*① Defectione [[w:la:Haedui|Haeduorum]] cognita bellum augetur.
**[[w:ハエドゥイ族|ハエドゥイー族]]の背反が知られて、戦乱は拡大された。
*② Legationes in omnes partes circummittuntur;
**(ハエドゥイー族らにより)使節たちがあらゆる方面に遣わされまくり、
*quantum gratia, auctoritate, pecunia valent, ad sollicitandas civitates nituntur;
**信望、勢力や金銭によってできる限り、諸部族をそそのかすことに努めた。
**:<span style="color:#009900;">(訳注:quantum ~ valere「~によってできる限り」)</span>
*③ nacti obsides, quos Caesar apud eos deposuerat,
**カエサルが彼ら(ハエドゥイー族)のもとに預けて置いた人質たちを手に入れて、
*horum supplicio dubitantes territant.
**彼ら(人質たち)の処刑(を示唆すること)によって、決心がつかぬ者たちを恐れさせた。
*④ Petunt a [[w:la:Vercingetorix|Vercingetorige]] Haedui, ut ad se veniat rationesque belli gerendi communicet;
**ハエドゥイー族は、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]に、自分たちのところへ来て戦争遂行の戦略を協議するように要求した。
*re impetrata contendunt, ut ipsis summa imperii tradatur.
**その事が成し遂げられると、(ハエドゥイー族)自身に最高司令権が委ねられるように頑張った。
*Et re<ref>et re は近代の校訂者による修正提案で、β系写本では re 、α系写本では et rem となっている。</ref> in controversiam deducta totius Galliae concilium [[w:la:Bibracte|Bibracte]] indicitur.
**その事が論争の状態に置かれて、[[w:ビブラクテ|ビブラクテ]]でのガッリア全体の会合が公示された。
*Eodem conveniunt<ref>Eodem conveniunt はα系写本の記述で、β系写本では単に conveniunt 、etc.となっている。</ref> undique frequentes.
**同じところに至る所からたくさんの者たちが集まって来た。
*⑥ Multitudinis suffragiis res permittitur;
**(最高司令権の)事は衆人の票決に任せられて、
*ad unum omnes Vercingetorigem probant imperatorem.
**衆議一決により、ウェルキンゲトリークスを将軍(最高司令官)として承認した。
**:<span style="color:#009900;">(訳注:ad unum omnes「最後の一人に至るまですべて」)</span>
*⑦ Ab hoc concilio Remi, Lingones, Treveri afuerunt,
**この会合へは、[[w:レミ族|レーミー族]]、リンゴネス族、トレウェリ族が不在であった。
*illi quod amicitiam Romanorum sequebantur,
**前者(レーミー族とリンゴネス族)は、ローマ人との友好を遵守したので(不在であった)。
*Treveri quod aberant longius et ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> [[w:la:Germani|Germanis]] premebantur,
**トレウェリ族は、はるか遠くに離れており、[[w:ゲルマニア|ゲルマニア]]人により圧迫されていた。
*quae fuit causa quare toto abessent bello
**それが、何ゆえに(ウェルキンゲトリークスによる)戦争全体に関与しなかったかの理由であり、
*et neutris auxilia mitterent.
**(ウェルキンゲトリークスとカエサルの)どちら側にも援軍を派遣しなかった。
*⑧ Magno dolore Haedui ferunt se deiectos principatu,
**ハエドゥイー族は、自分たちが盟主の座から遠ざけられて、とても憤懣やるかたなかったし、
*queruntur fortunae commutationem
**境遇の変わりようを嘆いて、
*et Caesaris indulgentiam in se<ref>indulgentiam in se はα系写本の記述で、β系写本では in se indulgentiam となっている。</ref> requirunt
**カエサルの自分たちへの寛大さを惜しんだ。
*neque tamen suscepto bello suum consilium ab reliquis separare audent.
**けれども戦争を引き受けてしまったので、あえて自分たちの作戦計画をほか(の諸部族)と異にしなかった。
*⑨ Inviti summae spei adulescentes Eporedorix et Viridomarus Vercingetorigi parent.
**たいへんな野心を持つ青年たち[[w:エポレドリクス|エポレドリクス]]と[[w:ウィリドマルス|ウィリドマルス]]は、意に反してウェルキンゲトリークスに服従した。
===64節===
'''ウェルキンゲトリークスがガッリア諸部族の誘降・服従を謀る'''
*① Ipse<ref>ipse はα系写本の記述で、β系写本では ille となっている。</ref> imperat reliquis civitatibus obsides denique ei rei constituit diem;
**(ウェルキンゲトリークス)自身は、ほかの諸部族に人質(の供出)を命令して、のみならずその事の期日を決めた。
*huc omnes equites, [[wikt:la:quindecim|XV(quindecim)]] milia numero, celeriter convenire iubet.
**そこに、1万5000名の数のすべての[[w:騎兵|騎兵]]に、速やかに集結することを命じた。
*② Peditatu quem antea habuerit se fore contentum dicit
**(歩兵については)自分は、以前から持っていた[[w:歩兵|歩兵隊]]で満足するであろうと言った。
*neque fortunam temptaturum aut in acie<ref>in acie はα系写本の記述で、β系写本では単に acie となっている。</ref> dimicaturum,
**(歩兵で)武運を試すことはしないであろうし、あるいは野戦で(白兵戦を)闘うこともないであろう、と。
*sed quoniam abundet equitatu,
**しかし、騎兵隊は豊富であるから、
*perfacile esse factu frumentationibus pabulationibusque Romanos prohibere;
**ローマ人たちの糧食・糧秣徴発を妨げることは、とても容易である、と。
*③ aequo modo animo sua ipsi frumenta corrumpant aedificiaque incendant,
**ただ平静な心で、自分たちの穀物を自身で傷めて、(穀物の)建屋を焼打ちするように。
*qua rei familiaris iactura perpetuum imperium libertatemque se consequi videant.
**資産の犠牲により、永久の領有権と自由を自分たちが獲得することを思え、と。
*④ His constitutis rebus
**これらの事が決定されると、
*[[w:la:Haedui|Haeduis]] Segusiavisque, qui sunt finitimi provinciae, decem milia peditum imperat;
**[[w:ハエドゥイ族|ハエドゥイー族]]および(ローマ人の)属州に隣接するセグスィアウィ族には1万の歩兵(の供出)を命令していたが、
*huc addit equites [[wikt:la:octingenti|octingentos]].
**この中に、800騎の騎兵たち(の供出)を付け加えた。
*⑤ His praeficit fratrem Eporedorigis bellumque inferri<ref>inferri はα系写本の記述で、β系写本では inferre となっている。</ref> Allobrogibus iubet.
**彼らをエポレドリクスの兄弟に指揮させて、アッロブロゲス族に戦争をしかけることを命じた。
*⑥ Altera ex parte Gabalos proximosque <u>[[wikt:en:pagus#Latin|pagos]]</u> Arvernorum in Helvios,
**別の方面から、ガバリ族および近隣のアルウェルニー族の諸<u>郷</u>に、ヘルウィイ族のところに(攻め入るように)、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''pagus'' (郷) はここでは、部族の領土の農村区画を指す行政用語<ref name="pagus">''[[w:en:Pagus]]'' 等を参照。</ref>。)</span>
*item Rutenos Cadurcosque ad fines Volcarum Arecomicorum depopulandos mittit.
**同様に、ルテーニー族およびカドゥルキー族に、ウォルカエ・アレコミキ族の領土を荒らしまわるべく派遣した。
*⑦ Nihilo minus clandestinis nuntiis legationibusque Allobrogas<ref>Allobrogas はα系写本の記述で、β系写本では Allobroges となっている。</ref> sollicitat,
**それにもかかわらず、隠密に伝令たちや使節たちにより、アッロブロゲス族を(蜂起を)そそのかした。
*quorum mentes nondum ab<ref>ab はβ系写本の記述で、α系写本では ab となっている。</ref> superiore bello resedisse sperabat.
**彼ら(アッロブロゲス族)の心がかつての戦争からまだ静まっていないことを期待したのだ。
**:<span style="color:#009900;">(訳注:アッロブロゲス族は、BC61年にローマに反旗を翻し、翌BC60年に鎮圧されていた。[[ガリア戦記 第1巻#6節|第1巻6節]]を参照。)</span>
*⑧ Horum principibus pecunias,
**彼らの領袖たちに金銭を(約束し)、
*civitati autem imperium totius provinciae pollicetur.
**さらに部族には(カエサル統治下の)属州全体の支配権をも約束したのだ。
===65節===
'''カエサルと同盟諸部族の防戦。ゲルマニア騎兵を呼び寄せる'''
*① Ad hos omnes casus provisa erant praesidia cohortium duarum et viginti,
**これらすべての出来事に対して、(カエサルは)22個<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>からなる守備隊を用意していた。
*quae ex ipsa coacta<ref>coacta はχ系・β系写本の記述で、φ系写本にはない。</ref> provincia ab L.(Lucio) Caesare legato
**それらは、<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>ルキウス・カエサルによって属州全体から徴集されたもので、
**:<span style="color:#009900;">(訳注:ここでいう属州とは、[[w:ガリア・ナルボネンシス|ガッリア・トラーンサルピーナ]]を指すと思われる。</span>
**:<span style="color:#009900;">ルキウス・ユリウス・カエサル4世 [[w:en:Lucius Julius Caesar IV|Lucius Julius Caesar IV]] は本書の著者カエサルと4代前の高祖父を共有する元執政官。[[w:en:Julii Caesares|Julii Caesares]] を参照。)</span>
*ad omnes partes opponebantur.
**あらゆる方面に対して配置された。
*② Helvii sua sponte cum finitimis proelio congressi pelluntur
**[[w:ヘルウィイ族|ヘルウィイ族]]は、自分たちの意思により、近隣(の諸部族)と戦闘で争って撃退され、
**:<span style="color:#009900;">(訳注:この部族については[[#7節|7節]]~8節を参照。)</span>
*et C.(Gaio) Valerio Domnotauro<ref>Domnotauro はS・L・N写本の記述で、A・B・N写本では Donnotauro 、χ系・π系写本では Donotauro となっており、ρ系写本には記述がない。</ref>, Caburi filio, principe civitatis,
**カブルスの息子で、部族の領袖であるガイウス・ウァレリウス・ドムノタウルス
**:<span style="color:#009900;">(訳注:彼は、ローマとの友好により、ローマ人風の名前を与えられていたのであろう。)</span>
*compluribusque aliis interfectis intra oppida ac muros<ref>ac muros はα系写本の記述で、β系写本では murosque となっている。</ref> compelluntur.
**および他のかなりの者たちが殺戮されて、<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>と城壁の内側に追い込まれた。
*③ Allobroges crebris ad [[w:la:Rhodanus|Rhodanum]] dispositis praesidiis
**[[w:アッロブロゲス族|アッロブロゲス族]]は、ロダヌス(=現[[w:ローヌ川|ローヌ川]])のところへ密に守備隊を分け置いて、
*magna cum cura et diligentia suos fines tuentur.
**たいへんな注意と入念さにより、自分たちの領土を守った。
*④ Caesar quod hostes equitatu superiores esse intellegebat
**カエサルは、敵方が[[w:騎兵|騎兵隊]]で(自軍より)優っていると認識していたので、
*et interclusis omnibus itineribus nulla re ex provincia atque Italia sublevari poterat,
**かつ、すべての道が遮られて、属州やイタリアから何ら支援されることができなかったので、
**:<span style="color:#009900;">(訳注:属州 provincia とはガッリア・トラーンサルピーナ、イタリア Italia とは[[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]のことであろう。)</span>
*trans [[w:la:Rhenus|Rhenum]] in [[wikt:la:Germania|Germaniam]] mittit ad eas civitates, quas superioribus annis pacaverat,
**レヌス(=現[[w:ライン川|ライン川]])の向こう側の[[w:ゲルマニア|ゲルマニア]]に、先年に平定していた諸部族のところへ(使節を)遣わした。
**:<span style="color:#009900;">(訳注:ゲルマニア遠征や平定については、[[ガリア戦記 第4巻#16節|第4巻16節]]~19節、[[ガリア戦記 第6巻#9節|第6巻9節]]~10節を参照。)</span>
*equitesque ab his arcessit et levis armaturae pedites,
**彼らから、騎兵たち、および[[w:ウェリテス|軽い武装の歩兵]]たちを呼び寄せた。
*qui inter eos proeliari consuerant.
**その者ら(軽装歩兵)は、彼ら(騎兵)の間で戦闘することが常であったのだ。
*⑤ Eorum adventu, quod minus idoneis equis utebantur,
**彼ら(ゲルマニア騎兵)が到着すると、(戦闘に)あまり適していない馬を使役していたので、
**:<span style="color:#009900;">(訳注:ゲルマニア人の馬の使用については、[[ガリア戦記 第4巻#2節|第4巻2節]]を参照。)</span>
*a tribunis militum reliquisque equitibus Romanis atque evocatis equos sumit
**<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>たちやほかのローマ人騎士たちや<ruby><rb>再徴集兵</rb><rp>(</rp><rt>エウォカティ</rt><rp>)</rp></ruby>たちから、馬匹を取り上げて、
*[[w:la:Germani|Germanis]]que distribuit.
**ゲルマニア人たちに分配した。
===66節===
'''属州へと南下するカエサル、迎え撃とうとするウェルキンゲトリークス'''
*① Interea dum haec geruntur,
**その間に、これらが出来している間に、
*hostium copiae ex Arvernis
**敵方の(歩兵の)軍勢が(滞陣していたゲルゴウィアの)[[w:アルウェルニ族|アルウェルニー族]]のところから、
*equitesque qui toti Galliae erant imperati conveniunt.
**および全ガッリアの命令されていた[[w:騎兵|騎兵]]たちが、(ウェルキンゲトリークスのところに)集結して来た。
*② Magno horum coacto numero,
**これらの(ガッリア兵の)多数が徴集されて、
*cum Caesar in Sequanos per extremos Lingonum fines iter faceret,
**カエサルが、[[w:セクアニ族|セクアニ族]]のところに(向かって)[[w:リンゴネス族|リンゴネス族]]の領土の外縁を通って行軍していたときに、
**:<span style="color:#009900;">(訳注:属州へは、リンゴネス族と後述のマンドゥビイ族の間を通ってセクアニ族領を通らねばならなかった。)</span>
*quo facilius subsidium provinciae ferri<ref>ferri はα系写本の記述で、β系写本では ferre となっている。</ref> posset,
**(それは)属州(ガッリア・トラーンサルピーナ)に援兵をより容易にもたらせるようにするためであったが、
*circiter milia passuum X(decem) ab Romanis trinis castris [[w:la:Vercingetorix|Vercingetorix]] consedit
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、ローマ人たちから約10ローママイル(15km)のところに、3つの陣営にて陣取った。
*③ convocatisque ad concilium praefectis equitum
**(ウェルキンゲトリークスは)騎兵の指揮官たちを会合へ召集して、
*venisse tempus victoriae demonstrat;
**勝利の時が来たと、明言した。
*fugere in provinciam Romanos Galliaque excedere.
**ローマ人たちは属州に逃亡して、ガッリアから立ち退きつつある、と。
*④ Id sibi ad praesentem obtinendam libertatem satis esse;
**それは、自分たちにとって目下のところ、自由を維持するためには十分であるが、
*ad reliqui temporis pacem atque otium parum profici;
**将来の平和と平穏は不充分にしか得られない。
*maioribus enim coactis copiis reversuros
**なぜなら(ローマ人たちは)より大きな軍勢を徴集して(ガッリアに)戻って来るであろうし、
*neque finem bellandi facturos.
**戦争することに結末をつけることはないであろう。
*Proinde agmine impeditos adorirentur<ref>adorirentur はA・β系写本の記述で、M・L・N写本では adoriantur 、S写本では adorantur 、Q・B・M写本ではadorientur となっている。</ref>.
**それゆえに、(ローマ勢の)行軍によって重荷となっている(輜重隊の)者たちを襲撃するのだ。
*⑤ Si pedites suis auxilium ferant atque in eo morentur, iter facere<ref>facere はα系写本の記述で、β系写本では confici となっている。</ref> non posse;
**もし(ローマ勢の)歩兵たちが味方を支援し、そのことで滞留するならば、(属州へ)行軍することはできない。
*si ─id quod magis futurum confidat─
**もし、─(我は)むしろそうなるであろうと期待することであるが─
*relictis impedimentis suae saluti consulant,
**(ローマ歩兵たちが)[[w:輜重|輜重]]を残して、自分たちの身の安全に意を用いるならば、
*et usu rerum necessariarum et dignitate spoliatum iri.
**必需品の使用や(ローマ人としての)品格をはぎ取られることになる。
*⑥ Nam de equitibus hostium,
**なぜなら、敵方の騎兵については
**<span style="color:#009900;">:(訳注:著者カエサルはここでは、間接話法でありながら、ローマ勢について hostium「敵方の」と表現している。)</span>
*quin nemo eorum progredi modo extra agmen audeat,
**彼ら(ローマ騎兵)のうち誰も、<ruby><rb>行軍縦隊</rb><rp>(</rp><rt>アグメン</rt><rp>)</rp></ruby>の外にすら、あえて進み出ようとしないこと、
*et ipsos quidem non<ref>et ipsos quidem non はα系写本の記述で、β系写本では ne ipsos quidem となっている。</ref> debere dubitare.
**(そのことを、諸君ら)自身は決して疑念を持つことなかれ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*Id quo maiore faciant animo,
**それ(=輜重隊への襲撃)を、より大胆な心構えで実行してもらうために、
*copias se omnes pro castris habiturum et terrori hostibus futurum.
**自分(ウェルキンゲトリークス)が軍勢すべてを陣営の前に保持しておくであろうし、敵方の心胆を寒からしめるであろう。
*⑦ Conclamant equites
**(ガッリア勢の)騎兵たちは(以下のように)叫んだ。
*sanctissimo iure iurando confirmari oportere,
**最も神聖な誓約によって確証されなければならぬ。
*ne tecto recipiatur, ne ad liberos, ne ad parentes, ad<ref>ne ad …, ne ad …, ad が写本(ω)の記述であるが、モイゼル Meusel は ne ad …, ad …, ad と修正提案をしている。</ref> uxorem aditum habeat,
**(以下の者は)家に迎え入れられたり、子供たちや親たちや妻女たちのところへ近づくことがないように。
*qui non bis per agmen hostium perequitasset<ref>perequitasset はα系写本の記述で、β系写本では perequitarit となっている。</ref>.
**敵方(ローマ勢)の隊列を越えて(往復の)2度、騎馬で駆け抜けることがなかった者は。
**:<span style="color:#009900;">(訳注:敵中突破と生還を成し遂げなかった騎兵は、復員してはならない、と誓約したのである。)</span>
===67節===
'''カエサル麾下のゲルマニア騎兵がウェルキンゲトリークスを一蹴'''
*① Probata re atque omnibus iure iurando adactis
**これが賛同されて、(ガッリア騎兵の)皆が誓約させられて、
*postero die in tres partes distributo equitatu
**翌日に、[[w:騎兵|騎兵隊]]を3つの分隊に分配した。
*duae se acies ab duobus lateribus ostendunt,
**2隊は(ローマ勢の左右)2つの側面から<ruby><rb>戦闘隊形</rb><rp>(</rp><rt>アキエス</rt><rp>)</rp></ruby>として現われた。
*una a<ref>a はβ系写本の記述で、α系写本にはない。</ref> primo agmine iter impedire coepit.
**1隊は(ローマ勢の)前衛から行軍を妨げ始めた。
*② Qua re nuntiata
**その事が報告されて、
*Caesar suum quoque equitatum tripertito divisum contra hostem ire iubet.
**カエサルは麾下の騎兵隊おのおのを3つに配分して、敵に対して向かって行くことを命じた。
*Pugnatur una omnibus in partibus.
**(騎兵戦が)同時にすべての方面で戦われた。
*③ Consistit agmen;
**(ローマ勢の)<ruby><rb>行軍縦隊</rb><rp>(</rp><rt>アグメン</rt><rp>)</rp></ruby>は一歩も引かなかった。
*impedimenta intra legiones recipiuntur.
**[[w:輜重|輜重]]は諸[[w:ローマ軍団|軍団]]の内側に後退した。
*④ Si qua in parte nostri laborare aut gravius premi videbantur,
**もし、我が方(ローマ勢)のある部隊が苦戦したり、またはひどく押されぎみだと思われたならば、
*eo signa inferri Caesar aciemque constitui<ref>constitui はα系写本の記述で、β系写本では converti 、T写本では conferri となっている。</ref> iubebat;
**カエサルはそこに進撃して戦列を組織することを命じた。
**:<span style="color:#009900;">(訳注:signa inferre「軍旗を進める、進撃する」)</span>
*quae res et hostes ad insequendum tardabat et nostros spe auxilii confirmabat.
**その事が、敵方が追撃して来るのを遅らせもしたし、我が方が支援の希望により元気付けられもした。
*⑤ Tandem Germani ab dextro latere summum iugum nacti hostes loco depellunt,
**ついに、ゲルマニア人(騎兵)たちが右の側面から尾根の頂きを掌握して、敵方をその場から追いやった。
*fugientes usque ad flumen,
**逃亡する(ガッリア騎兵の)者たちを川の辺りまで(追って)、
*ubi [[w:la:Vercingetorix|Vercingetorix]] cum pedestribus copiis consederat,
**そこには[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]が[[w:歩兵|歩兵]]の軍勢とともに陣取っていたのだが、
*persecuntur<ref>persecuntur はα系写本の記述で、β系写本では persequuntur となっている。</ref> compluresque interficiunt.
**(ゲルマニア騎兵が敵を川辺まで)追撃して、かなりの者たちを殺戮した。
*⑥ Qua re animadversa
**その事が(敵方に)気付かれて、
*reliqui ne circumirentur<ref>circumirentur はA・φ系写本の記述で、Q・β系写本では circumvenirentur となっている。</ref> veriti se fugae mandant.
**(ガッリア勢の)残りの者たちは、包囲されないようにと怖れて、逃亡に身を任せた。
*Omnibus locis fit caedes.
**(こうしてローマ方により)あらゆる場所で虐殺が行なわれた。
*⑦ Tres nobilissimi [[w:la:Haedui|Haedui]] capti ad Caesarem perducuntur:
**[[w:ハエドゥイ族|ハエドゥイー族]]の3人の高位の貴族が捕らえられて、カエサルのところへ連行されて来た。
*Cotus, praefectus equitum, qui controversiam cum Convictolitavi proximis comitiis habuerat,
**コトゥスは騎兵指揮官で、最近の会議でコンウィクトリタウィスと(統領の座をめぐって)係争した。
**:<span style="color:#009900;">(訳注:[[#32節|32節]]~33節を参照。)</span>
*et Cavarillus, qui post defectionem Litavicci pedestribus copiis praefuerat,
**カウァリッルスは、リタウィックスの背反の後に、歩兵の軍勢を指揮していた。
*et Eporedorix, quo duce ante adventum Caesaris Haedui cum Sequanis bello contenderant.
**エポレドリクスは、カエサルの到来以前にハエドゥイー族の将帥としてセクアニ族と戦争を闘っていた。
**:<span style="color:#009900;">(訳注:この人物は、ウィリドマルスとともにカエサルを裏切ったエポレドリクスとは同名異人である。)</span>
==アレスィア攻囲戦==
===68節===
[[画像:Alésia.jpg|thumb|right|300px|[[w:アレシアの戦い|アレスィア古戦場]]であるとほぼ確実視されている仏アリーズ=サント=レーヌ村([[w:fr:Alise-Sainte-Reine|Alise-Sainte-Reine]])近郊のオソワ山(Mont Auxois)という丘陵の西端にある[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]像(<small>[[w:fr:Vercingétorix_(statue d'Aimé Millet)|Statue de Vercingétorix]]</small>)。<small>[http://maps.google.co.jp/?ie=UTF8&ll=47.538579,4.490544&spn=0.001172,0.002401&t=h&z=19&brcurrent=3,0x0:0x0,1 Googleマップ]</small>の航空写真にもこの巨像が写っている。<br>当地はフランス東部[[w:ブルゴーニュ地域圏|ブルゴーニュ地方]][[w:コート=ドール県|コート=ドール県]](<small>[[w:fr:Côte-d'Or|Côte-d'Or]]</small>)のオソワ地域(<small>[[w:fr:Auxois (région)|L'Auxois]]</small>)にあり、県都[[w:ディジョン|ディジョン]]市街から西北西へ約4.5kmの地点に位置する。ディジョン方面から県道905号(D905)を北西に進んで行くと、ヴナレ=レ=ローム(<small>[[w:fr:Venarey-les-Laumes|Venarey-les-Laumes]]</small>)から東の郊外にかけて古戦場跡が広がる。<br>オソワ(Auxois)という地域名・山名は、ラテン語の Alesiensis pagus「アレスィア郷」が転訛し、アリーズ(Alise)の名もアレスィア(Alesia)に由来すると考えられている。サント=レーヌ([[w:fr:Sainte Reine|Sainte Reine]] 聖レグニア)とはこの地でAD252年に殉教したキリスト教徒ガッリア人女性で、カトリック教会から聖人に列せられている。]]
'''ウェルキンゲトリークスがアレスィア入城、カエサルは攻囲を決断'''
*① Fugato omni equitatu
**すべての[[w:騎兵|騎兵隊]]が逃げてしまったので、
*[[w:la:Vercingetorix|Vercingetorix]] copias suas<ref>suas はβ系写本の記述で、α系写本にはない。</ref>, ut pro castris conlocaverat, reduxit
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、陣営の前に配置するようにしていた麾下の(歩兵の)軍勢を呼び戻して、
*protinusque [[w:la:Alesia|Alesiam]], quod est oppidum Mandubiorum, iter facere coepit
**すぐに、マンドゥビイ族の<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>である[[w:アレシア|アレスィア]]へ行軍し始めた。
*celeriterque impedimenta ex castris educi et se subsequi iussit.
**かつ、速やかに陣営から[[w:輜重|輜重]]を進発させること、および自分に追随すること、を命じた。
*② Caesar impedimentis in proximum collem deductis,
**カエサルは、輜重を近隣の丘陵に移させて、
*duabus legionibus praesidio relictis,
**2個[[w:ローマ軍団|軍団]]を(輜重の)守備隊として(その丘陵に)残留させた。
*secutus quantum diei tempus est passum,
**日中の時間が許される限り(ガッリア勢を)追跡して、
*circiter tribus milibus hostium ex novissimo agmine interfectis
**敵方の後衛のうちから約3000人を殺戮して、
*altero die ad Alesiam castra fecit.
**翌日には、アレスィアの辺りに陣営を張った。
*③ Perspecto urbis situ
**(アレスィアの)都市の地勢を吟味して、
*perterritisque hostibus, quod equitatu, qua maxime parte exercitus confidebant, erant pulsi,
**敵方は、部隊の大部分において頼りにしていた騎兵隊が撃退されていたので、怖れおののいていたから、
*adhortatus ad laborem milites circumvallare instituit.
**(カエサルは)兵士たちを労役に駆り立てて、(敵陣を)[[w:堡塁|堡塁]]で囲むことを決断した。
===69節===
[[画像:Alise2.jpg|thumb|right|300px|[[w:アレシア|アレスィア]]にあったローマ時代の[[w:フォルム|フォルム]](広場)や[[w:バシリカ|バシリカ]](教会堂)などと思われる遺跡([http://maps.google.co.jp/?ie=UTF8&t=h&brcurrent=3,0x0:0x0,1&ll=47.539477,4.5008&spn=0.002343,0.004801&z=18 Googleマップ]の航空写真を参照)。現在、オソワ山(Mont Auxois)と呼ばれているこの丘陵は、頂きが平坦な台地状になっており、その中央のさらに高い所に[[w:オッピドゥム|オッピドゥム]](城塞都市)があったと思われる。<br>上の画像からは、同等の高さの丘陵が周囲を取り巻いていることが見て取れる。<br>『ガリア戦記』に書かれたアレスィアの所在地については諸説があって永らく不明であったが、ゲルゴウィアと同様に19世紀のウジェーヌ・ストッフェル大佐(colonel Eugène Stoffel)の発掘調査によってローマ軍の遺構などが発見され、地勢もカエサルの記述にかなり合っていると見なされて、オソワ山とその中腹にあるアリーズ=サント=レーヌが有力視されることになった。]]
'''アレスィアの地勢、ローマ軍の攻囲線'''
*① Ipsum erat oppidum [[w:la:Alesia|Alesia]] in colle summo admodum edito loco,
**[[w:アレシア|アレスィア]]の<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>そのものは、丘陵の頂きにおいて、ひときわ高い地点にあって、
*ut nisi obsidione expugnari non posse videretur.
**攻囲(包囲)以外には攻略されることができないと思われた。
*② Cuius collis radices duo duabus ex partibus flumina subluebant.
**その丘陵のふもとを2つの方面から、2つの川が流れていた。
*③ Ante id<ref>id はα系写本の記述で、β系写本にはない。</ref> oppidum planities circiter milia passuum Ⅲ(tria) in longitudinem patebat;
**その城塞都市の前に、約3ローママイル(4.5km)の間隔で、平地が広がっていた。
*④ reliquis ex omnibus partibus colles mediocri interiecto spatio
**ほかのすべての方面からは(いくつかの)丘陵が適度な空間を置いており、
*pari altitudinis fastigio oppidum cingebant.
**同等の高さの頂上で(アレスィアの)城塞都市を取り巻いていた。
*⑤ Sub muro, quae pars collis ad orientem solem spectabat,
**(アレスィアの)丘陵の日が昇る方(=東方)へ面していた部分の城壁の下には、
*hunc omnem locum copiae Gallorum compleverant
**このすべての場所を、ガッリア人たちの軍勢が満たしていて、
*fossamque et maceriam sex in altitudinem pedum praeduxerant.
**堀、および高さ6[[w:ペース (長さ)|ペース]](約1.8m)の防壁を前に引いていた。
**:<span style="color:#009900;">(訳注:[[wikt:en:maceria|maceria]] は、軍事用語としては、立てこもるための城壁<ref><i>muraille (pour se retrancher)</i>(ラルース社の羅仏辞典 <small>“Dictionnaire MaxiPoche Plus latin-français et français-latin”</small> を参照)</ref>を指す。)</span>
*⑥ Eius munitionis quae ab Romanis instituebatur circuitus XI<ref>XI はα系写本の記述で、β系写本では X となっている。</ref> milia passuum tenebat.
**ローマ人たちによって建てられようとしていた塁壁の周囲は、11ローママイル(約16km)を占めていた。
**:<span style="color:#009900;">(訳注:α系写本では 11マイル=約16km、β系写本では 10マイル=約15km となっている。)</span>
*⑦ Castra opportunis locis erant posita
**(ローマ勢の)陣営は(戦略上)都合良い地点に設置されていて、
**:<span style="color:#009900;">(訳注:歩兵・騎兵の陣営が計8か所に置かれていたようである。)</span>
*ibique<ref>ibique はα系写本の記述で、β系写本では itemque となっている。</ref> castella XXIII(viginti tria) facta,
**同じく23基の砦が造られた。
*quibus in castellis interdiu stationes ponebantur,
**それらの砦には、昼間は、歩哨たちが置かれて、
*ne qua subito eruptio fieret;
**不意に何らかの突撃がなされないようにした。
*haec eadem noctu excubitoribus ac firmis praesidiis tenebantur.
**この同じところが、夜間は、寝ずの番兵および強力な守備隊により固守された。
===70節===
'''カエサル麾下のゲルマニア騎兵が、再びガッリア騎兵を虐殺'''
*① Opere instituto
**(ローマ人により)[[w:堡塁|堡塁]]が建てられだして、
*fit equestre proelium in ea planitie,
**かの平地において[[w:騎兵|騎兵]]戦がなされた。
*quam intermissam collibus tria milia passuum in longitudinem patere supra demonstravimus.
**それ(平地)は(周囲の)丘陵から3ローママイル(約4.5km)の間隔を空けて広がっていることを、[[#69節|前]]に述べた。
*Summa vi ab utrisque contenditur.
**(騎兵戦は)双方の主力によって闘われた。
*② Laborantibus nostris Caesar Germanos submittit
**苦戦している我が方(ローマ騎兵)に対して、カエサルは[[w:ゲルマニア|ゲルマニア]]人(騎兵)を援けに派遣した。
*legionesque pro castris constituit, ne qua subito inruptio ab hostium peditatu fiat.
**諸[[w:ローマ軍団|軍団]]を陣営の前に駐留させて、不意に何らかの突入が敵方の[[w:歩兵|歩兵隊]]によってなされないようにした。
*③ Praesidio legionum addito nostris animus augetur;
**軍団の守備が加わって、我が方(ローマ勢の)勇気が増された。
*hostes in fugam coniecti se ipsi multitudine impediunt
**敵方(の騎兵)は敗走に追いやられて、彼ら自身が自分たち(の敗走)を大勢であることにより妨げた。
*atque angustioribus portis relictis coacervantur<ref>coacervantur は近世の写本(ς)の記述で、α系写本では coacervati tum 、β系写本では coartantur となっている。</ref>.
**さらに(ガッリア陣地の)諸門がとても狭いままにしておかれたので(騎兵たちが)積み重ねられた。
*④ Germani acrius usque ad munitiones sequuntur.
**ゲルマニア人(騎兵)たちは(ガッリア騎兵たちを)苛烈に、防塁のところまで追撃した。
*⑤ Fit magna caedes.
**(こうして)大虐殺が起こった。
*Nonnulli relictis equis fossam transire et maceriam transcendere conantur.
**(ガッリア騎兵の)幾人かは、馬を置き去りにして、堀を越えること、および防壁を登り越えることを試みた。
*Paulum legiones Caesar quas pro vallo constituerat promoveri iubet.
**カエサルは、防柵の前に駐留させていた諸軍団に、いくらか前進することを命じた。
*⑥ Non minus qui intra munitiones erant perturbantur Galli:
**防塁の内側にいたガッリア人たちも(騎兵たちに)劣らず狼狽した。
*veniri ad se confestim existimantes ad arma conclamant;
**(ローマ勢により)自分たちのところへ直ちにやって来られると考えた者たちは、防具を取れと叫んだ。
*nonnulli perterriti in oppidum inrumpunt.
**(ガッリア勢の)幾人かは、怖れおののいて(丘陵の頂きにある)城塞都市の中に押し入った。
*⑦ [[w:la:Vercingetorix|Vercingetorix]] iubet portas claudi, ne castra nudentur.
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、陣営が無防備にされないように、(防塁の)諸門が閉じられることを命じた。
*Multis interfectis, compluribus equis captis Germani sese recipiunt.
**(ガッリア騎兵の)多くが殺戮され、おびただしい馬が捕獲されて、ゲルマニア人(騎兵)たちは退却した。
===71節===
[[画像:Statue_Vercingetorix_st_germain_en_laye.JPG|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の立像(<small>パリ郊外の[[w:サン=ジェルマン=アン=レー|サン=ジェルマン=アン=レー]] [[w:fr:Saint-Germain-en-Laye|Saint-Germain-en-Laye]]</small>)。[[w:アレシアの戦い|アレスィア古戦場]](<small>現在のアリーズ=サント=レーヌ</small>)にある巨大な銅像と同様に彫刻家エメ・ミレ([[w:fr:Aimé Millet|Aimé Millet]])によって建立された。]]
[[画像:Napoleon3.PNG|thumb|right|250px|ウジェーヌ・ストッフェル大佐(colonel Eugène Stoffel)をして[[w:アレシア|アレスィア]]およびゲルゴウィアの発掘調査をさせた立役者・皇帝[[w:ナポレオン3世|ナポレオン3世]]の肖像。[[w:ガリア起源説|ガッリア起源説]]により、王政に反感を持つフランスの共和派や庶民は、旧[[w:ブルボン家|ブルボン王朝]]を[[w:クロヴィス1世|クロヴィス]]や[[w:ユーグ・カペー|カペー]]にさかのぼるゲルマン系の[[w:フランク人|フランク人]]と見なし、自分たちのルーツを[[w:ケルト人|ケルト系]]の古代[[w:ガリア人|ガッリア人]]に求めた。ナポレオン3世はこのような国民の意識を利用して、[[w:ナショナリズム|ナショナリズム]]の高揚および帝政の基盤強化を図ったのである。]]
'''ウェルキンゲトリークスが援兵召集のため騎兵を放ち、籠城策を定める'''
*① [[w:la:Vercingetorix|Vercingetorix]], priusquam munitiones ab Romanis perficiantur,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、ローマ人たちによって塁壁が完成されるより前に、
*consilium capit omnem ab se equitatum noctu dimittere.
**自分のところから[[w:騎兵|騎兵隊]]のすべてを夜間に送り出すことを計画した。
*② Discedentibus mandat
**(アレスィアから)退去する(騎兵の)者たちに(以下のように)指図した。
*ut suam quisque eorum civitatem adeat
**彼ら(騎兵)のおのおのが自らの部族に行くように、
*omnesque qui per aetatem arma ferre possint ad bellum cogant.
**かつ、年齢により武器を手に取ることができる者たちの皆を戦争へ徴集するように、と。
*③ Sua in illos merita proponit obtestaturque
**(ウェルキンゲトリークスは)彼ら(ガッリア人たち)における自分の功績に言及して(以下のように)懇願した。
*ut suae salutis rationem habeant
**自分の身の安全を顧慮してくれるように、
*neu se optime de communi libertate meritum in cruciatum hostibus<ref>in cruciatum hostibus はβ系写本の記述で、α系写本では hostibus in cruciatum となっている。</ref> dedant.
**かつ(ガッリア)共通の自由について功績が最上である自分を、敵方の責め苦に渡すことがないように、と。
*Quod si indiligentiores fuerint,
**ところが、もし(騎兵たちがウェルキンゲトリークスたちの安全に)無関心であったならば、
*milia hominum delecta octoginta una secum interitura demonstrat.
**選りすぐりの兵員8万名が自分と一緒に滅びるであろう、と明言した。
*④ Ratione inita frumentum se exigue dierum XXX(triginta) habere<ref>frumentum ~ habere はβ系写本の記述で、χ系・φ系あるいはモイゼル H. Meusel の修正提案など、写本や校訂者により語順が異なっていたり、単語が欠けていたりする。</ref>,
**見積もったところ、自分たちはわずかに30日分の穀物を保有しているが、
*sed paulo etiam longius tolerari posse parcendo.
**しかし節約することにより、なおいくらか長く耐え忍ぶことができる、と。
*⑤ His datis mandatis,
**これらの指図を与えてから、
*qua erat nostrum opus<ref>erat nostrum opus はβ系写本の記述で、α系写本では単に opus erat となっている。</ref> intermissum, secunda vigilia silentio equitatum mittit<ref>mittit はχ系・B・M・S写本の記述で、β系写本では dimittit となっている。</ref>.
**我が方(ローマ勢)の構築物が中断しているところから、第二夜警時に静けさのうちに、騎兵隊を送り出した。
*⑥ Frumentum omne ad se referri iubet,
**穀物をすべて自分のところへ運んで来ることを命じて、
*capitis poenam iis qui non paruerint constituit;
**服従しなかった者たちを極刑に処すと決めた。
*⑦ pecus, cuius magna erat copia a Mandubiis<ref>a Mandubiis はβ系写本の記述で、α系写本では ab Manduviis となっている。</ref> compulsa, viritim distribuit;
**家畜は、マンドゥビイ族によって大量に集められていたが、個々に分配した。
*frumentum parce et paulatim metiri instituit;
**穀物を節約して少しずつ量り分けることを定めた。
*⑧ copias omnes quas pro oppido collocaverat in oppidum recepit.
**<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の前に駐留させていた(歩兵の)軍勢すべてを城塞都市の中に退却させた。
*⑨ His rationibus auxilia Galliae exspectare et bellum parat administrare<ref>parat administrare はα系写本の記述で、β系写本では administrare parat となっている。</ref>.
**これらの手段により、ガッリア(諸部族)の援軍を待つこと、および戦争を指導しようとしたのである。
===72節===
'''カエサルが、より大掛かりな攻囲陣地を構築する'''
*① Quibus rebus cognitis<ref>cognitis がこの位置にあるのはα系写本の記述で、β系写本では captivis の後となっている。</ref> ex perfugis et captivis
**それらの事情を脱走兵たちや捕虜たちから知って、
*Caesar haec genera munitionis instituit.
**カエサルは以下の類いの塁壁工事に取りかかった。
<br>
*'''前線の切り立った空堀'''
*Fossam pedum XX(viginti) derectis lateribus duxit,
**20[[w:ペース (長さ)|ペース]](約6m)の(幅の)垂直な側面の堀を引いた。
*ut eius fossae<ref>fossae がこの位置にあるのはβ系写本の記述で、α系写本では summa(e) の後になっている。</ref> solum tantundem pateret, quantum summa<ref>summa はβ系写本の記述で、α系写本では summae となっている。</ref> labra distarent<ref>distarent はα系写本の記述で、β系写本では distabant となっている。</ref>.
**その堀(の底)は、頂きの縁が離れているのとちょうど同じ分だけ広がるようにした。
**:<span style="color:#009900;">(訳注:上辺と底の幅が等間隔になるような切り立った空堀にした。)</span>
*② Reliquas omnes munitiones ab ea fossa pedes<ref>pedes はα系写本の記述で、β系写本では pedibus となっている。</ref> CCCC(quadringentos) reduxit.
**ほかのすべての塁壁は、その堀から400ペース(約120m)後ろに引いた。
**:<span style="color:#009900;">(訳注:写本にあるこの数字は、19世紀のウジェーヌ・ストッフェル大佐(colonel Eugène Stoffel)の</span>
**:<span style="color:#009900;">発掘調査によって400[[w:パッスス|パッスス]](約600m)と修正された。この堀は、アレスィアの西方に引かれたと思われる。)</span>
*Id hoc consilio,
**それは、以下の考えによる。
*quoniam tantum spatium necessario esset<ref>spatium necessario esset はβ系写本の記述で、α系写本では esset necessario spatio となっている。</ref> complexus
**これほどの空間が包囲されなければならないのであるから、
*nec facile totum corpus<ref>corpus はα系写本の記述で、β系写本では opus となっており、ρ系写本にはない。</ref> corona militum cingeretur,
**すべての包囲作業が兵士たちの<ruby><rb>哨兵線</rb><rp>(</rp><rt>コロナ</rt><rp>)</rp></ruby>で取り囲まれるのは容易ではない。
*ne de improviso aut noctu ad munitiones hostium multitudo<ref>hostium multitudo はα系写本の記述で、β系写本では multitudo hostium となっている。</ref> advolaret
**不意に、あるいは夜間に、敵方の大勢が(ローマ側の)塁壁へ突進することがないように、
*aut interdiu tela in nostros operi destinatos conicere possent<ref>possent はα系写本の記述で、β系写本では posset となっている。</ref>.
**あるいは日中に、工事中の我が方(ローマ勢)に飛道具が投げ付けられることができないように。
<br>
[[画像:Fosse.Saint.Pierre.en.Chastres.png|thumb|right|300px|二重の堀およびその背後の堡塁(土塁と障壁・櫓)の模式図([[w:ウジェーヌ・エマニュエル・ヴィオレ・ル・デュク|ヴィオレ=ル=デュク]]著『中世フランス建築体系辞典』[[s:fr:Dictionnaire raisonné de l’architecture française du XIe au XVIe siècle - Tome 5, Fossé|(s)]]より)。]]
[[画像:AlesiaFortifications.JPG|thumb|right|300px|[[w:アレシアの戦い|アレスィア古戦場]]跡に再現された、二重の堀およびその背後の堡塁(土塁と鹿柴、胸壁・鋸壁、櫓)。]]
*'''二重の堀'''
*③ Hoc intermisso spatio
**この空間をあけて、
*duas fossas XV(quindecim) pedes latas eadem altitudine perduxit;
**15ペース(約4.5m)の幅の2つの堀を、同じ深さ(15ペース)で張り巡らせた。
*quarum interiorem campestribus ac demissis locis
**それらの内側(の堀)の平地で低く下がった所には、
**:<span style="color:#009900;">(訳注:内側の堀とは、アレスィアに近い東側の堀と考えられている。)</span>
*aqua ex flumine derivata complevit.
**川から導かれた水で満たした。
<br>
*'''土塁と防柵、胸壁と鋸壁、鹿柴、櫓'''
*④ Post eas aggerem ac vallum XII(duodecim) pedum exstruxit.
**それらの後ろには、12ペース(約3.6mの高さ)の<ruby><rb>[[w:土塁|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>と<ruby><rb>防柵</rb><rp>(</rp><rt>ウァッルム</rt><rp>)</rp></ruby>を築き上げた。
*Huic loricam pinnasque adiecit
**これに<ruby><rb>胸壁</rb><rp>(</rp><rt>ロリカ</rt><rp>)</rp></ruby>と<ruby><rb>鋸壁</rb><rp>(</rp><rt>ピンナ</rt><rp>)</rp></ruby>を付け加えて、
**:<span style="color:#009900;">(訳注:胸壁と鋸壁とは、[[ガリア戦記 第5巻#40節|第5巻40節]]で既出のように、凹凸形に編み込まれた柴の壁)</span>
*grandibus cervis eminentibus ad commissuras pluteorum atque aggeris,
**障壁と土塁の接合部の辺りに大きな<ruby><rb>鹿柴</rb><rp>(</rp><rt>ケルウス</rt><rp>)</rp></ruby>を突き出させて、
**:<span style="color:#009900;">(訳注:<ruby><rb>鹿柴</rb><rp>(</rp><rt>ろくさい</rt><rp>)</rp></ruby>(鹿砦または<ruby><rb>逆茂木</rb><rp>(</rp><rt>さかもぎ</rt><rp>)</rp></ruby>)とは、鹿の角のように枝分かれした杭や枝を逆立てた杭囲い。</span>
**:<span style="color:#009900;">障壁とは、防柵の前に取り付けられた胸壁と鋸壁の総称であろう。)</span>
*qui ascensum hostium tardarent,
**敵方が登って来るのを妨げようとした。
*et turres toto opere circumdedit, quae pedes LXXX(octoginta) inter se distarent.
**構築物の全体を、互いに80ペース(約24m)離れて立つ櫓で取り巻いた。
===73節===
'''カエサルは、攻囲陣地をさらに障害物で補強する'''
*① Erat eodem tempore et materiari et frumentari et tantas munitiones fieri necesse
**材木収集と糧食徴発、およびこれほどの塁壁工事がなされることが、同時に必要であった。
*deminutis nostris copiis, quae longius ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> castris progrediebantur.
**我が方の軍勢(ローマ勢)は減じており、陣営からはるか遠くに進み出ていた。
*Ac nonnumquam opera nostra Galli temptare
**いくたびか、我が方の構築物に、ガッリア人が攻撃すること(を試み)、
*atque eruptionem ex oppido pluribus portis summa vi facere conabantur.
**かつ、<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の多くの門から、主力でもって出撃することを試みた。
*② Quare ad haec rursus opera addendum Caesar putavit,
**そのゆえに、この構築物へさらに(以下の障害物が)付け加えられるべきだとカエサルは考えた。
*quo minore numero militum munitiones defendi possent.
**それによって、より少ない数の兵士で塁壁が防衛されることができるように、と。
[[画像:Archeodrome_Beaune_8.jpg|thumb|right|300px|[[w:アレシアの戦い|アレスィア古戦場]]跡に再現された攻囲陣地(上の画像と同じ物)。堡塁(土塁と障壁と櫓)の前の平地に、樹枝が突き出た「尖り杭」(奥)と落とし穴を枝で覆った「百合」(手前)が見える。]]
[[画像:Trous.de.loup.png|thumb|right|300px|サイコロの五つ目状に並べられた落とし穴「百合」(lilium)の模式図([[w:ウジェーヌ・エマニュエル・ヴィオレ・ル・デュク|ヴィオレ=ル=デュク]]著『中世フランス建築体系辞典』[[s:fr:Dictionnaire raisonné de l’architecture française du XIe au XVIe siècle - Tome 5, Fossé|(s)]]より)。図の上部が五つ目状の配列を、図の下部が落とし穴の断面図を示す。この断面図では、尖らされた樹幹の先端が、傾斜した穴の突き固められた底から4本指ほど突き出ていると解釈しているようである。カエサルの記述からは、地表から突き出ているとも解釈できる。]]
[[画像:Aiguillon.png|thumb|right|200px|鉄の鉤が固定された杭「刺」の模式図([[w:ウジェーヌ・エマニュエル・ヴィオレ・ル・デュク|ヴィオレ=ル=デュク]]著『中世フランス建築体系辞典』[[s:fr:Dictionnaire raisonné de l’architecture française du XIe au XVIe siècle - Tome 5, Fossé|(s)]]より)。]]
[[画像:Archeodrome_Beaune_2.jpg|thumb|right|300px|[[w:アレシアの戦い|アレスィア古戦場]]跡に再現された攻囲陣地(上の画像と同じ物)。いちばん手前に「刺」が再現されている。]]
:
'''尖り杭'''
*Itaque truncis arborum aut admodum firmis ramis abscisis
**こうして、樹木の幹、あるいは非常に強固な枝が切り取られて、
*atque horum delibratis ac praeacutis cacuminibus
**これらの皮がむかれて、<ruby><rb>梢</rb><rp>(</rp><rt>こずえ</rt><rp>)</rp></ruby>が<ruby><rb>尖</rb><rp>(</rp><rt>とが</rt><rp>)</rp></ruby>らされて、
*perpetuae fossae quinos pedes altae ducebantur.
**5[[w:ペース (長さ)|ペース]](約1.5m)ずつの連続した堀が引かれた。
*③ Huc illi stipites demissi
**ここに、あの樹幹が沈められて、
*et ab infimo revincti, ne revelli possent, ab ramis eminebant.
**底から固くしばられて、はぎ取ることができないようにして、枝から(地上に)突き出るようにしていた。
*④ Quini erant ordines coniuncti inter se atque implicati;
**5列ずつが、互いにつなげられて、結び合わされた。
*quo qui intraverant se ipsi acutissimis vallis induebant.
**そこに踏み込んだ者は、自身が自らをきわめて鋭い杭に陥れた。
*Hos cippos appellabant.
**(将兵たちは)これらを<ruby><rb>尖り杭</rb><rp>(</rp><rt>キップス</rt><rp>)</rp></ruby>と呼んだ。
**:<span style="color:#009900;">(訳注:[[wikt:en:cippus|cippus]]「尖り杭」は「墓標」とも訳されるが、後者は古典期以降のラテン語で長方形の墓碑を指す<ref><small>POSTCLASSIQUE</small> <i>[[w:fr:Cippe|cippe]] (colonne funéraire rectangulaire)</i>(ラルース社の羅仏辞典 <small>“Dictionnaire MaxiPoche Plus latin-français et français-latin”</small> を参照)</ref>。)</span>
:
'''百合'''
*⑤ Ante<ref>ante はβ系写本の記述で、α系写本にはない。</ref> quos<ref>quos はα系写本の記述で、β系写本では hos となっている。</ref> obliquis ordinibus in quincuncem dispositis
**それらの前に、(サイコロの)<ruby><rb>五つ目状</rb><rp>(</rp><rt>クィンクンクス</rt><rp>)</rp></ruby>に斜めの列に配置されて、
*scrobes tres in altitudinem pedes fodiebantur
**深さ3ペース(約90cm)の穴が掘られた。
*paulatim angustiore ad infimum fastigio.
**しだいに、より狭く、底の方へ傾斜を付けて。
*⑥ Huc teretes stipites [[w:la:Femur|feminis]] crassitudine
**ここに、太ももの厚さの丸みを帯びた樹幹が
*ab summo praeacuti et praeusti demittebantur,
**先端から尖らせられ、焦がされて(穴の底に)突き刺された。
*ita ut non amplius digitis quattuor ex terra<ref>ex terra はα系写本の記述で、V・ρ系写本では e terra 、T写本では contra となっている。</ref> eminerent;
**4本の指より長くないほど地中から突き出るように。
*⑦ simul confirmandi et stabiliendi causa
**同時に、強固にして固定するために、
*singuli ab infimo solo pedes terra exculcabantur;
**それぞれ底から1ペース(約30cm)だけ土で突き固められた。
*reliqua pars scrobis ad occultandas insidias viminibus ac virgultis integebatur.
**穴の残りの部分は、わなを隠すために、柳の細枝や若枝で覆われた。
*⑧ Huius generis octoni ordines ducti ternos inter se pedes distabant.
**この類いを、8列ずつ、3ペース(約90cm)ずつ互いに離して、作った。
*Id ex similitudine floris lilium appellabant.
**(将兵たちは)それを花との類似から、<ruby><rb>[[w:ユリ|百合]]</rb><rp>(</rp><rt>リリウム</rt><rp>)</rp></ruby>と呼んだ。
:
'''刺'''
*⑨ Ante haec taleae pedem longae ferreis hamis infixis totae in terram infodiebantur
**これらの前に、鉄製の鉤が打ち込まれた長さ1ペース(約30cm)の棒の全体が地中に埋め込まれた。
*mediocribusque intermissis spatiis omnibus locis disserebantur,
**適度な空間を間にあけて、至る所に配置された。
*quos stimulos nominabant.
**(将兵たちは)それらを刺と呼んだ。
{| class="wikitable"
|-
! colspan="2" | [[w:la:Obsidio Alesiae|Obsidio Alesiae]]
|-
| style="vertical-align:top; text-align:left; width:35em;" |[[画像:Fortificazioni alesia png.png|thumb|left|500px|[[w:アレシアの戦い|アレシアの戦い]]における攻囲陣地の構成(図の説明はイタリア語)。]]
|}
===74節===
'''ガッリア人の来援に備えて、外周にも同様の塁壁を張り巡らす'''
*① His rebus perfectis
**これらの物が造り上げられると、
*regiones secutus quam potuit aequissimas pro loci natura
**地勢に応じて、できるかぎり好都合な地帯を探し求めて、
*XIIII(quattuordecim) milia passuum complexus
**14ローママイル(約21km)を取り巻いて、
*pares eiusdem generis munitiones,
**(内周の塁壁と規模が)匹敵する同じ類いの塁壁を
*diversas ab his, contra exteriorem hostem perfecit,
**これら(内周)に対置させて、外側の敵に対抗して造り上げた。
*ut ne magna quidem multitudine, si ita accidat equitatus<ref>equitatus はシェーラー(Schoeller)による修正提案で、写本(ω)では eius であるが、近代の校訂者たちにより修正提案がなされている。</ref> discessu,
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
**もし[[w:騎兵|騎兵隊]]の退去によりこのようなこと(外敵との遭遇)が生じても、決して大軍により
*munitionum praesidia circumfundi possent;
**塁壁の守備隊が包囲されることができないように。
*② <ne> autem<ref>ne autem は近代の校訂者による修正提案で、α系・π系写本では aut、ρ系写本では ut となっている。</ref> cum periculo ex castris egredi cogatur,
**(ローマ勢が)危険を伴って陣営から進発することを強いられることもないように、
*dierum XXX(triginta) pabulum frumentumque habere omnes convectum iubet.
**30日分の[[w:糧秣|秣(まぐさ)や穀物]]を運び集めて保持することを皆に命じた。
===75節===
'''ガッリア同盟が各部族に動員を要請する'''
*① Dum haec apud<ref>apud はα系写本の記述で、β系写本では ad となっている。</ref> [[w:la:Alesia|Alesiam]] geruntur,
**これらが[[w:アレシア|アレスィア]]のもとで遂行されている間に、
*Galli concilio principum indicto
**ガッリア人たちは、領袖たちの会合を課して、
*non omnes hos<ref>omnes hos はα系写本の記述で、β系写本では単に omnes となっている。</ref> qui arma ferre possent, ut censuit [[w:la:Vercingetorix|Vercingetorix]], convocandos statuunt,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]が見積もったように武器を扱える者たち皆を召集するべき、ではないと判断した。
*sed certum numerum cuique ex civitate<ref>ex civitate はα系写本の記述で、β系写本では civitati となっている。</ref> imperandum,
**けれども、おのおのの部族から一定の兵数(の供出)を命令すること(を決めた)。
*ne tanta multitudine confusa nec moderari nec discernere suos nec frumentandi rationem<ref>frumentandi rationem はT・U・R写本などの記述で、V・U写本などでは frumenti rationem となっている。</ref> habere possent.
**これほどの大軍で混乱したり、味方を指揮できなかったり判別できなかったり、ということがないように。
*② Imperant [[w:la:Haedui|Haeduis]] atque eorum clientibus, Segusiavis, Ambivaretis, Aulercis Brannovicibus, Blannoviis, milia XXXV(triginta quinque);
**[[w:ハエドゥイ族|ハエドゥイー族]]とその庇護民であるセグスィアウィ族、アンビウァレティ族、アウレルキ・ブランノウィケス族、ブランノウィイ族に3万5千名を命令した。
*parem numerum Arvernis adiunctis Eleutetis, Cadurcis, Gabalis, Vellaviis,
**[[w:アルウェルニ族|アルウェルニー族]]に隣接しているエレウテティ族、カドゥルキー族、ガバリ族、ウェッラウィイ族に同等の兵数。
*qui sub imperio Arvernorum esse consuerunt;
**彼らはアルウェルニー族の支配下にいるのが常であった。
*③ Sequanis, Senonibus, Biturigibus, Santonis, Rutenis, Carnutibus duodena milia;
**セクアニ族、セノネース族、ビトゥリゲース族、サントネス族、ルテーニー族、カルヌーテース族には1万2千ずつ。
*Bellovacis X(decem); totidem Lemovicibus;
**ベッロウァキ族に1万。レモウィケス族に同じだけ多く(1万)。
*octona Pictonibus et Turonis et Parisiis et Helvetiis;
**ピクトネス族とトゥロニ族とパリスィイ族と[[w:ヘルウェティイ族|ヘルウェティイ族]]に8(千)ずつ。
*Senonibus<ref>Senonibus は写本(ω)にある記述だが、sen<a Suessi>onibus「6(千)ずつをスエッスィオニス族…に」などさまざまな修正提案がなされている。</ref>, Ambianis, Mediomatricis, Petrocoriis, Nerviis, Morinis, Nitiobrogibus quina milia;
**セノネース族、アンビアニ族、メディオマトリキ族、ペトロコリイ族、ネルウィイ族、モリニ族、ニティオブロゲス族に5千ずつ。
**:<span style="color:#009900;">(訳注:Senonibus「セノネース族」は既出のためスエッスィオネス族などに書き替える修正提案がなされ、以下は校訂版によっては兵数がずれる。</span>
**:<span style="color:#009900;">しかし、スエッスィオネス族 Suessiones は[[ガリア戦記 第2巻#12節|第2巻12節]]でレーミー族を通じてカエサルに降伏しており、</span>
**:<span style="color:#009900;">第8巻6節でも「レーミー族に委ねられていた」「同盟者」と記されているので、アレスィアには出兵していないであろう。)</span>
*Aulercis Cenomanis totidem; Atrebatibus IIII;
**アウレルキ・ケノマニ族に同じだけ多く(5千)。アトレバテス族に4(千)。
*Veliocassis, Lexoviis et Aulercis Eburovicibus terna;
**ウェリオカッセス族、レクソウィイ族とアウレルキ・エブロウィケス族に3(千)ずつ。
*Rauracis et Boiis<ref>Boiis はα系写本の記述で、β系写本では Bois となっている。</ref> bina;
**ラウラキ族とボイイ族に2(千)ずつ。
*XXX<ref>XXX はα系写本の記述で、さまざまな修正提案がなされている。</ref> milia universis civitatibus, quae Oceanum attingunt
**<ruby><rb>大洋<span style="color:#009900;">〔[[w:大西洋|大西洋]]〕</span></rb><rp>(</rp><rt>オーケアヌス</rt><rp>)</rp></ruby>に接する諸部族全体に3万。
**:<span style="color:#009900;">(訳注:この数は写本により異なっており、混乱している。)</span>
*quaeque eorum consuetudine Aremoricae appellantur,
**それらは、彼ら(ガッリア人)の慣習でアレモリカエと呼ばれており、
*quo sunt in numero Coriosolites, Redones, Ambibarii, Caletes, Osismi, Veneti, Lemovices, Unelli.
**コリオソリテス族、レドネス族、アンビバリイ族、カレテス族、オスィスミ族、ウェネティ族、レモウィケス族、ウネッリ族がそれらに数えられる。
*⑤ Ex his Bellovaci suum numerum non compleverunt<ref>compleverunt はα系写本の記述で、β系写本では contulerunt となっている。</ref>,
**これらのうちで、ベッロウァキ族は、自分たちの(割り当てられた)数を満たさなかった。
*quod se suo nomine atque arbitrio cum Romanis bellum gesturos dicebant
**というのは、彼らは自らの名と裁量でもってローマ人と交戦するであろうと言ったのだ。
*neque cuiusquam imperio obtemperaturos;
**(自分たちは)何者の命令にも服従しないであろう、と。
*rogati tamen ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> Commio pro eius hospitio duo milia una miserunt.
**けれども、[[w:コンミウス|コンミウス]]の懇願により、彼を賓客としているために、2千名を一緒に送り出した。
**:<span style="color:#009900;">(訳注:ベッロウァキ族は要求された兵数の5分の1しか出さなかったが、第8巻22節ではこの出兵をも含めてカエサルから責められる。)</span>
===76節===
'''コンミウスもガッリア同盟軍に内応、約25万の大軍が集結'''
*① Huius opera Commii, ut antea demonstravimus, fideli atque utili
**前に述べたように、この[[w:コンミウス|コンミウス]]の信頼すべき有益な働きを
**:<span style="color:#009900;">(訳注:[[ガリア戦記 第4巻#21節|第4巻21節]]・[[ガリア戦記 第4巻#27節|27節]]・[[ガリア戦記 第4巻#35節|35節]]、[[ガリア戦記 第5巻#22節|第5巻22節]]、[[ガリア戦記 第6巻#6節|第6巻6節]]を参照。)</span>
*superioribus annis erat usus in [[w:la:Britannia Maior|Britannia]] Caesar;
**カエサルは先年(BC55~54年)に[[w:ブリタンニア|ブリタンニア]]において役立てていた。
**:<span style="color:#009900;">(訳注:コンミウスは、[[w:ローマによるブリタンニア侵攻 (紀元前55年-紀元前54年)|カエサルのブリタンニア侵攻]]の先導役を務めていた。後にブリタンニアで王となる。)</span>
*quibus ille pro meritis civitatem eius immunem esse iusserat,
**彼(カエサル)はそれらの功績の見返りに、彼(コンミウス)の部族が免税となることを命じており、
*iura legesque reddiderat atque ipsi Morinos attribuerat.
**権能や法度を元に戻してやり、(コンミウス)自身にモリニ族(の統治)をも委ねていた。
*② Tamen tanta<ref>tamen tanta はα系写本の記述で、β系写本では tanta tamen となっている。</ref> universae Galliae consensio fuit libertatis vindicandae et pristinae belli laudis recuperandae,
**けれども、自主独立が求められるべきで、かつての戦争の誉れが取り戻されるべきだという、ガッリア全体の合意があった。
*ut neque beneficiis neque amicitiae memoria moverentur
**その結果、(カエサルからの)厚遇にも友情の記憶にも揺り動かされず、
*omnesque et animo et opibus in id bellum incumberent.
**(ガッリアの)皆が闘志によっても兵力によっても、その戦争に没頭していたのだ。
*③ Coactis equitum milibus VIII(octo) et peditum circiter CCL(ducenti quinquaginta)<ref>CCL はβ系写本の記述で、α系写本では CCXL または CCXXXX となっている。</ref>
**[[w:騎兵|騎兵]]8千騎と[[w:歩兵|歩兵]]およそ250(千)名が徴集されて、
**:<span style="color:#009900;">(訳注:歩兵の数は、β系写本では25万、α系写本では24万と異なっている。)</span>
*haec in Haeduorum finibus recensebantur, numerusque inibatur, praefecti constituebantur.
**これら(の軍勢)が[[w:ハエドゥイ族|ハエドゥイー族]]の領土で閲兵されて、数が見積もられて、指揮官たちが決められた。
*④ Commio Atrebati, Viridomaro et [[w:la:Eporedorix|Eporedorigi]] [[w:la:Haedui|Haeduis]],
**アトレバテス族の[[w:コンミウス|コンミウス]]、ハエドゥイー族のウィリドマルスとエポレドリクス、
*[[w:la:Vercassivellaunus|Vercassivellauno]] Arverno, consobrino Vercingetorigis, summa imperii traditur.
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の従兄弟である[[w:アルウェルニ族|アルウェルニー族]]のウェルカッスィウェッラウヌスに、最高司令権が託された。
*His delecti ex civitatibus attribuuntur, quorum consilio bellum administraretur.
**彼らに、諸部族から選ばれた者たちが付与されて、その者たちの協議により戦争が指導された。
*⑤ Omnes alacres et fiduciae pleni ad [[w:la:Alesia|Alesiam]] proficiscuntur,
**皆が、活気があって自身に満ち、[[w:アレシア|アレスィア]]へ向けて出発した。
*⑥ neque erat omnium quisquam qui adspectum modo tantae multitudinis sustineri posse arbitraretur,
**これほどの大軍を一見しただけで持ちこたえられる者は、誰一人いないと思われた。
*praesertim ancipiti proelio,
**とりわけ(内周と外周の)両面の戦闘で、
*cum ex oppido eruptione pugnaretur, foris tantae copiae equitatus peditatusque cernerentur.
**城塞都市からは出撃により戦われ、外からは騎兵と歩兵のこれほどの軍勢が視認されるのであるから。
===77節===
'''飢餓状態のアレスィアで、クリトグナトゥスが極論を唱える'''
*① At ii qui [[w:la:Alesia|Alesiae]] obsidebantur
**ところが、[[w:アレシア|アレスィア]]に包囲されていた者たちは、
*praeterita die qua auxilia suorum exspectaverant,
**味方の援軍を待ち望んでいた日も経過して、
*consumpto omni frumento,
**すべての糧食を消費し尽くして、
*inscii quid in [[w:la:Haedui|Haeduis]] gereretur,
**[[w:ハエドゥイ族|ハエドゥイー族]]のところにおいて何がなされているのかを知らず、
*concilio coacto de exitu suarum fortunarum consultabant.
**会合を召集して、自分たちの命運の結末について協議した。
*② Ac variis dictis sententiis
**そして、さまざまな意見が述べられた。
*quarum pars deditionem,
**それらの一部は降伏を、
*pars dum vires suppeterent eruptionem censebat,
**別の一部は、活動力が十分にある間に突撃することを考慮していた。
*non praetereunda oratio [[w:la:Critognatus|Critognati]] videtur propter eius singularem et nefariam crudelitatem.
**クリトグナトゥスの演説は、彼の特異で非道な残酷さのために、看過されるべきではないと思われる。
<br>
'''クリトグナトゥスの演説が始まる'''
*③ Hic summo in Arvernis ortus loco et magnae habitus auctoritatis,
**彼は、[[w:アルウェルニ族|アルウェルニー族]]において最高の身分に生まれ、大きな影響力を持つとみなされていた。
<br>
'''降伏論者は最低の輩だ'''
*"Nihil" inquit "de eorum sententia dicturus sum, qui turpissimam servitutem deditionis nomine appellant,
**「最も恥ずべき隷属を降伏という名で呼んでいる者たちの意見については、(私は)何も述べないであろう」と言った。
*neque hos habendos civium loco neque ad concilium adhibendos censeo.
**「この者たちは市民の身分を持つべきではないし、会合へ招き入れられるべきでもない、と(私は)考える。
<br>
'''突撃論者には辛抱が欠けている'''
*④ Cum his mihi res sit, qui eruptionem probant;
**突撃に賛同した者たちとともに、私の関わりはあるべきだ。
*quorum in consilio omnium vestrum consensu
**その者たちの考えには、君たち皆の同意があるだろうし、
*pristinae residere virtutis memoria videtur.
**かつての武勇の記憶が残っていることと思われる。
*⑤ Animi est ista mollitia, non virtus, paulisper inopiam ferre non posse.
**しばらくの間も(糧食の)欠乏に耐えることができない(君らの)ことは、気の弱さであって、武勇ではない。
*Qui se ultro morti offerant facilius reperiuntur quam qui dolorem patienter ferant.
**自発的に玉砕して逝った者たちは、苦痛に辛抱強く耐えた者たちよりも、より容易に見出されるのだ。
*⑥ Atque ego hanc sententiam probarem ─tantum apud me dignitas potest─,
**しかし私は(突撃という)この意見に賛同したであろう。それほど、私にとっても価値がある。
*si nullam praeterquam vitae nostrae iacturam fieri viderem;
**(ただし)もし、我々(ガッリア勢)の生命が投げ出されること以外に(方策が)何もないと思ったならばだ。
*⑦ sed in consilio capiendo omnem Galliam respiciamus, quam ad nostrum auxilium concitavimus.
**けれども、作戦を立てるに当たっては、我々のために援軍を(我々が)呼び寄せた全ガッリアを顧慮しよう。
*⑧ Quid hominum milibus LXXX(octoginta) uno loco interfectis
**(我々ガッリア勢)8万の人間が(アレスィア)1か所で殺戮されたら、
*propinquis consanguineisque nostris animi fore existimatis,
**我々の親類縁者たちの士気はどうなると(君らは)判断しているのか。
*si paene in ipsis cadaveribus proelio decertare cogentur?
**もし、ほとんど(我々)自身の亡骸の中で(味方が)決戦することを強いられたら?
*⑨ Nolite hos vestro auxilio exspoliare qui vestrae salutis causa suum periculum neglexerunt,
**君らの身の安全のために、己の危険を顧みなかった者たちのことを、君らが援助すること(の機会)を奪わないでくれ。
*nec stultitia ac temeritate vestra aut animi imbecillitate omnem Galliam prosternere et perpetuae servituti subicere.
**君らの愚かさや無思慮、または心の弱さによって、全ガッリアを滅ぼすことや永久の隷属に委ねることがないように。
<br>
'''ローマ人たちが恐れているのを見よ'''
*⑩ An quod ad diem non venerunt, de eorum fide constantiaque dubitatis?
**それとも(援軍が)期日までにやって来なかったので、彼らの誠実さや剛直さについて(君らは)疑っているのか?
*Quid ergo?
**それでは(あれは)何だ?
*Romanos in illis ulterioribus munitionibus animine causa cotidie exerceri putatis?
**ローマ人たちがあの向こう側の塁壁のところで、趣味のために毎日たえず働かされていると(君らは)思うのか?
*⑪ Si illorum nuntiis confirmari non potestis omni aditu praesaepto,
**もし、すべての出入口を(防柵で)遮られて、(援軍の到来を)彼らの伝令により(君らが)確証できないのならば、
*his utimini testibus adpropinquare eorum adventum,
**こちらの者たち(ローマ人)を、彼ら(援軍)の到来が近づいている証人として示せ。
*cuius rei timore exterriti diem noctemque in opere versantur.
**(援軍の到来という)その事態の恐れに戦慄して(ローマ人たちは)昼も夜も工事に従事しているのだ。
<br>
'''クリトグナトゥスの意見は?'''
*⑫ Quid ergo mei consilii est?
**それでは、私の考えは何であるか?
*Facere quod nostri maiores nequaquam pari bello Cimbrorum Teutonumque fecerunt:
**我々の先祖たちが(今回とは)決して比べものにならない[[w:キンブリ・テウトニ戦争|キンブリ族・テウトニ族との戦争]]でしたことをするのだ。
*qui in oppida compulsi ac simili inopia subacti
**彼ら(先祖たち)は、[[w:オッピドゥム|城塞都市]]に押し込められて、(今回と)似たような欠乏により衰弱させられて、
*eorum corporibus, qui aetate ad bellum inutiles videbantur, vitam toleraverunt
**加齢により戦争に役立たないと思われた者たちの肉体(を食べること)によって、生命を持ちこたえて、
*neque se hostibus tradiderunt.
**敵方に降伏しなかったのだ。
*⑬ Cuius rei si exemplum non haberemus,
**もし、そういう事態の先例を我々が持たなかったとしても、
*tamen libertatis causa institui et posteris prodi pulcherrimum iudicarem.
**けれども、自由のために、最も栄誉なことが決断され、子孫たちに伝えられることと、私は思いたい。
*⑭ Nam quid illi simile bello fuit?
**実際、あの戦争に(今回と)似ている何があっただろうか?
*Depopulata Gallia Cimbri magnaque inlata calamitate
**キンブリ族はガッリアを荒らしまわって、大きな災禍をもたらしたが、
*finibus quidem nostris aliquando excesserunt atque alias terras petierunt;
**あるとき我々の領土から立ち去って、他の土地を求めて行った。
*iura, leges, agros, libertatem nobis reliquerunt.
**権限、法度、耕地、自由を我々(ガッリア人)に残して行ったのだ。
*⑮ Romani vero quid petunt aliud aut quid volunt
**しかし、ローマ人たちは(以下に挙げることの)他に何を求め、何を欲しているのだろうか。
**:<span style="color:#009900;">(訳注:「しかし、ローマ人が求め、欲しているのは、以下のことである」の意。)</span>
*nisi invidia adducti quos fama nobiles potentesque bello cognoverunt,
**高貴で戦争に力強い(ガッリアの)者たちを名声で知って羨望に駆られた以外には、
*horum in agris civitatibusque considere atque his aeternam iniungere servitutem?
**彼らの土地や部族共同体に居座って、彼らを永遠の隷属を課すること以外には。
*Neque enim ulla alia condicione bella gesserunt.
**実際、(ローマ人は)他のいかなる条件でも決して戦争を遂行したことがなかった。
*⑯ Quodsi ea quae in longinquis nationibus geruntur ignoratis,
**もし、遠方の種族のところでなされていることを(君らが)知らないのであれば、
*respicite finitimam Galliam,
**ガッリアの隣人たちを見渡しなさい。
*quae in provinciam redacta,
**(彼らはローマの)[[w:属州|属州]]になることを余儀なくされ、
*iure et legibus commutatis,
**権限や法度を変えられて、
*securibus subiecta perpetua premitur servitute."
**(ローマの)権力に服属させられて、永久の隷属に苦しめられているのだ。
===78節===
'''マンドゥビイ族の投降をカエサルが拒む'''
*① Sententiis dictis
**(いくつかの)意見が述べられて、
*constituunt ut ii, qui valetudine aut aetate inutiles sunt<ref>sunt はα系写本の記述で、β系写本では sint となっている。</ref> bello, oppido excedant
**(ガッリア人たちは)健康または年齢により戦争に役立たない者たちは[[w:オッピドゥム|城塞都市]]を退去するように決めた。
*atque omnia prius experiantur quam ad Critognati sententiam descendant;
**さらに、クリトグナトゥスの意見に同意するよりも、まずあらゆることを試みるように(決めた)。
*② illo tamen potius utendum consilio,
**けれども(以下の場合には)むしろ彼(クリトグナトゥス)の意見を実行するべきだ。
*si res cogat atque auxilia morentur,
**もし、事態が強いて、援軍が遅滞させられるのならば、
*quam aut deditionis aut pacis subeundam condicionem.
**降伏あるいは講和条件を受諾することよりも(クリトグナトゥスの意見を実行するべきだ)、と。
*③ Mandubii qui eos oppido receperant,
**彼ら(ガッリア勢)を城塞都市に受け入れていたマンドゥビイ族は、
*cum liberis atque uxoribus exire coguntur.
**子供たちや妻女たちとともに(城塞都市から)出て行くことを強いられた。
*④ Hi cum ad munitiones Romanorum accessissent,
**彼らは、ローマ人たちの塁壁のところへ近づいたときに、
*flentes omnibus precibus orabant, ut se in servitutem receptos cibo iuvarent.
**自分たちを奴隷として受け入れて食糧で助けてくれるように、泣きながらあらゆる懇願で頼んだ。
*⑤ At Caesar dispositis in vallo custodibus<ref>custodibus はα系写本の記述で、β系写本では custodiis となっている。</ref> recipi prohibebat.
**だが、カエサルは、防柵の中に番兵を分けて置き、(マンドゥビイ族を)受け入れることを禁じた。
===79節===
'''ガッリア同盟軍の来援、アレスィアの歓呼'''
*① Interea Commius reliquique duces, quibus summa imperii permissa erat,
**その間に、最高司令権を任されていた[[w:コンミウス|コンミウス]]とほかの将帥たちが、
*cum omnibus copiis ad Alesiam perveniunt
**すべての軍勢とともに[[w:アレシア|アレスィア]]の辺りへ到着して、
*et colle exteriore occupato
**より外側の丘陵を占拠して、
**:<span style="color:#009900;">(訳注:現在のミュスィ=ラ=フォス村 [[w:fr:Mussy-la-Fosse|Mussy-la-Fosse]]<ref>[http://maps.google.com/maps?q=47.521944,4.438611&hl=fr&ie=UTF8&ll=47.522012,4.438648&spn=0.01849,0.027423&t=h&z=15 Google map]を参照。</ref> のある丘陵であると思われる。)</span>
*non longius mille passibus ab nostris munitionibus considunt.
**我が方(ローマ勢)の塁壁から1ローママイル(約1.5km)ほども遠くないところに陣取った。
**:<span style="color:#009900;">(訳注:現在のヴナレ=レ=ローム [[w:fr:Venarey-les-Laumes|Venarey-les-Laumes]] 市街<ref>[http://maps.google.com/maps?q=47.542778,4.445833&hl=fr&ie=UTF8&ll=47.543106,4.458475&spn=0.036965,0.054846&t=h&z=14 Google map]を参照。</ref>の周辺であると思われる。)</span>
*② Postero die equitatu ex castris educto
**翌日に、[[w:騎兵|騎兵隊]]が陣営から進発させられて、
*omnem eam planitiem quam in longitudinem milia passuum III(tria)<ref>milia passuum III はβ系写本の記述で、α系写本では quattuor milia passuum などとなっている。</ref> patere demonstravimus, complent
**3ローママイル(約4.5km)の長さにわたり広がっていることを既述した平地のすべてを、満たした。
**:<span style="color:#009900;">(訳注:[[#69節|69節]]を参照。現在のローム平原に当たると思われる。)</span>
*pedestresque copias paulum ab eo loco abditas in locis superioribus constituunt.
**[[w:歩兵|歩兵]]の軍勢を、その地からいくらか遠ざけて、より高いところに駐留させた。
**:<span style="color:#009900;">(訳注:上記の丘陵のより高い所であると思われる。)</span>
*③ Erat ex oppido Alesia despectus in campum.
**アレスィアの[[w:オッピドゥム|城塞都市]]からは(その)平地に眺望があった。
*Concurrunt<ref>concurrunt はα系写本の記述で、β系写本では concurritur となっている。</ref> his auxiliis visis;
**これらの援軍が現われると(アレスィアのガッリア人たちは)群がり集まった。
*fit gratulatio inter eos
**彼らの間で祝賀がなされて、
*atque omnium animi ad laetitiam excitantur.
**皆の心が喜びへと鼓舞された。
*④ Itaque productis copiis ante oppidum considunt
**こうして(アレスィアの)軍勢が出撃させられて、城塞都市の前に陣取って、
*et proximam fossam cratibus integunt atque aggere explent
**最も近い堀を、柴で蔽って、土砂を充満させて、
*seque ad eruptionem atque omnes casus comparant.
**突撃やあらゆる有事に戦備を整えた。
===80節===
'''ゲルマニア騎兵らローマ勢が来援ガッリア騎兵をも打ち破る'''
*① Caesar omni exercitu ad utramque partem munitionum<ref>munitionum はα系写本の記述で、β系写本では munitionis となっている。</ref> disposito,
**カエサルは、すべての[[w:歩兵|歩兵隊]]を、塁壁の(内周と外周)両側に分けて置き、
*ut, si usus veniat, suum quisque locum teneat et noverit,
**もし、必要が生じたら、おのおのが自らの部署を知って固守するようにした。
*equitatum ex castris educi et proelium committi iubet.
**[[w:騎兵|騎兵隊]]を陣営から進発させて、交戦することを命じた。
*② Erat ex omnibus castris, quae summum undique iugum tenebant, despectus
**至る所で尾根の頂きを占めていた(ローマ勢の)すべての陣営から(騎兵戦の)眺望があった。
*atque omnes milites intenti<ref>intenti はα系写本の記述で、β系写本では intenti animi、Fuchs は intentis animis と修正提案している。</ref> pugnae proventum<ref>pugnae proventum はα系写本の記述で、β系写本では proventum pugnae となっている。</ref> exspectabant.
**すべての兵士たちは(観戦に)没頭して、戦いの結果を待っていた。
*③ Galli inter equites raros sagittarios expeditosque levis armaturae interiecerant,
**ガッリア人たちは、弓兵たちと軽装歩兵たちをまばらに、騎兵たちの間に置いていて、
*qui suis cedentibus auxilio succurrerent
**その者たち(弓兵と軽装歩兵)は、味方が後退するのを支援するために馳せ寄って、
*et nostrorum equitum impetus sustinerent.
**我が方(ローマ勢)の騎兵の突撃に持ちこたえていた。
*Ab his complures de improviso vulnerati proelio excedebant.
**彼らによって(ローマ側騎兵の)かなりの者たちが、思いがけず負傷させられて、戦闘から退いた。
*④ Cum suos pugna superiores esse Galli confiderent
**ガッリア人たちが、味方が戦いで優勢であることを確信したとき、
*et nostros multitudine premi viderent,
**かつ、我が方(ローマ勢)が多勢(のガッリア騎兵)により圧倒されているのを見て取ったときに、
*ex omnibus partibus et ii qui munitionibus continebantur
**あらゆる方面から(ローマ勢の)塁壁によって囲まれていた者たちも、
*et hi<ref>hi はφ系・β系写本の記述で、χ系写本では ii となっている。</ref> qui ad auxilium convenerant
**(アレスィア)救援のために集結して来ていた者たちも、
*clamore et ululatu suorum animos confirmabant.
**大声やわめき声によって味方の闘志を強めた。
*⑤ Quod in conspectu omnium res gerebatur
**(両軍の)皆の環視の中で合戦が遂行されたので、
*neque recte ac<ref>ac はα系・π系写本の記述で、ρ系写本では aut となっている。</ref> turpiter factum celari poterat,
**立派な行為または見苦しい行為も隠されることができなかったので、
*utrosque et laudis cupiditas et timor ignominiae ad virtutem excitabant<ref>excitabant はB・M・L・N・R写本などの記述で、χ系・B・S・π系・U写本などでは excitabat となっている。</ref>.
**賞賛への功名心も、不名誉への恐れも、双方を武勇へと駆り立てた。
*⑥ Cum a meridie prope ad solis occasum dubia victoria pugnaretur,
**正午から、ほぼ日没の頃まで、勝利が不確実なまま戦われていたときに、
*Germani una in parte confertis turmis
**ゲルマニア人たちが、騎兵部隊を一か所に密集させて、
*in hostes impetum fecerunt eosque propulerunt;
**敵方に突撃を行ない、彼ら(ガッリア騎兵)を駆逐した。
*⑦ quibus in fugam coniectis
**その者たち(ガッリア騎兵)は逃亡に追いやられて、
*sagittarii circumventi interfectique sunt.
**弓兵たちは包囲されて殺戮された。
*⑧ Item ex reliquis partibus nostri cedentes usque ad castra insecuti
**我が方(ローマ勢)の残りの部隊も、撤退する(ガッリア騎兵の)者たちを陣営のところまで追撃して、
*sui colligendi facultatem non dederunt.
**立ち直る機会を与えなかった。
*⑨ At ii qui ab [[w:la:Alesia|Alesia]] processerant,
**そして、[[w:アレシア|アレスィア]]から進み出ていた者たちは、
*maesti prope victoria desperata se in oppidum receperunt.
**ほとんど絶望的な勝利に悲嘆して、城塞都市に退却した。
===81節===
'''ガッリア来援軍と籠城軍がローマ陣地に夜襲をしかける'''
*① Uno die intermisso Galli
**ガッリア人たちは一日を間に置いて、
*atque hoc spatio magno cratium, scalarum, harpagonum numero effecto
**この間に、多数の柴、[[w:梯子|梯子]]、鉤竿を調達して、
*media nocte silentio ex castris egressi
**真夜中に静けさのうちに陣営から進発して、
*ad campestres munitiones accedunt.
**平地の(ローマ勢の)塁壁の辺りへ近づいた。
*② Subito clamore sublato, qua significatione
**突然に雄叫びを上げて、それを合図として、
*qui in oppido obsidebantur de suo adventu cognoscere possent,
**[[w:オッピドゥム|城塞都市]]の中に包囲されている者たちが、自分たちの到来について認識できるようにした。
*crates proicere, fundis, sagittis, lapidibus nostros de vallo proturbare
**柴を投げ込み、投石器で、矢で、石でもって我が方(ローマ勢)を防柵から追い出すこと、
*reliquaque quae ad oppugnationem pertinent parant administrare.
**(塁壁の)攻略のために役立つほかのことに従事すること、を目論んだ。
*③ Eodem tempore clamore exaudito
**同時に(来援軍の)雄叫びを聞き取って、
*dat tuba signum suis [[w:la:Vercingetorix|Vercingetorix]] atque ex oppido educit.
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、麾下の者たちにラッパで指図を与えて、城塞都市から進発させた。
*④ Nostri, ut superioribus diebus, suus cuique<ref>suus cuique はβ系写本の記述で、χ系・B・M・S写本では ut cuique となっている。</ref> erat locus attributus, ad munitiones accedunt;
**我が方(ローマ勢)は、以前の日々に、おのおのの部署が割り当てられており、塁壁のところへ近寄った。
*fundis librilibus sudibusque, quas in opere disposuerant, ac glandibus Gallos proterrent.
**堡塁に分配されていたポンド投石器や杭、並びに玉によって、ガッリア人たちを追い払った。
**:<span style="color:#009900;">(訳注:librilis funda「ポンド投石器」;古代ローマの1ポンド [[w:la:Libra pondus|libra]] は約327グラム<ref>[[w:en:Ancient Roman units of measurement#Weight]]を参照。</ref>。)</span>
*⑤ Prospectu tenebris adempto multa utrimque vulnera accipiuntur.
**眺望が暗闇により奪われて、双方が多くの傷を蒙った。
*Complura tormentis tela coniciuntur.
**かなり多くの飛び道具が(巻上式)投石機によって投じられた。
*⑥ At [[w:la:Marcus Antonius|M.(Marcus) Antonius]] et [[w:la:Gaius Trebonius|C.(Gaius) Trebonius]] legati,
**[[w:マルクス・アントニウス|マルクス・アントニウス]]と[[w:ガイウス・トレボニウス|ガイウス・トレボニウス]] [[w:レガトゥス|両副官]]は、
*quibus hae partes ad defendendum obvenerant,
**この方面を防衛するために割り当てられていたが、
*qua ex parte nostros premi intellexerant,
**我が方(ローマ勢)が押されぎみであると見なした一帯のために、
*his auxilio ex ulterioribus castellis deductos submittebant.
**この者たちを支援するために、向こう側の砦から引き出した者たちを(援兵として)派遣した。
===82節===
'''アレスィア内外のガッリア勢が障害物に阻まれて退く'''
*① Dum longius ab munitione aberant Galli,
**ガッリア人たちは(ローマ勢の)塁壁から遠くに離れていた間は、
*plus multitudine telorum proficiebant;
**飛び道具の多さによって、前進していた。
*posteaquam propius successerunt,
**(塁壁の方へ)さらに近くに進入して来た後では、
*aut se ipsi<ref>ipsi はβ系写本の記述で、α系写本にはない。</ref> stimulis inopinantes induebant
**あるいは、思いがけず自ら「刺」に陥り、
**:<span style="color:#009900;">(訳注:stimulus「刺」については、[[#73節|73節]]⑨項を参照。)</span>
*aut in scrobes delati transfodiebantur
**あるいは、穴に陥落して(「百合」で)突き刺されたり、
**:<span style="color:#009900;">(訳注:「穴」と「百合」については、[[#73節|73節]]⑤~⑧項を参照。)</span>
*aut ex vallo ac turribus traiecti pilis muralibus interibant.
**あるいは、防柵や櫓から[[w:ピルム・ムーリアリス|防壁槍]]で射抜かれて逝った。
**:<span style="color:#009900;">(訳注:防壁槍については、[[ガリア戦記 第5巻#40節|第5巻40節]]を参照。)</span>
*② Multis undique vulneribus acceptis
**(ガッリア勢は)至る所で多くの傷を負ったが、
*nulla munitione perrupta,
**どの(ローマ側の)塁壁も突破されなかった。
*cum lux appeteret,
**<ruby><rb>暁光</rb><rp>(</rp><rt>ぎょうこう</rt><rp>)</rp></ruby>が(空を)染めたとき、
*veriti ne ab latere aperto ex superioribus castris eruptione circumvenirentur,
**開けた側面から、(ローマ勢の)高所の陣営からの突撃によって包囲されないようにと怖れて、
**:<span style="color:#009900;">(訳注:開けた側面とは、盾で守られていない右側のこと。)</span>
*se ad suos receperunt.
**味方のところへ退却した。
*③ At interiores
**それに対して、(アレスィア攻囲の)内側の者たちは、
*dum ea quae a [[w:la:Vercingetorix|Vercingetorige]] ad eruptionem praeparata erant<ref>praeparata erant は、写本(ω)ではpraeparaverant だが、このように修正提案されている。あるいは、a Vercingetorige が削除提案されている。</ref> proferunt,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]により、突撃のために準備していたものを運び出して
*priores fossas explent,
**一番前の堀を埋めている間に、
*diutius in his rebus administrandis morati
**これらの事に従事することに、より長く妨げられて、
*prius suos discessisse cognoverunt quam munitionibus adpropinquarent.
**塁壁に近づくよりも前に味方(=来援軍)が退去したことを知ったのだ。
*Ita re infecta in oppidum reverterunt.
**こうして、事は達成されていないものの、[[w:オッピドゥム|城塞都市]]に引き返した。
===83節===
'''ウェルカッスィウェッラウヌスが兵6万を率いて急所の丘へ向かう'''
*① Bis magno cum detrimento repulsi Galli
**大きな損害とともに二度も撃退されたガッリア人たちは、
*quid agant consulunt;
**何をなすべきかを協議した。
*locorum peritos adhibent;
**(その)土地に熟知した者たちを招いた。
*ex his superiorum castrorum situs munitionesque cognoscunt.
**この者たちから、(ローマ勢の)高いところの陣営の位置や塁壁を調べ上げた。
*② Erat a septentrionibus collis,
**(アレスィアの)北方に丘陵があって、
**:<span style="color:#009900;">(訳注:これは現在のレア山 le Mont Réa であると思われ、山頂にはメネルー=ル=ピトワ村<ref>[[w:fr:Ménétreux-le-Pitois]]や[http://maps.google.fr/maps?f=q&hl=fr&geocode=&q=m%C3%A9n%C3%A9treux+le+pitois&sll=42.423457,8.789063&sspn=23.611541,40.957031&ie=UTF8&t=h&hq=&hnear=M%C3%A9n%C3%A9treux-le-Pitois,+C%C3%B4te-d'Or,+Bourgogne&ll=47.55475,4.460106&spn=0.018507,0.010042&z=15 Google map]などを参照。</ref>がある。)</span>
*quem propter magnitudinem circuitus
**その周囲の大きさのために、
*opere circumplecti non potuerant nostri,
**我が方(ローマ勢)は、堡塁により囲い込むことができずにいた。
*necessarioque<ref>-que はβ系写本の記述で、α系写本にはない。</ref> paene iniquo loco et leniter<ref>leniter はπ系写本の記述で、α系・ρ系写本では leviter となっている。</ref> declivi castra fecerunt<ref>fecerunt はα系写本の記述で、β系写本では fecerant となっている。</ref>.
**やむをえず、ほとんど不利でゆるやかに傾斜した地点に陣営を造った。
*③ Haec C.(Gaius) Antistius Reginus et C.(Gaius) Caninius Rebilus legati
**これを、ガーイウス・アンティスティウス・レーギーヌスとガイウス・カニニウス・レビルス [[w:レガトゥス|両副官]]が
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''[[w:fr:Caius Antistius Reginus|Gaius Antistius Reginus]]'' は[[ガリア戦記_第6巻#1節|第6巻1節]]で既出。[[#90節|90節]]で後出。)</span>
*cum duabus legionibus obtinebant.
**2個軍団とともに占めていた。
*④ Cognitis per exploratores regionibus duces hostium
**敵方の将帥たちは、偵察者たちを通じて一帯を調べ上げて、
*LX(sexaginta) milia ex omni numero deligunt
**総員のうちから6万名を選抜した。
*earum civitatum quae maximam virtutis opinionem habebant;
**武勇において大きな評判を得ている部族のうち(から選抜した)。
*⑤ quid quoque pacto agi placeat, occulte inter se constituunt;
**何が、どんな方法で行なわれるのがよいか、互いに密かに取り決めた。
*adeundi tempus definiunt, cum meridie<ref>meridie は中世の写本(ω)の記述であるが、近世の写本(ς)では meridies となっている。</ref> esse videatur.
**正午であると思われる頃を突撃する時と定めた。
*⑥ His copiis Vercassivellaunum Arvernum,
**この軍勢を、[[w:アルウェルニ族|アルウェルニー族]]のウェルカッスィウェッラウヌス、
*unum ex quattuor ducibus, propinquum [[w:la:Vercingetorix|Vercingetorigis]], praeficiunt.
**(すなわち)4人の将帥たちの1人で、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の親族である者に、指揮させた。
*⑦ Ille ex castris prima vigilia egressus
**彼(ウェルカッスィウェッラウヌス)は、陣営から第一夜警時に進発して、
*prope confecto sub lucem itinere
**夜明け前にほぼ行軍が成し遂げられて、
*post montem se occultavit
**山の後ろに身を隠して、
*militesque ex nocturno labore sese reficere iussit.
**兵士たちに夜間の疲労を回復しておくことを命じた。
*⑧ Cum iam meridies adpropinquare videretur,
**すでに正午に近付いていると思われたときに、
*ad ea castra, quae supra demonstravimus, contendit;
**前に述べた陣営のところへ急いだ。
**:<span style="color:#009900;">(訳注:本節②項を参照。)</span>
*eodemque tempore equitatus ad campestres munitiones accedere
**同時に(ガッリア来援軍の)[[w:騎兵隊|騎兵隊]]が平地の(ローマ勢の)塁壁のところへ近付き、
*et reliquae copiae pro castris sese ostendere coeperunt.
**残りの軍勢が陣営の前に姿を現わし始めた。
===84節===
'''ウェルキンゲトリークスらアレスィア籠城軍も善戦する'''
*① [[w:la:Vercingetorix|Vercingetorix]] ex arce [[w:la:Alesia|Alesiae]] suos conspicatus ex oppido egreditur;
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、[[w:アレシア|アレスィア]]の高台から味方を望見して、[[w:オッピドゥム|城塞都市]]から進発した。
*a castris<ref>a castris はβ系写本の記述で、α系写本では単に castris となっている。</ref>, longurios, musculos, falces
**陣営から、長い竿、小屋、破城鎌や、
**:<span style="color:#009900;">(訳注:falx「破城鎌」については、[[ガリア戦記 第5巻#42節|第5巻42節]]を参照。)</span>
*reliquaque quae eruptionis causa paraverat profert.
**(塁壁を)突破するために準備していたほかのものを運び出した。
*② Pugnatur uno tempore omnibus locis atque omnia temptantur;
**一時にあらゆる場所で戦われて、あらゆることが試みられた。
*quae minime visa pars firma est, huc concurritur.
**あまり堅固ではないと思われる部分、ここへ襲いかかった。
*③ Romanorum manus tantis munitionibus distinetur
**ローマ人の手勢は、これほどの(長大な)塁壁により離して置かれていて、
*nec facile pluribus locis occurrit.
**より多くの場所には容易に駆け付けられなかった。
*④ Multum ad terrendos nostros valet clamor qui post tergum pugnantibus exstitit,
**戦っている者たちの背後で生じた雄叫びは、我が方(ローマ勢)を怖れさせるために大いに力があった。
*quod suum periculum in aliena vident virtute<ref>virtute「武勇」 はβ系写本の記述で、α系写本では salute「安全」 となっている。</ref> constare;
**というのは、自分たち(ローマ勢)の危険が他人(ガッリア勢)の武勇に依拠していると思ったから。
*omnia enim plerumque, quae absunt, vehementius hominum mentes perturbant.
**なぜなら(そこに)不在であるものすべてはたいてい、人間の心を激しく混乱させるものであったからである。
===85節===
'''ウェルカッスィウェッラウヌスが急所の丘を攻める'''
*① Caesar idoneum locum nactus
**カエサルは適当な場所を得て,
*quid quaque in<ref>quaque in はβ系写本の記述で、α系写本では qua ex となっている。</ref> parte geratur cognoscit;
*何が各方面でなされているのかを認識した。
*laborantibus submittit.
**苦戦している者たちに(援兵を)派遣した。
*② Utrisque ad animum occurrit unum esse illud tempus, quo maxime contendi conveniat:
**双方にとって、最も雌雄を決するべきはこの時のみであるということが、心に生じた。
*③ Galli, nisi perfregerint munitiones, de omni salute desperant;
**ガッリア人たちは、(ローマ人の)塁壁を突破しない限り、あらゆる身の安全に絶望することになる。
*Romani, si rem obtinuerint, finem laborum omnium exspectant.
**ローマ人は、もし事を成就したら、すべての労苦の終わるということを期待した。
*④ Maxime ad superiores munitiones laboratur, quo [[w:la:Vercassivellaunus|Vercassivellaunum]] missum demonstravimus.
**ウェルカッスィウェッラウヌスが派遣されたと既述した、より高い塁壁の辺りで(ローマ勢は)とりわけ苦戦した。
*Iniquum loci ad declivitatem fastigium magnum habet momentum.
**けわしい地形の不利な傾斜が(ローマ勢にとって)大きな影響力を持った。
*⑤ Alii tela coniciunt, alii testudine facta subeunt;
**(ガッリア勢の)ある者は飛び道具を投げやって、ある者は[[w:テストゥド|亀甲陣形]]を形成して突き進んだ。
*defatigatis invicem integri succedunt.
**疲労させられた者たちに対しては、新手の者たちが交代した。
*⑥ Agger ab universis in munitionem coniectus
**土が総勢により(ローマ人の)塁壁に投じられて、
*et ascensum dat Gallis
**ガッリア人たちに登り道を与えもしたし、
*et ea, quae in terra occultaverant Romani, contegit;
**ローマ人たちが地中に隠しておいたもの(障害物)を埋め込んでしまった。
*nec iam arma nostris nec vires suppetunt.
**我が方(ローマ勢)には、もはや武器も活力も十分になかった。
===86節===
'''危急存亡の秋、両軍の苦闘'''
*① His rebus cognitis
**これらの事態を知って、
*Caesar [[w:la:Titus Labienus|Labienum]] cum cohortibus sex subsidio laborantibus mittit;
**カエサルは、[[w:ティトゥス・ラビエヌス|ラビエーヌス]]を6個<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>とともに援兵として苦戦している者たちへ派遣した。
*② imperat, si sustinere non possit<ref>possit はχ系・B・M・S・β系写本の記述で、L・N写本では posset となっている。</ref>, deductis cohortibus eruptione pugnaret<ref>pugnaret はα系写本の記述で、β系写本では pugnet となっている。</ref>;
**もし(塁壁の防衛が)持ちこたえられなかったならば、諸大隊を引率して突撃によって戦うように、と命令していた。
*id nisi necessario ne faciat.
**それは、やむをえないのでなければ行なわないように(と命じていた)。
*③ Ipse adit reliquos, cohortatur ne labori succumbant;
**(カエサル)自身は、ほかの者たちを訪れて、労苦に屈服しないようにと鼓舞した。
*omnium superiorum dimicationum fructum in eo die atque hora docet consistere.
**これまでのあらゆる奮闘の結実がこの日、この時にかかっていることを説いた。
*④ Interiores desperatis campestribus locis propter magnitudinem munitionum
**(アレスィアに包囲されている)内側の者たちは、塁壁の大規模さのために、平坦な地点(での突破)を断念して、
*loca praerupta ex ascensu temptant;
**けわしい場所を登り坂から攻撃してみた。
*huc ea quae paraverant conferunt.
**ここに、準備していたものを運び集めた。
*⑤ Multitudine telorum ex turribus propugnantes deturbant,
**たくさんの飛び道具によって、防戦している者たちを櫓から駆逐した。
*aggere et cratibus fossas explent,
**土砂や柴で堀を埋めて、
*falcibus vallum ac loricam rescindunt.
**破城鎌によって防柵や胸壁を切り裂いた。
**:<span style="color:#009900;">(訳注:falx「破城鎌」については、[[ガリア戦記 第5巻#42節|第5巻42節]]を参照。)</span>
===87節===
'''カエサルの救援、ラビエーヌスの作戦'''
*① Mittit primo<ref>primo はφ系・ρ系写本の記述で、χ系・π系写本では primum となっている。</ref> [[w:la:Decimus Iunius Brutus Albinus|Brutum adulescentem]] cum cohortibus Caesar,
**カエサルは、初めに[[w:デキムス・ユニウス・ブルトゥス・アルビヌス|青年ブルトゥス]]を諸<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>とともに派遣して、
**:<span style="color:#009900;">(訳注:デキムス・ブルトゥスには[[ガリア戦記 第3巻#14節|第3巻14節]]で艦隊を、本巻[[#9節|9節]]②項では騎兵隊を指揮させている。)</span>
*post cum aliis C.(Gaium) Fabium legatum;
**後に副官のガイウス・ファビウスをほかの隊とともに(派遣した)。
*postremo ipse, cum vehementius pugnaretur,
**最後には(カエサル)自身が、激しく戦われていたので、
*integros subsidio adducit.
**新手の者たちを援兵として率いて行った。
*② Restituto proelio ac repulsis hostibus
**戦況が回復され、敵方が撃退されると、
*eo quo Labienum miserat contendit;
**ラビエーヌスを派遣していたところに急いだ。
*cohortes IIII(quattuor) ex proximo castello deducit,
**近隣の砦から4個歩兵大隊を引き出して、
*equitum partem se<ref>se はβ系写本の記述で、α系写本にはない。</ref> sequi,
**[[w:騎兵|騎兵]]のある一部には、自らに随行することを、
*partem circumire exteriores munitiones et ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> tergo hostes adoriri iubet.
**別の一部には、外側の塁壁を取り囲んで、敵方を背後から襲撃することを命じた。
*③ Labienus, postquam neque aggeres neque fossae vim hostium sustinere poterant,
**ラビエーヌスは、土塁も堀も敵方の武力に持ちこたえることができなかった後で、
*coactis una XL(quadraginta) cohortibus, quas ex proximis praesidiis deductas fors obtulit,
**近隣の宿営地から、はからずも引き出しておいた40個歩兵大隊を集結させて、
**:<span style="color:#009900;">(訳注:この数は、写本によって異なり、モイゼルらは undecim「11個」と提案している。)</span>
*Caesarem per nuntios facit certiorem, quid faciendum existimet.
**何がなされるべきと考えたのかを、カエサルに伝令を通じて報告した。
*Accelerat Caesar, ut proelio intersit.
**カエサルは、戦闘(の場)に居合わせるように急いで行った。
===88節===
'''雌雄決し、ガッリア来援軍が敗走'''
*① Eius adventu ex colore vestitus cognito, quo insigni in proeliis uti consuerat,
**彼(カエサル)の到来が、(彼が)戦闘において目印として用いるのが常であった衣服の色から認識され、
**:<span style="color:#009900;">(訳注:カエサルは、真紅の外套を着用していたようである。)</span>
*turmisque equitum et cohortibus visis quas se sequi iusserat,
**(カエサルが)自らに随行することを命じていた諸<ruby><rb>[[w:騎兵|騎兵]]小隊</rb><rp>(</rp><rt>トゥルマ</rt><rp>)</rp></ruby>や諸<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>が望見されて、
*ut de locis superioribus haec declivia et devexa cernebantur,
**(ウェルカッスィウェッラウヌスらが派遣された)高地から、これらの斜面や急坂が見分けられたので、
*hostes proelium committunt.
**敵方(ガッリア勢)は戦端を開いた。
*② Utrimque clamore sublato
**(ガッリア来援軍とアレスィア籠城軍の)双方から雄叫びが上げられて、
*excipit rursus ex vallo atque omnibus munitionibus clamor.
**さらに、防柵やすべての塁壁から(ローマ勢の)雄叫びが続いた。
*Nostri omissis pilis gladiis rem gerunt.
**我が方(ローマ勢)は<ruby><rb>[[w:ピルム|投槍]]</rb><rp>(</rp><rt>ピルム</rt><rp>)</rp></ruby>を放棄して、<ruby><rb>[[w:グラディウス (武器)|長剣]]</rb><rp>(</rp><rt>グラディウス</rt><rp>)</rp></ruby>で合戦した。
*③ Repente post tergum equitatus cernitur;
**不意に(ガッリア勢の)背後に(ローマ勢の)騎兵隊が見分けられた。
**:<span style="color:#009900;">(訳注:87節②項で、カエサルは騎兵隊に外壁を迂回して敵を背後から襲撃するように命じていた。)</span>
*cohortes aliae adpropinquant.
**別の諸<ruby><rb>歩兵大隊</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>も接近して来た。
*Hostes terga vertunt;
**敵方(ガッリア勢)は、(ローマ勢に)背を向けた。
*fugientibus equites occurrunt.
**逃げる者たち(ガッリア勢)を(ローマ勢の)騎兵たちが追撃した。
*Fit magna caedes.
**大虐殺が起こった。
*④ Sedullus, dux et princeps Lemovicum, occiditur;
**レモウィケス族の将帥で領袖であるセドゥッルスが斃された。
*[[w:la:Vercassivellaunus|Vercassivellaunus]] Arvernus vivus in fuga comprehenditur;
**[[w:アルウェルニ族|アルウェルニー族]]のウェルカッスィウェッラウヌスは逃亡中に生きたまま捕らえられた。
*signa militaria LXXIIII(septuaginta quattuor) ad Caesarem referuntur;
**(ガッリア勢の)74本の軍旗がカエサルのところへ運んで来られた。
*pauci ex tanto numero se incolumes<ref>se incolumes はα系写本の記述で、β系写本では incolumes se となっている。</ref> in castra recipiunt.
**これほどの兵数のうち、わずかな者たち(だけ)が無傷のまま陣営に退却した。
*⑤ Conspicati ex oppido caedem et fugam suorum
**(アレスィアの)[[w:オッピドゥム|城塞都市]]から味方の虐殺や逃亡を視認した者たちは、
*desperata salute copias a munitionibus reducunt.
**身の安全に絶望して、軍勢を塁壁から(城塞都市に)呼び戻した。
*⑥ Fit protinus hac re audita ex castris Gallorum fuga.
**この事態が聞かれるとただちに、(来援に来ていた)ガッリア人たちの陣営から逃亡が生じた。
*Quodnisi crebris subsidiis ac totius diei labore milites essent defessi,
**もし、たびたびの(味方への)支援や一日中の働きにより兵士たちが疲れ果てていなかったならば、
*omnes hostium copiae deleri potuissent.
**敵方(ガッリア来援軍)の全軍勢が壊滅させられることが可能であっただろう。
*⑦ De media nocte missus equitatus novissimum agmen consequitur;
**真夜中の頃に、派遣されていた(ローマ勢の)騎兵隊が(ガッリア勢の)後衛に追いついて、
*magnus numerus capitur atque interficitur;
**(ガッリア勢の)大多数が捕らえられ、かつ殺戮された。
*reliqui ex fuga in civitates discedunt.
**(ガッリア来援軍の)残りの者たちは、逃亡して諸部族のところに逃げのびた。
==ガッリア同盟軍主力の降伏==
===89節===
[[画像:Vercingétorix se rend à César 1886 HPMotte.jpg|thumb|right|330px|「カエサルの陣営に投降するウェルキンゲトリークス」<br>“Vercingétorix se rendant au camp de César”、<br>アンリ=ポール・モット([[w:fr:Henri-Paul_Motte|Henri-Paul Motte]])画、1886年。<br>[[w:ル・ピュイ=アン=ヴレ|ル・ピュイ=アン=ヴレ]]のクロザティエ美術館([[w:fr:Musée Crozatier au Puy-en-Velay|Musée Crozatier]] au [[w:fr:Le Puy-en-Velay|Puy-en-Velay]])蔵。]]
[[画像:Lionel Royer - Vercingetorix Throwing down His Weapons at the feet of Julius Caesar.jpg|thumb|right|330px|「ウェルキンゲトリークスが彼の武器をユリウス・カエサルの足元に投げ捨てる」“Vercingétorix jette ses armes aux pieds de Jules César”、リオネル=ノエル・ロワイエ([[w:fr:Lionel Royer|Lionel-Noël Royer]])
画、1899年。[[w:ル・ピュイ=アン=ヴレ|ル・ピュイ=アン=ヴレ]]のクロザティエ美術館([[w:fr:Musée Crozatier au Puy-en-Velay|Musée Crozatier]] au [[w:fr:Le Puy-en-Velay|Puy-en-Velay]])蔵。]]
[[画像:Coin_Vercingetorix.jpg|thumb|right|300px|ローマがBC48年に発行した[[w:デナリウス|デナリウス銀貨]]。ウェルキンゲトリークスの横顔が刻まれているとも言われ、[[w:マメルティヌスの牢獄|トゥッリアヌム牢獄]]に虜囚となっているかつてのガッリアの盟主を見せしめにしたものとも考えられる。彼はBC46年に処刑されたが、カエサルもBC44年に暗殺された。]]
'''ウェルキンゲトリークスとアレスィア籠城軍の降伏'''
*① Postero die [[w:la:Vercingetorix|Vercingetorix]] concilio convocato
**(来援軍が敗走した)翌日に、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は会合を召集して、
*id bellum se suscepisse<ref>se suscepisse はα系写本の記述で、β系写本では suscepisse se となっている。</ref>
**この戦争を引き受けたことは
*non suarum necessitatum<ref>necessitatum はχ系・S・L・N・β系写本の記述で、B・M写本では necessitatium となっている。</ref>, sed communis libertatis causa demonstrat,
**自らの(野心の)必要性からではなく、(ガッリア)共通の自由のためだ、と明言した。
*② et quoniam sit fortunae cedendum,
**運命には従うべきものなのであるから、
*ad utramque rem se illis offerre,
**(敗軍の将として、以下の)どちらの事にも、自ら(の処遇)を彼ら(ガッリア人たち)に委ねよう。
*seu morte sua Romanis satisfacere
**あるいは(ウェルキンゲトリークス)自らの死によってローマ人たちに償うこと(を欲する)にせよ、
*seu vivum tradere velint.
**あるいは生きたまま(ローマ人たちに)引き渡すことを欲するにせよ、と。
*③ Mittuntur de his rebus ad Caesarem legati.
**これらの事柄について、カエサルのところへ使節たちが遣わされた。
*Iubet arma tradi, principes produci.
**(カエサルは)武器が引き渡されること、領袖たちが連行されて来ることを命じた。
*④ Ipse in munitione pro castris consedit;
**(カエサル)自身は、陣営の前の塁壁のところに腰掛けた。
*eo duces producuntur.
**そこに(アレスィアに籠城していた)将帥たちが連行されて来た。
*Vercingetorix deditur, arma proiciuntur.
**ウェルキンゲトリークスが引き渡されて、武器が投げ捨てられた。
*⑤ Reservatis [[w:la:Haedui|Haeduis]] atque Arvernis,
**(カエサルは)[[w:ハエドゥイ族|ハエドゥイー族]]と[[w:アルウェルニ族|アルウェルニー族]](の将兵たち)を保持しておいた。
*si per eos civitates reciperare<ref>reciperare はχ系・B<sup>1</sup>・S・U写本の記述で、B<sup>c</sup>・M・L・N・π系・R写本では recuperare となっている。</ref> posset,
**彼らによって両部族国家を(同盟国として)回復できないだろうかと(考えたのだ)。
*ex reliquis captivis toto exercitui capita singula praedae nomine distribuit.
**残りの(諸部族の)捕虜たちから、全軍(のローマ人)に一名ずつを戦利品という名目で分配した。
===90節===
[[画像:Autun_porte_Saint-André.JPG|thumb|right|300px|[[w:オータン|オータン市]]に遺されたローマ時代からの聖アンドレ門。[[w:ビブラクテ|ビブラクテ]]を首邑としていた[[w:ハエドゥイ族|ハエドゥイー族]]は、ローマ帝政初期に東方の平地に移り、「[[w:アウグストゥス|アウグストゥス]]の砦」を意味するアウグストドゥーヌム([[w:la:Augustodunum|Augustodunum]])を建設して首邑とした。これが現在のオータン(Autun)となっている。]]
[[画像:Clermont_vu_de_Montjuzet.JPG|thumb|right|300px|[[w:クレルモン=フェラン|クレルモン=フェラン市]]の街並み。ローマに降伏した[[w:アルウェルニ族|アルウェルニー族]]は、後に首邑のゲルゴウィアを廃城とされ、北方の平野にあるネメトゥム(Nemetum)に移住させられた。帝政初期に[[w:アウグストゥス|アウグストゥス]]に由来するアウグストネメトゥム([[w:la:Augustonemetum|Augustonemetum]])に改称して、[[w:クレルモン教会会議|クレルモン教会会議]]が開かれるなど宗教的中心地として栄え、現在のクレルモン=フェランに至る。]]
'''ハエドゥイー族とアルウェルニー族の降伏、諸軍団の冬営'''
*① His rebus confectis in [[w:la:Haedui|Haeduos]] proficiscitur;
**これらの事が成し遂げられて、(カエサルは)[[w:ハエドゥイ族|ハエドゥイー族]]のところに出発した。
*civitatem recipit.
**同部族を(同盟国として)回復した。
*② Eo legati ab Arvernis missi:
**そこに、[[w:アルウェルニ族|アルウェルニー族]]から使節たちが遣わされて来て、
*quae imperaret, se facturos pollicentur.
**自分たちは(カエサルが)命令したことを行なうであろう、と約束した。
*Imperat magnum numerum obsidum.
**(カエサルは)多数の人質(の供出)を命令した。
*③ Legiones in hiberna mittit.
**(カエサルは)諸[[w:ローマ軍団|軍団]]を冬営地に派遣した。
*Captivorum circiter XX(viginti) milia Haeduis Arvernisque reddit.
**捕虜たち約2万人をハエドゥイー族とアルウェルニー族に返還した。
*④ [[w:la:Titus Labienus|T.<small>(Titum)</small> Labienum]] duabus cum<ref>duabus cum はχ系・B・M・S写本の記述で、L・N・β系写本では cum duabus となっている。</ref> legionibus et equitatu in Sequanos proficisci iubet;
**[[w:ティトゥス・ラビエヌス|ティトゥス・ラビエーヌス]]を2個軍団および[[w:騎兵|騎兵隊]]とともにセクアニ族のところに出発することを命じた。
*huic M.<small>(Marcum)</small> Sempronium Rutilum attribuit.
**彼には、マルクス・[[w:センプロニウス氏族|センプロニウス]]・ルティルスを付属させた。
*⑤ C.<small>(Gaium)</small> Fabium legatum et L.<small>(Lucium)</small> Minucium Basilum cum legionibus duabus in Remis conlocat,
**副官 ガーイウス・ファビウスとルキウス・ミヌキウス・バスィルスを2個軍団とともにレーミー族のところに配置した。
**:<span style="color:#009900;">(訳注:バスィルスは[[ガリア戦記 第6巻#29節|第6巻29節]]で騎兵隊を指揮した。)</span>
*ne quam ab<ref>ab はφ系写本の記述で、χ系・β系写本では a となっている。</ref> finitimis Bellovacis calamitatem accipiant.
**(レーミー族が)近隣のベッロウァキ族から何らかの災禍を蒙らないようにしたのである。
*⑥ C.<small>(Gaium)</small> Antistium Reginum in Ambivaretos,
**ガーイウス・アンティスティウス・レーギーヌスをアンビウァレティ族のところに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''[[w:fr:Caius Antistius Reginus|Gaius Antistius Reginus]]'' は[[ガリア戦記_第6巻#1節|第6巻1節]]、[[#83節|本巻83節]]で既出。)</span>
*T.<small>(Titum)</small> Sextium in Bituriges,
**ティトゥス・セクスティウスをビトゥリゲース族のところに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[w:en:Titus Sextius|Titus Sextius]] も[[ガリア戦記_第6巻#1節|第6巻1節]]で既出。第6巻の年からカエサルの副官、<br> [[w:三頭政治#第二回三頭政治|第二回三頭政治]]では[[w:アフリカ属州|アフリカ属州]]の総督を務め、[[w:マルクス・アエミリウス・レピドゥス|レピドゥス]]に引き継ぐ。)
*C.<small>(Gaium)</small> Caninium Rebilum in Rutenos cum singulis legionibus mittit.
**ガーイウス・カニニウス・レビルスをルテーニー族のところに、それぞれ1個軍団とともに派遣した。
*⑦ [[w:la:Quintus Tullius Cicero|Q.<small>(Quintum)</small> Tullium Ciceronem]] et P.<small>(Publium)</small> Sulpicium
**[[w:クィントゥス・トゥッリウス・キケロ|クィーントゥス・トゥッリウス・キケロー]]とプーブリウス・スルピキウス(・ルーフス)を
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:カエサルの副官 ''[[w:en:Sulpicia_gens#Sulpicii_Rufi|Publius Sulpicius Rufus]] は、<br> [[ガリア戦記_第4巻#22節|第4巻22節]]で既述。[[内乱記_第1巻#74節|『内乱記』第1巻74節]]でも言及される。<br> [[w:紀元前48年|BC48年]]に[[w:プラエトル|法務官]]、[[w:紀元前42年|BC42年]]に[[w:ケンソル|監察官]]に任官する。)</span>
*[[w:la:Cabillonum|Cavilloni]]<ref>Cavilloni はβ系写本の記述で、α系写本などでは Cabilloni となっている。</ref> et [[w:la:Matisco|Matiscone]] in Haeduis ad Ararim rei frumentariae causa conlocat.
**ハエドゥイー族のところのアラル川沿いのカウィッロヌムとマティスコに、糧秣調達のために配置した。
**:<span style="color:#009900;">(訳注:カウィッロヌムは現在の[[w:シャロン=スュル=ソーヌ|シャロン=スュル=ソーヌ]]、マティスコは現在の[[w:マコン|マコン]]。)</span>
*Ipse [[w:la:Bibracte|Bibracte]] hiemare constituit.
**(カエサル)自身は、[[w:ビブラクテ|ビブラクテ]]で冬営することを決めた。
*⑧ His litteris<ref>his litteris「これらが書簡により(知られると)」はα系写本の記述で、β系写本では huius anni rebus「この年の事績が(知られると)」と異なっており、huius anni rebus <ex Caesaris> litteris「この年の事績が<カエサルの>書簡により(知られると)」 などと修正提案されている。」</ref> cognitis Romae dierum viginti supplicatio redditur.
**これらが(カエサルの)書簡により知られると、ローマで20日間の感謝祭が許された。
**:<span style="color:#009900;">(訳注:[[ガリア戦記 第2巻#35節|第2巻35節]]では、かつてない15日間の感謝祭が決議されたが、今回はそれを超えるものであった。)</span>
----
*<span style="background-color:#99ff99;">「ガリア戦記 第7巻」了。「[[ガリア戦記 第8巻]]」へ続く。</span>
==脚注==
<references />
==参考リンク==
'''ウィキペディア英語版など'''
*'''[[w:en:Category:Tribes of ancient Gaul|Category:Tribes of ancient Gaul]]'''('''[[w:Category:ガリアの部族|Category:ガリアの部族]]''')- [[w:fr:Catégorie:Personnalité gauloise|fr:Catégorie:Personnalité gauloise]]
**[[w:en:Allobroges|Allobroges]](アッロブロゲス族)
**'''[[w:en:Arverni|Arverni]]'''('''[[w:アルウェルニ族|アルウェルニー族]]''')
**:'''[[w:en:Vercingetorix|Vercingetorix]]'''('''[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]''')- '''<span style="background-color:#ffff00;">[[w:la:Vercingetorix|la:Vercingetorix]]</span>'''
**:[[w:fr:Celtillos|fr:Celtillos]](ケルティッルス);ウェルキンゲトリークスの父
**:[[w:fr:Gobannitio|fr:Gobannitio]](ゴバンニティオ);ウェルキンゲトリークスのおじ
**:[[w:en:Vercassivellaunos|Vercassivellaunos]](ウェルカッスィウェッラウヌス) - <span style="background-color:#ffff00;">[[w:la:Vercassivellaunus|la:Vercassivellaunus]]</span>
**:Critognatus(クリトグナトゥス)- <span style="background-color:#ffff00;">[[w:la:Critognatus|la:Critognatus]]</span>
**[[w:en:Atrebates|Atrebates]](アトレバテス族)
**:[[w:en:Commius|Commius]]([[w:コンミウス|コンミウス]]):ガッリアとブリタンニアにおけるアトレバテス族の王
**[[w:en:Aedui|Aedui]]([[w:ハエドゥイ族|ハエドゥイー族]])- '''<span style="background-color:#ffff00;">[[w:la:Haedui|la:Haedui]]</span>''';ガッリア中部の有力部族 - [[w:fr:Éduens|fr:Éduens]] <[[w:fr:Catégorie:Éduens|fr:Catégorie:Éduens]]
**:[[w:en:Convictolitavis|Convictolitavis]](コンウィクトリタウィス)- [[w:fr:Convictolitavis|fr:Convictolitavis]]
**:[[w:fr:Cotos|fr:Cotos]](コトゥス)
**:[[w:fr:Litaviccos|fr:Litaviccos]](リタウィックス)
**:エポレドリクス - <span style="background-color:#ffff00;">[[w:la:Eporedorix|la:Eporedorix]]</span>
**:ウィリドマルス
**[[w:en:Andes (Andecavi)|Andes (Andecavi)]](アンデス族);現在の[[w:アンジェ|アンジェ]](Angers)周辺の部族
**[[w:en:Aulerci|Aulerci]](アウレルキ族);現在のフランス北西部に居住していた部族連合
**[[w:en:Bellovaci|Bellovaci]](ベッロウァキ族)
**[[w:en:Bituriges|Bituriges]](ビトゥリゲース族);現在の[[w:ブールジュ|ブールジュ]](Bourges)周辺の部族。[[#5節|5節]]でガッリア同盟軍に寝返る。
**[[w:en:Boii|Boii]](ボイイ族)- <span style="background-color:#ffff00;">[[w:la:Boii|la:Boii]]</span>;[[w:ボヘミア|ボヘミア]]([[w:la:Bohemia|la:Bohemia]])から移住してきた部族
**Cadurci(カドゥルキー族);現在の[[w:カオール|カオール]](Cahors)周辺の部族 - [[w:fr:Cadurques|fr:Cadurques]]
**:[[w:en:Lucterius|Lucterius]](ルクテリウス);カドゥルキー族の指導者、[[#5節|5節]]を参照。
**[[w:en:Carnutes|Carnutes]](カルヌーテース族);現在の[[w:シャルトル|シャルトル]](Chartres)周辺の部族
**[[w:en:Gabali|Gabali]](ガバリ族)
**Haedui ⇒ Aedui
**[[w:en:Helvii|Helvii]](ヘルウィイ族);ガッリア南部にいたローマの同盟部族
**[[w:en:Lemovices|Lemovices]](レモウィケス族);現在の[[w:リモージュ|リモージュ]](Limoges)周辺の部族
**:[[w:en:Sedullos|Sedullos]](セドゥッルス Sedullus);レモウィケス族の将帥・領袖
**[[w:en:Lingones|Lingones]](リンゴネス族)- [[w:fr:Lingons|fr:Lingons]];現在のラングル([[w:en:Langres|Langres]])周辺の部族
**[[w:en:Mandubii|Mandubii]](マンドゥビイ族);[[w:アレシア|アレスィア]]周辺にいた部族
**Nitiobroges(ニティオブロゲス族)- [[w:fr:Nitiobroges|fr:Nitiobroges]]
**:[[w:fr:Ollovico|fr:Ollovico]](オッロウィコ);ローマ元老院から友人と呼ばれた王
**:[[w:fr:Teutomatos|fr:Teutomatos]](テウトマトゥス);王で、オッロウィコの子
**[[w:en:Parisii (Gaul)|Parisii (Gaul)]]([[w:パリシイ族|パリスィイ族]]);現在の[[w:パリ|パリ]]周辺の部族
**[[w:en:Pictones|Pictones]](ピクトネス族);現在の[[w:ポワチエ|ポワティエ]](Poitiers)周辺の部族
**[[w:en:Remi|Remi]](レーミー族)
**[[w:en:Ruteni|Ruteni]](ルテーニー族)
**[[w:en:Segusiavi|Segusiavi]](セグスィアウィ族)
**[[w:en:Senones|Senones]](セノネース族)- <span style="background-color:#ffff00;">[[w:la:Senones|la:Senones]]</span>;現在の[[w:サン (ヨンヌ県)|サン]](Sens)周辺の部族
***[[w:en:Acco|Acco]](アッコー)
**[[w:en:Sequani|Sequani]](セクアニ族)
**[[w:en:Treveri|Treveri]](トレウェリ族)
**[[w:en:Turones|Turones]](トゥロニ族/トゥロネス族);現在の[[w:トゥール (アンドル=エ=ロワール県)|トゥール]](Tours)周辺の部族
**[[w:en:Volcae|Volcae]](ウォルカエ族)
*<span style="background-color:#ffff00;">[[w:la:Germani|la:Germani]]</span>(ゲルマニア人)
*'''ガッリアの地名''' - '''[[w:la:Categoria:Urbes Franciae|la:Categoria:Urbes Franciae]]'''(フランスの都市)
**<span style="background-color:#ffff00;">[[w:la:Agedincum|la:Agedincum]]</span>(アゲディンクム);現在の[[w:サンス|サンス]]([[w:en:Sens|Sens]])
**[[w:en:Alesia_(city)|Alesia (city)]]([[w:アレシア|アレスィア]])- <span style="background-color:#ffff00;">[[w:la:Alesia|la:Alesia]]</span>:現在のアリーズ=サント=レーヌ([[w:fr:Alise-Sainte-Reine|fr:Alise-Sainte-Reine]])
**:'''[[w:en:Battle_of_Alesia|Battle of Alesia]]'''('''[[w:アレシアの戦い|アレスィアの戦い]]''')- '''<span style="background-color:#ffff00;">[[w:la:Alesiae_pugna|la:Alesiae pugna]]</span>'''
**[[w:en:Avaricum|Avaricum]] ⇒ [[w:en:Bourges|Bourges]](アウァーリクム - 現在の[[w:ブールジュ|ブールジュ]])- <span style="background-color:#ffff00;">[[w:la:Avaricum_Biturigum|la:Avaricum Biturigum]]</span>
**[[w:en:Bibracte|Bibracte]]([[w:ビブラクテ|ビブラクテ]]) - <span style="background-color:#ffff00;">[[w:la:Bibracte|la:Bibracte]]</span>:[[w:ハエドゥイ族|ハエドゥイー族]]の首邑。現在のボーヴレ山([[w:fr:Mont_Beuvray|fr:Mont Beuvray]])の山頂に位置していた。
**<span style="background-color:#ffff00;">[[w:la:Cabillonum|la:Cabillonum]]</span>(カビッロヌム/カウィッロヌム)- 現在の[[w:シャロン=スュル=ソーヌ|シャロン=スュル=ソーヌ]]([[w:fr:Chalon-sur-Saône|fr:Chalon-sur-Saône]])
**[[w:en:Cenabum|Cenabum]](ケナブム)- 現在の[[w:オルレアン|オルレアン]] - [[w:fr:Cenabum|fr:Cenabum]]
**<span style="background-color:#ffff00;">[[w:la:Decetia|la:Decetia]]</span>(デケティア)- [[w:en:Decize|en:Decize]] - 現在のドスィーズ(ドシーズ)([[w:fr:Decize|fr:Decize]])
**[[w:en:Gergovie|Gergovie]](ゲルゴウィア)- <span style="background-color:#ffff00;">[[w:la:Gergovia|la:Gergovia]]</span>
**:'''[[w:en:Battle of Gergovia|Battle of Gergovia]]'''('''[[w:ゲルゴウィアの戦い|ゲルゴウィアの戦い]]''')- '''<span style="background-color:#ffff00;">[[w:la:Obsidio Gergoviensis|la:Obsidio Gergoviensis]]</span>'''
**[[w:en:Gorgobina|Gorgobina]](ゴルゴビナ);ボイイ族が定住した城塞都市。現在のサン=パリズ=ル=シャテル([[w:en:Saint-Parize-le-Châtel|Saint-Parize-le-Châtel]])またはラ・ゲルシュ([[w:en:La Guerche|La Guerche]])
**'''[[w:en:Lutetia|Lutetia]]'''('''[[w:ルテティア|ルテティア]]'''/ルテキア);[[w:パリシイ族|パリスィイ族]]の首邑、現在の[[w:パリ|パリ市]] - <span style="background-color:#ffff00;">[[w:la:Lutetia|la:Lutetia]]</span>
**<span style="background-color:#ffff00;">[[w:la:Matisco|la:Matisco]]</span>(マティスコ);現在の[[w:マコン|マコン]](Mâcon)
**Metlosenum(メトロセドゥム/メティオセドゥム/メロドゥーヌム);現在の[[w:ムラン|ムラン]] - <span style="background-color:#ffff00;">[[w:la:Melodunum|la:Melodunum]]</span>
**[[w:en:Narbonne|Narbonne]]([[w:ナルボンヌ|ナルボンヌ]];ラテン名ナルボ)- <span style="background-color:#ffff00;">[[w:la:Narbo|la:Narbo]]</span>;ガッリア南部・地中海岸のローマの拠点
**[[w:en:Noviodunum|Noviodunum]](ノウィオドゥーヌム)- 現在のヌン=スュル=ブーヴロン([[w:en:Neung-sur-Beuvron|Neung-sur-Beuvron]])と推定されている。従来はローヌ川沿いの[[w:サンセール|サンセール]]([[w:en:Sancerre|Sancerre]])が有力だった
**[[w:en:Vellaunodunum|Vellaunodunum]](ウェッラウノドゥーヌム)- [[w:fr:Vellaunodunum|fr:Vellaunodunum]];現在のモンタルジ([[w:en:Montargis|Montargis]])やボーヌ=ラ=ロランド([[w:en:Beaune-la-Rolande|Beaune-la-Rolande]])、シャトー=ランドン([[w:en:Château-Landon|Château-Landon]])などと推定されている
**[[w:en:Vienne, Isère|Vienne, Isère]](ヴィエンヌ;ラテン名ウィエンナ)- [[w:la:Vienna|la:Vienna]]
*'''ガッリアの地形'''
**Cevenna(ケウェンナ山地):現在のセヴェンヌ山地([[w:fr:Cévennes|fr:Cévennes]]・[[w:en:Cévennes|Cévennes]])
**<span style="background-color:#ffff00;">[[w:la:Elaver|la:Elaver]]</span>(エラウェル川):現在の[[w:アリエ川|アリエ川]]([[w:fr:Allier (rivière)|fr:Allier (rivière)]])
**<span style="background-color:#ffff00;">[[w:la:Liger|la:Liger]]</span>(リゲル川):現在の[[w:ロワール川|ロワール川]]([[w:fr:Loire (fleuve)|fr:Loire (fleuve)]])
**<span style="background-color:#ffff00;">[[w:la:Rhenus|la:Rhenus]]</span>(レヌス川):現在の[[w:ライン川|ライン川]]([[w:fr:Rhin|fr:Rhin]])
**<span style="background-color:#ffff00;">[[w:la:Rhodanus|la:Rhodanus]]</span>(ロダヌス川):現在の[[w:ローヌ川|ローヌ川]]([[w:fr:Rhône|fr:Rhône]])
**<span style="background-color:#ffff00;">[[w:la:Sequana|la:Sequana]]</span>(セクアナ川):現在の[[w:セーヌ川|セーヌ川]]([[w:fr:Seine|fr:Seine]])
*ローマ勢
**[[w:en:Mark_Antony|Mark Antony]]([[w:マルクス・アントニウス|マルクス・'''アントニウス''']])- <span style="background-color:#ffff00;">[[w:la:Marcus_Antonius|la:Marcus Antonius]]</span>
**[[w:en:Decimus_Junius_Brutus_Albinus|Decimus Junius '''Brutus''' Albinus]]([[w:デキムス・ユニウス・ブルトゥス・アルビヌス|デキムス・ユニウス・'''ブルトゥス'''・アルビヌス]])- <span style="background-color:#ffff00;">[[w:la:Decimus_Iunius_Brutus_Albinus|Decimus Iunius Brutus Albinus]]</span>([[#9節|9節]])
**[[w:en:Quintus Tullius Cicero|Quintus Tullius '''Cicero''']]([[w:クィントゥス・トゥッリウス・キケロ|クィントゥス・トゥッリウス・'''キケロ''']])- <span style="background-color:#ffff00;">[[w:la:Quintus Tullius Cicero|la:Quintus Tullius Cicero]]</span>:カエサルの副官
**Gaius '''Fabius'''(ガイウス・'''ファビウス'''):カエサルの副官
**[[w:en:Titus Labienus|Titus '''Labienus''']]([[w:ティトゥス・ラビエヌス|ティトゥス・'''ラビエーヌス''']])- <span style="background-color:#ffff00;">[[w:la:Titus Labienus|la:Titus Labienus]]</span>:カエサルの副官
**[[w:en:Trebonius|'''Trebonius''']]([[w:ガイウス・トレボニウス|ガイウス・'''トレボニウス''']])- <span style="background-color:#ffff00;">[[w:la:Gaius_Trebonius|la:Gaius Trebonius]]</span>:カエサルの副官
**[[w:en:Lucius Julius Caesar IV|Lucius Julius '''Caesar''' IV]](ルキウス・ユリウス・'''カエサル'''4世):総督カエサルの副官で、4代前の高祖父を共有する。BC64年に執政官を務めた。
*イタリア方面
**[[w:en:Cisalpine_Gaul|Cisalpine Gaul]]([[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]) - [[w:la:Gallia Cisalpina|la:Gallia Cisalpina]]
**[[w:en:Populares|Populares]]([[w:ポプラレス|ポプラレス]];民衆派)- [[w:la:Populares|la:Populares]]
**:[[w:en:Publius_Clodius_Pulcher|Publius Clodius Pulcher]]([[w:プブリウス・クロディウス・プルケル|プブリウス・クロディウス・プルケル]]) - [[w:la:Publius_Clodius_Pulcher|la:Publius Clodius Pulcher]]
**[[w:en:Optimates|Optimates]]([[w:オプティマテス|オプティマテス]];元老院派)
**:[[w:en:Cicero|Cicero]]([[w:マルクス・トゥッリウス・キケロ|マルクス・トゥッリウス・キケロ]])- [[w:la:Marcus_Tullius_Cicero|la:Marcus Tullius Cicero]]
**:[[w:en:Titus_Annius_Milo|Titus Annius Milo]](ティトゥス・アンニウス・ミロ)- [[w:la:Titus_Annius_Milo|la:Titus Annius Milo]]
**:[[w:en:Pompey|Pompey]]([[w:グナエウス・ポンペイウス|グナエウス・ポンペイウス]])- [[w:la:Gnaeus_Pompeius_Magnus|la:Gnaeus Pompeius Magnus]]
4te0f7po73y74tjxictmke5lebc5qco
304912
304909
2026-10-20T14:35:59Z
Linguae
449
/* 34節 */ 修整
304912
wikitext
text/x-wiki
[[Category:ガリア戦記|7]] [[Category:ガリア戦記 第7巻|*]]
[[ガリア戦記]]> '''第7巻''' >[[ガリア戦記 第7巻/注解|注解]]
<div style="text-align:center">
<span style="font-size:20px; font-weight:bold; font-variant-caps: petite-caps; color:white; background: rgb(47,94,255);background: linear-gradient(180deg, rgba(47,94,255,1) 0%, rgba(24,56,255,1) 50%, rgba(0,8,255,1) 100%);"> C IVLII CAESARIS COMMENTARIORVM BELLI GALLICI </span>
<span style="font-size:40px; font-weight:bold; color:white; background: rgb(47,94,255);background: linear-gradient(180deg, rgba(47,94,255,1) 0%, rgba(24,56,255,1) 50%, rgba(0,8,255,1) 100%);"> LIBER SEPTIMVS </span>
</div>
[[画像:Gaule -52.png|thumb|right|150px|ガリア戦記 第7巻の情勢図(BC52年)。<br>黄色の領域がローマ領。桃色が同盟部族領。]]
{| id="toc" style="align:left;clear:all;" align="left" cellpadding="5"
! style="background:#ccccff; text-align:left;" colspan="2" | ガリア戦記 第7巻 目次
|-
| style="text-align:right; font-size: 0.86em;"|
'''[[#カルヌーテース族の蜂起|カルヌーテース族の蜂起]]''':<br />
'''[[#ウェルキンゲトリークスとガッリア同盟軍の蜂起|ウェルキンゲトリークスとガッリア同盟軍の蜂起]]''':<br />
<br />
'''[[#アウァーリクム攻略戦|アウァーリクム攻略戦]]''':<br />
<br />
<br />
'''[[#ゲルゴウィア攻略戦、ハエドゥイー族の離反|ゲルゴウィア攻略戦、ハエドゥイー族の離反]]''':<br />
<br />
<br />
'''[[#ラビエーヌスのルテティア遠征|ラビエーヌスのルテティア遠征]]''':<br />
'''[[#ガッリア戦乱の拡大|ガッリア戦乱の拡大]]''':<br />
'''[[#アレスィア攻囲戦|アレスィア攻囲戦]]''':<br />
<br />
<br />
'''[[#ガッリア同盟軍主力の降伏|ガッリア同盟軍主力の降伏]]''':<br />
<br />
<br />
| style="text-align:left; font-size: 0.86em;"|
[[#1節|01節]] |
[[#2節|02節]] |
[[#3節|03節]] <br />
[[#4節|04節]] |
[[#5節|05節]] |
[[#6節|06節]] |
[[#7節|07節]] |
[[#8節|08節]] |
[[#9節|09節]] |
[[#10節|10節]] <br />
[[#11節|11節]] |
[[#12節|12節]] |
[[#13節|13節]] <br />
[[#14節|14節]] |
[[#15節|15節]] |
[[#16節|16節]] |
[[#17節|17節]] |
[[#18節|18節]] |
[[#19節|19節]] |
[[#20節|20節]] <br />
[[#21節|21節]] |
[[#22節|22節]] |
[[#23節|23節]] |
[[#24節|24節]] |
[[#25節|25節]] |
[[#26節|26節]] |
[[#27節|27節]] |
[[#28節|28節]] |
[[#29節|29節]] |
[[#30節|30節]] <br />
[[#31節|31節]] <br />
[[#32節|32節]] |
[[#33節|33節]] |
[[#34節|34節]] |
[[#35節|35節]] |
[[#36節|36節]] |
[[#37節|37節]] |
[[#38節|38節]] |
[[#39節|39節]] |
[[#40節|40節]] <br />
[[#41節|41節]] |
[[#42節|42節]] |
[[#43節|43節]] |
[[#44節|44節]] |
[[#45節|45節]] |
[[#46節|46節]] |
[[#47節|47節]] |
[[#48節|48節]] |
[[#49節|49節]] |
[[#50節|50節]] <br />
[[#51節|51節]] |
[[#52節|52節]] |
[[#53節|53節]] |
[[#54節|54節]] |
[[#55節|55節]] |
[[#56節|56節]] <br />
[[#57節|57節]] |
[[#58節|58節]] |
[[#59節|59節]] |
[[#60節|60節]] |
[[#61節|61節]] |
[[#62節|62節]] <br />
[[#63節|63節]] |
[[#64節|64節]] |
[[#65節|65節]] |
[[#66節|66節]] |
[[#67節|67節]] <br />
[[#68節|68節]] |
[[#69節|69節]] |
[[#70節|70節]] <br />
[[#71節|71節]] |
[[#72節|72節]] |
[[#73節|73節]] |
[[#74節|74節]] |
[[#75節|75節]] |
[[#76節|76節]] |
[[#77節|77節]] |
[[#78節|78節]] |
[[#79節|79節]] |
[[#80節|80節]] <br />
[[#81節|81節]] |
[[#82節|82節]] |
[[#83節|83節]] |
[[#84節|84節]] |
[[#85節|85節]] |
[[#86節|86節]] |
[[#87節|87節]] |
[[#88節|88節]] <br />
[[#89節|89節]] |
[[#90節|90節]] <br />
[[#脚注|脚注]]<br />
[[#参考リンク|参考リンク]]<br />
|}
<br style="clear:both;" />
__notoc__
==カルヌーテース族の蜂起==
===1節===
*<span style="background-color:#ffd;">[[/注解/1節]] {{進捗|00%|2025-10-26}}</span>
[[画像:Maccari-Cicero.jpg|thumb|right|250px|[[w:カティリナ弾劾演説|カティリーナ弾劾演説]]をする[[w:マルクス・トゥッリウス・キケロ|キケロー]](左中央)(チェザレ・マッカリによる19世紀のフレスコ画)。[[w:プブリウス・クロディウス・プルケル|クローディウス]]はこれを越権行為であるとして、カエサルの政敵となっていたキケローを一時的に亡命へ追い込み、ついにはキケローの友人ミローの配下によって殺害された。]]
[[画像:Pompei_Magnus_Antiquarium.jpg|thumb|right|250px|[[w:グナエウス・ポンペイウス|グナエウス・ポンペイウス]]の胸像。クローディウス殺害に伴う騒乱を収拾するべく、[[w:元老院|元老院]]によりポンペイウスが単独の[[w:執政官|執政官]]に選出され、首都ローマと本土イタリアを制圧した。一方、カエサルも属州で新たに徴兵して兵力を増した。元老院派はカエサルの勢力が強大になることを恐れて、カエサル自身から将兵を取り上げて召還すべきと主張したが、ポンペイウスは不和を避けて宥和を図った。]]
:
;首都ローマの政情不安、ガッリア人領袖たちの謀計
*<!--❶--><sup>(1)</sup> [[wikt:en:quietus#Latin|Quieta]] [[wikt:en:Gallia#Latin|Gallia]],
**[[w:ガリア|ガッリア]]が鎮定されると、
*Caesar, ut [[wikt:en:constituerat|constituerat]],
**カエサルは、定めていたように、
*in [[wikt:en:Italia#Latin|Italiam]] ad [[wikt:en:conventus#Noun|conventus]] [[wikt:en:agendus#Latin|agendos]] [[wikt:en:proficiscitur|proficiscitur]].
**イタリアに、巡回裁判を行なうために出発する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ここでいうイタリアとは、カエサルの属州であった<br> [[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]を指す。<br> カエサルは、巡回裁判を除けば、おもに[[w:ラヴェンナ|ラウェンナ]]に<br> 滞在していたと考えられる。[[内乱記_第1巻#5節|『内乱記』第1巻5節]]を参照。)</span>
:
*[[wikt:en:ibi#Latin|Ibi]] [[wikt:en:cognoscit|cognoscit]] de <P.> [[wikt:en:Clodius#Latin|Clodii]] [[wikt:en:caedes#Latin|caede]],
**そこで[[w:プブリウス・クロディウス・プルケル|プーブリウス・クローディウス]]の殺害について知って、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:クローディウスは護民官を務めた<ruby><rb>[[w:ポプラレス|民衆派]]</rb><rp>(</rp><rt>ポプラレス</rt><rp>)</rp></ruby> の政治家で、<br> カエサルから恩義を受けていた。<br> かの弁論家[[w:マルクス・トゥッリウス・キケロ|キケロー]]やその友人ティトゥス・ミロー [[w:la:Titus_Annius_Milo|Milo]] ら<br> <ruby><rb>[[w:オプティマテス|元老院派]]</rb><rp>(</rp><rt>オプティマテス</rt><rp>)</rp></ruby> と激しく対立し、ミローの配下によって殺害された。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:<P.> ([[wikt:en:Publius#Latin|Publii]]) 「プーブリウスの」は ρ系写本にのみ記されている。)</span>
*<de> <u>senatus</u>que <u>consulto</u> [[wikt:en:certior#Latin|certior]] [[wikt:en:factus#Participle|factus]], ut omnes [[wikt:en:iunior#Latin|iuniores]] Italiae [[wikt:en:coniurarent|coniurarent]],
**イタリアの全青年に<small>(新兵として)</small>宣誓するようにとの元老院決議について知らされて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:この事態を収拾すべく元老院派の[[w:グナエウス・ポンペイウス|ポンペイウス]]が単独の執政官<br> (''[[w:de:Consul sine collega|consul sine collega]]'')に選任されて本土イタリアを掌握した。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:<de> は現存する写本にはなく、近世以降に挿入提案されたもの。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注: [[wikt:en:senatus_consultum#Latin|senātūs cōnsultum]] ([[wikt:en:ultimus#Latin|ultimum]]) 「[[w:セナトゥス・コンスルトゥム・ウルティムム|元老院(の最終)決議]]」<br> ; dē [[wikt:en:senatus_consulto#Latin|senātūs cōnsultō]] 「元老院決議について」)</span>
*<u>dilectum</u> [[wikt:en:totus#Latin|tota]] [[wikt:en:provincia#Latin|provincia]] habere [[wikt:en:instituo#Latin|instituit]].
**<small>(カエサルは)</small>属州<small>〔ガッリア・キサルピーナ〕</small>全体での徴集をすることを決定する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:dilectus#Noun|dilectum]] は、[[wikt:en:delectus#Noun_2|delectum]] と表記している校訂版もある。)</span>
:
*<!--❷--><sup>(2)</sup> Eae res in Galliam [[wikt:en:transalpinus#Latin|Transalpinam]] celeriter [[wikt:en:perferuntur|perferuntur]].
**その状況は、[[w:ガリア・ナルボネンシス|ガッリア・トラーンサルピーナ]]<small>〔アルプスの向こう側のガッリア〕</small>に速やかに報知された。
:
*[[wikt:en:addunt|Addunt]] ipsi et [[wikt:en:adfingunt|adfingunt]] [[wikt:en:rumor#Latin|rumoribus]] [[wikt:en:Galli#Latin|Galli]],
**[[w:ガリア人|ガッリア人]]たち自身が風評に想像して付け加えたのは、
*quod res [[wikt:en:poscere|poscere]] [[wikt:en:videbatur|videbatur]]:
**事態が要求すると思われていたことで、
*[[wikt:en:retineri|retineri]] <u>urbano</u> [[wikt:en:motus#Noun_2|motu]] Caesarem
**カエサルは、都<small>〔[[w:ローマ|ローマ市]]〕</small>の騒乱に束縛されて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:urbanus#Adjective|urbānus]] は「都市の」「都会の」と訳されるが、<br> とりわけ「首都[[w:ローマ|ローマ市]]の」を意味する。)</span>
*neque in [[wikt:en:tantus#Latin|tantis]] [[wikt:en:dissensio#Latin|dissensionibus]] ad [[wikt:en:exercitus#Noun|exercitum]] venire posse.
**これほどの対立においては、軍隊のもとへ来ることができない、<br>ということである。
:
*<!--❸--><sup>(3)</sup> Hac [[wikt:en:impulsus#Participle|impulsi]] [[wikt:en:occasio#Latin|occasione]],
**このような好機に刺激されて、
*qui iam ante se [[wikt:en:populus#Noun|populi]] Romani [[wikt:en:imperium#Latin|imperio]] [[wikt:en:subiectus#Latin|subiectos]] [[wikt:en:dolerent|dolerent]],
**すでに以前から自分たちがローマ国民の支配に服属させられているのを悲嘆している者たちは、
*[[wikt:en:libere#Adverb_2|liberius]] atque [[wikt:en:audacter#Latin|audacius]] de bello [[wikt:en:consilium#Latin|consilia]] [[wikt:en:inire|inire]] [[wikt:en:incipiunt|incipiunt]].
**より自由に、かつ、より向こう見ずに、戦争について謀議に取りかかり始める。
:
[[画像:Brennus_mg_9724.jpg|thumb|right|250px|[[w:ブレンヌス|ブレンヌス]]の胸像。BC4世紀([[w:紀元前387年|387年]])に、ローマ軍を破って、ローマ市を占領した。アッコーと同じセノネース族の族長だったとされている。]]
*<!--❹--><sup>(4)</sup> [[wikt:en:indictus#Latin|Indictis]] inter se principes Galliae [[wikt:en:concilium#Latin|conciliis]] [[wikt:en:silvestris#Latin|silvestribus]] ac [[wikt:en:remotus#Latin|remotis]] locis
**ガッリアの領袖たちは、森林や人里離れた場所での会合を互いに申し合わせて、
*[[wikt:en:queruntur|queruntur]] de [[wikt:en:Acco#Latin|Acconis]] [[wikt:en:mors#Latin|morte]];
**アッコーの死について嘆く。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[ガリア戦記 第6巻#44節|第6巻44節]]を参照。)</span>
*<u>posse</u> hunc [[wikt:en:casus#Latin|casum]] ad ipsos [[wikt:en:recidere#Verb_4|recidere]] [[wikt:en:demonstrant#Latin|demonstrant]];
**彼<small>〔アッコー〕</small>の結末が彼ら自身へ降りかかりうることを説く。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:posse#Verb|posse]] の位置は、<br> α系写本では hunc の前だが、<br> β系写本では hunc casum ad ipsos recidere <u>posse</u> demonstrant <br> となっている。)</span>
:
*<!--❺--><sup>(5)</sup> [[wikt:en:miserantur|miserantur]] [[wikt:en:communis#Latin|communem]] Galliae [[wikt:en:fortuna#Latin|fortunam]];
**ガッリア共通の境遇をあわれむ。
*omnibus [[wikt:en:pollicitatio#Latin|pollicitationibus]] ac [[wikt:en:praemium#Latin|praemiis]] [[wikt:en:deposcunt|deposcunt]]
**<small>(以下の者たちを)</small>あらゆる約束と恩賞によって求める。
*qui [[wikt:en:bellum#Latin|belli]] <u>initia</u> [[wikt:en:faciant|faciant]] et sui [[wikt:en:caput#Latin|capitis]] [[wikt:en:periculum#Latin|periculo]] Galliam in [[wikt:en:libertas#Latin|libertatem]] [[wikt:en:vindicent|vindicent]].
**戦端を開いて、自らを危険にさらしても、ガッリアを解放する者たちを。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:~ in libertatem vindicare;~を解放する)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:initia#Latin|initia]] (複数形) だが、<br> β系写本では [[wikt:en:initium#Latin|initium]] (単数形) となっている。)</span>
:
*<!--❻--><sup>(6)</sup> In primis [[wikt:en:ratio#Latin|rationem]] esse [[wikt:en:habendus#Latin|habendam]] [[wikt:en:dicunt|dicunt]],
**とりわけ、<small>(以下のような)</small>方策を採るべきであると述べる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:in_primis#Latin|in primis]] は、[[wikt:en:inprimis#Adverb|
inprimis]] と表記している校訂版もある。)</span>
*[[wikt:en:priusquam#Latin|prius quam]] eorum [[wikt:en:clandestinus#Latin|clandestina]] consilia [[wikt:en:efferantur|efferantur]],
**彼らの秘密の計画が漏らされるより前に、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:反ローマの挙兵のはかりごとが漏れる前に)</span>
*ut Caesar ab [[wikt:en:exercitus#Noun|exercitu]] [[wikt:en:intercludatur|intercludatur]].
**カエサルが軍隊から切り離されるように、と。
:
*<!--❼--><sup>(7)</sup> Id esse [[wikt:en:facilis#Latin|facile]],
**それは容易なことである。
*quod neque legiones [[wikt:en:audeant|audeant]] [[wikt:en:absens#Latin|absente]] [[wikt:en:imperator#Latin|imperatore]] ex [[wikt:en:hiberna#Noun|hibernis]] [[wikt:en:egredi|egredi]],
**というのは、[[w:ローマ軍団|諸軍団]]は将軍<small>〔カエサル〕</small>が不在のときにあえて冬営から出て行こうとはしないし、
*neque [[wikt:en:imperator#Latin|imperator]] sine [[wikt:en:praesidium#Latin|praesidio]] ad legiones [[wikt:en:pervenire#Latin|pervenire]] [[wikt:en:possit|possit]].
**将軍は護衛なしに諸軍団のところへ到着することはできないのだから。
: <!-- [[wikt:en:| -->
*<!--❽--><sup>(8)</sup> [[wikt:en:postremo#Adverb|Postremo]] in [[wikt:en:acies#Latin|acie]] <u>praestare</u> [[wikt:en:interfici|interfici]],
**結局のところ、戦列において討ち死にする方がましである。
**:<span style="color:#009900;">(訳注:[[wikt:en:praestare|praestare]] ~ [[wikt:en:quam#Adverb|quam]] …「…よりも~がより優る」)</span>
*<u>quam</u> non [[wikt:en:vetus#Latin|veterem]] belli [[wikt:en:gloria#Latin|gloriam]] [[wikt:en:libertas#Latin|libertatem]]<nowiki>que</nowiki> quam a [[wikt:en:maior#Noun|maioribus]] [[wikt:en:acceperint|acceperint]], [[wikt:en:recuperare#Latin|recuperare]].
**先祖から受け継いだかつての戦争の栄誉および自由を取り戻さないことよりは。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===2節===
[[画像:Chartres_1.jpg|thumb|right|320px|カルヌーテース族([[w:la:Carnutes|Carnutes]])の名を残す現在の[[w:シャルトル|シャルトル]]([[w:en:Chartres|Chartres]])の象徴である[[w:シャルトル大聖堂|シャルトル大聖堂]]([[w:世界遺産|世界遺産]])。[[ガリア戦記 第6巻#13節|第6巻13節]]⑩項で既述のように、カルヌーテース族の土地はガッリアの中心・聖地と見なされていた。ガッリアがキリスト教化されると、[[w:司教|司教座]]が置かれて、宗教的中心地となった。]]
*<span style="background-color:#ffd;">[[/注解/2節]] {{進捗|00%|2025-11-05}}</span>
;ガッリア諸部族の会合で、カルヌーテース族が開戦動議
:
*<!--❶--><sup>(1)</sup> His rebus [[wikt:en:agitatus#Latin|agitatis]],
**これらの事柄が論議されて、
*[[wikt:en:profiteor#Latin|profitentur]] [[wikt:en:Carnutes#Latin|Carnutes]],
**カルヌーテース族の者が公言したことには、
*se [[wikt:en:nullus#Determiner|nullum]] [[wikt:en:periculum#Latin|periculum]] [[wikt:en:communis#Latin|communis]] [[wikt:en:salus#Latin|salutis]] causa [[wikt:en:recusare#Latin|recusare]],
**<small>(ガッリア)</small>共通の安全のためにはいかなる危険をも辞さない、
*[[wikt:en:princeps#Latin|principes]]<nowiki>que</nowiki> ex omnibus bellum [[wikt:en:facturus#Latin|facturos]] [[wikt:en:pollicentur|pollicentur]];
**かつ<small>(ガッリア方)</small>総勢の先鋒として戦争を遂行するであろうと約束する。
:
*<!--❷--><sup>(2)</sup> et, [[wikt:en:quoniam#Latin|quoniam]] in [[wikt:en:praesentia#Noun|praesentia]] [[wikt:en:obses#Latin|obsidibus]] [[wikt:en:cavere#Verb_2|cavere]] inter se non [[wikt:en:possint|possint]],
**目下のところ、人質により互いに保証し合うことはできなかったので、
*ne res [[wikt:en:efferatur|efferatur]],
**事が漏らされないように、
*<u>ut</u> [[wikt:en:ius_iurandum#Latin|iure iurando]] ac [[wikt:en:fides#Latin|fide]] [[wikt:en:sanciatur|sanciatur]], [[wikt:en:petunt|petunt]],
**誓約と信義でもって批准するように求める。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、写本ST<sup>c</sup> では ut だが、<br> 写本 T<sup>1</sup>・ρ系では at 、<br> 写本BMLNV・χ系では aut となっている。)</span>
*[[wikt:en:conlatus#Latin|conlatis]] [[wikt:en:militaris#Adjective|militaribus]] [[wikt:en:signum#Latin|signis]],
**軍旗が運び集められて、
*[[wikt:en:quo#Etymology_2_2|quo]] [[wikt:en:mos#Latin|more]] eorum [[wikt:en:gravissimus#Latin|gravissima]] [[wikt:en:caerimonia#Latin|caerimonia]] [[wikt:en:continetur|continetur]],
**それは彼らの慣習で最も荘重な<ruby><rb>神聖儀式</rb><rp>(</rp><rt>カエリモーニア</rt><rp>)</rp></ruby>として保たれているのだが、
*ne [[wikt:en:factus#Latin|facto]] [[wikt:en:initium#Latin|initio]] belli ab reliquis [[wikt:en:deserantur|deserantur]].
**開戦したら、ほかの<small>(部族の)</small>者たちから見放されないように、ということである。
: <!-- [[wikt:en:| -->
*<!--❸--><sup>(3)</sup> Tum [[wikt:en:conlaudatus#Latin|conlaudatis]] [[wikt:en:Carnutes#Latin|Carnutibus]],
**それから、カルヌーテース族が賞賛されて、
*[[wikt:en:datus#Participle|dato]] [[wikt:en:ius_iurandum#Latin|iure iurando]] ab omnibus, qui [[wikt:en:aderant|aderant]],
**訪れていたすべての者たちによって誓約が交わされて、
*[[wikt:en:tempus#Latin|tempore]] eius rei [[wikt:en:constitutus#Participle|constituto]]
**その事の時期を決定すると、
*ab [[wikt:en:concilium#Latin|concilio]] [[wikt:en:disceditur|disceditur]].
**<small>(ガッリアの領袖たちは)</small>会合から立ち去る。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===3節===
[[画像:Cathédrale_Sainte-Croix_d'Orléans_2008_PD_16.JPG|thumb|right|280px|ケナブム(Cenabum)すなわち現在の[[w:オルレアン|オルレアン]]の聖十字架大聖堂。ここもカルヌーテース族の[[w:オッピドゥム|城塞都市]]で、ガッリアの[[w:ドルイド|ドルイド]]たちが集まる聖地だったという。ローマの[[w:ルキウス・ドミティウス・アウレリアヌス|アウレリアヌス帝]](Aurelianus)によって再建されたのでアウレリアヌスの都市(アウレリアヌム [[w:la:Aurelianum|Aurelianum]])と改称され、オルレアン(Orléans)と転訛した。キリスト教化によってここにも[[w:司教|司教座]]が置かれて、布教の中心地になった。]]
*<span style="background-color:#ffd;">[[/注解/3節]] {{進捗|00%|2025-11-17}}</span>
;カルヌーテース族がケナブム進駐
:
*<!--❶--><sup>(1)</sup> [[wikt:en:ubi#Latin|Ubi]] ea dies venit,
**その日が来ると、
*[[wikt:en:Carnutes#Latin|Carnutes]],
**カルヌーテース族は、
*Cotuato et Conconnetodumno [[wikt:en:dux#Latin|ducibus]], [[wikt:en:desperatus#Latin|desperatis]] hominibus,
**捨て身覚悟の連中であるコトゥアトゥスとコンコンネトドゥムヌスを指導者として、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ガリア語では、<br> コトゥアトス ''[[w:fr:Cotuatos|Cotuatos]]''、<br> コンコンネトドゥムノス ''[[w:fr:Conconnetodumnos|Conconnetodumnos]]''。)</span>
*<u>Cenabum</u> [[wikt:en:signum#Latin|signo]] [[wikt:en:datus#Participle|dato]] [[wikt:en:concurrunt|concurrunt]]
**号令が発せられるとともに<u>ケナブム</u>に襲来する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ケナブムは、現在の[[w:オルレアン|オルレアン]]。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:fr:Cenabum|Cenabum]] はケルト語風の読みで、''[[ガリア戦記/注解編/写本と校訂版#Vossius|Vossius]]'' による修正提案。<br> 写本では genabim, genebim, genebin などとなっている。<br> ⇒ [[wikt:en:Genabum#Latin|Genabum]])</span>
*[[wikt:en:civis#Latin|cives]]<nowiki>que</nowiki> [[wikt:en:Romanus#Adjective|Romanos]], qui [[wikt:en:negotiandi|negotiandi]] causa [[wikt:en:ibi#Latin|ibi]] [[wikt:en:constiterant|constiterant]],
**そこには、商いを営むためにローマ市民たちが滞在していて、
*in his [[wikt:en:Gaius#Latin|Gaium]] [[wikt:en:Fufius#Latin|Fufium]] Citam, [[wikt:en:honestus#Latin|honestum]] [[wikt:en:eques#Latin|equitem]] [[wikt:en:Romanus#Adjective|Romanum]],
**彼らの中には、気高いローマ人[[w:エクィテス|騎士]]ガーイウス・フーフィウス・キタがいて
*qui rei [[wikt:en:frumentarius#Latin|frumentariae]] [[wikt:en:iussus#Noun|iussu]] Caesaris [[wikt:en:praeerat|praeerat]],
**カエサルの指図により糧秣調達を統率していたが、
*[[wikt:en:interficiunt|interficiunt]] [[wikt:en:bonum#Noun_2|bona]]<nowiki>que</nowiki> eorum [[wikt:en:diripiunt|diripiunt]].
**<small>(カルヌーテース勢は彼らローマ市民たちを)</small>殺害して、彼らの財産を略奪する。
:
*<!--❷--><sup>(2)</sup> Celeriter ad omnes Galliae [[wikt:en:civitas#Latin|civitates]] [[wikt:en:fama#Latin|fama]] [[wikt:en:perfertur|perfertur]].
**速やかに全ガッリア部族のもとへ、評判が報知される。
*Nam, <u>ubique</u> [[wikt:en:maior#Latin|maior]] atque [[wikt:en:inlustrior|inlustrior]] [[wikt:en:incidit#Etymology_1|incidit]] res,
**なぜなら、より重大でより目立った事態が起こればどこであろうが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、主要写本ω の大半では [[wikt:en:ubique#Latin|ubique]] だが、写本STでは [[wikt:en:ubi#Latin|ubi]] 、<br> さらに [[wikt:en:ubicumque#Latin|ubicumque]] という異読もあり、<br> ''[[ガリア戦記/注解編/写本と校訂版#Schneider,K.E.Chr.|Chr. Schneider]]'' は ubi quae と修正提案している。)</span>
*[[wikt:en:clamor#Latin|clamore]] per [[wikt:en:ager#Latin|agros]] [[wikt:en:regio#Latin|regiones]]<nowiki>que</nowiki> [[wikt:en:significant#Latin|significant]];
**耕地や<small>(集落の)</small>区域を介して、大声で呼びかける。
*<u>hinc</u> [[wikt:en:alius#Latin|alii]] [[wikt:en:deinceps#Latin|deinceps]] [[wikt:en:excipiunt|excipiunt]]
**ここから、別の者たちが続けて引き受けて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本の大半では [[wikt:en:hanc#Latin|hanc]] だが、<br> β系写本では [[wikt:en:hinc#Latin|hinc]] 「ここから」、<br> 写本Sでは [[wikt:en:hunc|hunc]] となっている。)</span>
*et [[wikt:en:proximus#Noun|proximis]] [[wikt:en:tradunt|tradunt]];
**近隣の者たちへ伝える。
*ut tum [[wikt:en:accidit#Etymology_1|accidit]].
**そのときにも<small>(同様のことが)</small>起こったのである。
: <!-- [[wikt:en:| -->
*<!--❸--><sup>(3)</sup> Nam, quae <u>Cenabi</u> [[wikt:en:oriens#Latin|oriente]] [[wikt:en:sol#Latin|sole]] gesta essent,
**ケナブムで日が昇るときになされていたこと<small>〔襲撃〕</small>が、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:Cenabi はケルト語風の読みで、''[[ガリア戦記/注解編/写本と校訂版#Vossius|Vossius]]'' による修正提案。<br> 主要写本ω では genabi となっている。 ⇒ [[wikt:en:Genabum#Latin|Genabum]])</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:gestus#Latin|gesta]] [[wikt:en:essent#Etymology_1|essent]] は [[wikt:en:gero#Latin|gerō]] の3人称・複数・過去完了・受動・接続法。)</span>
*ante [[wikt:en:primus#Latin|primam]] [[wikt:en:confectus#Latin|confectam]] [[wikt:en:vigilia#Latin|vigiliam]]
**第一夜警時の終わる前頃には
**:<span style="color:#009900;">(訳注:第一夜警時は、日の入から真夜中までの時間帯の前半「宵の口」。<br> [[古代ローマの不定時法#夜警時|#夜警時]] を参照。)</span>
*in finibus [[wikt:en:Arverni#Latin|Arvernorum]] audita sunt,
**アルウェルニー族の領土において聞かれた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:auditus#Latin|audita]] [[wikt:en:sunt#Latin|sunt]] は [[wikt:en:audio#Latin|audiō]] の3人称・複数・完了・受動・直説法)</span>
*[[wikt:en:qui#Latin|quod]] [[wikt:en:spatium#Latin|spatium]] est [[wikt:en:mille#Latin|milium]] [[wikt:en:passus#Etymology_2|passuum]] circiter [[wikt:en:centum#Latin|centum]] [[wikt:en:sexaginta#Latin|sexaginta]](CLX).
**約160ローママイルもの隔たりがあったのに。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ミーッレ・パッスーム、ミーリア(ローママイル)|ローママイル]]は約1.48 kmで、160マイルは約240 km)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
==ウェルキンゲトリークスとガッリア同盟軍の蜂起==
===4節===
[[画像:Vercingetorix stater CdM.jpg|thumb|right|200px|“<span style="font-family:Times New Roman;font-size:15pt;">(VERCIN)GETORIXS</span>”の名と横顔が刻まれた金貨。]]
[[画像:Vercingétorix_par_Millet.jpg|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の立像(フランスのアリーズ=サント=レーヌ <small>[[w:fr:Alise-Sainte-Reine|Alise-Sainte-Reine]]</small>)。<br>近代[[w:ナショナリズム|ナショナリズム]]の高揚とともに[[w:フランス|フランス]]国民が自らを古代[[w:ガリア人|ガッリア人]]の末裔と見なすようになると([[w:ガリア起源説|ガッリア起源説]])、ガッリア諸部族を率いて[[w:古代ローマ|古代ローマ]]と戦った彼は「'''フランス最初の英雄'''」として祀り上げられた。[[w:フランス第二帝政|第二帝政]]期に皇帝[[w:ナポレオン3世|ナポレオン3世]]の命により[[w:アレシアの戦い|アレスィア古戦場]]の発掘調査が実施され、[[w:1865年|1865年]]にはその地に彫刻家エメ・ミレ([[w:fr:Aimé Millet|Aimé Millet]])による高さ7メートルの銅像が建立された。<br>([[w:fr:Vercingétorix_(statue_d'Aimé_Millet)|fr:La statue de Vercingétorix]])]]
[[画像:Statue-vercingetorix-jaude-clermont.jpg|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の騎馬像([[w:fr:Statue équestre de Vercingétorix (Frédéric Auguste Bartholdi)|fr]])。彼の出身地ゲルゴウィアの近く、[[w:クレルモン=フェラン|クレルモン=フェラン市]]中央広場に建つ。[[w:1903年|1903年]]に、[[w:自由の女神像 (ニューヨーク)|自由の女神像]]の作者として著名な彫刻家[[w:フレデリク・バルトルディ|フレデリク・オーギュスト・バルトルディ]]によって建立された。[[w:フランス語|フランス語]]で「我は皆の自由のために武器を取った」« J’ai pris les armes pour la liberté de tous » と刻まれている。]]
*<span style="background-color:#ffd;">[[/注解/4節]] {{進捗|00%|2025-11-24}}</span>
;アルウェルニー族のウェルキンゲトリークスが挙兵、ガッリア諸部族同盟軍を指揮する
:
*<!--❶--><sup>(1)</sup> [[wikt:en:similis#Latin|Simili]] [[wikt:en:ratio#Latin|ratione]] ibi
**そこ<small>〔アルウェルニー族領〕</small>でも同様のやり方によって、
*[[wikt:en:Vercingetorix#Latin|Vercingetorix]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]という、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ガリア語 [[wikt:en:Reconstruction:Gaulish/Werkingetorix|*Werkingetorīx]] は「戦士たちの最高の王」という意味で、<br> ガッリア同盟軍の最高司令官にふさわしい呼び名である。<br> 《[[ガリア戦記/ガリア語の名前#Vercingetorix|'''ガリア語の名前'''#Vercingetorix]]》 を参照せよ。)</span>
*[[wikt:fr:Celtillus|Celtilli]] filius, [[wikt:en:Arvernus#Latin|Arvernus]],
**ケルティッルスの息子で[[w:アルウェルニ族|アルウェルニー族]]の者で、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''[[w:en:Celtillus|Celtillus]]'' はガリア語で「小さなケルト人」という意味だと解される。)</span>
*[[wikt:en:summus#Adjective|summae]] [[wikt:en:potentia#Latin|potentiae]] [[wikt:en:adulescens#Noun|adulescens]],
**最高の影響力のある青年が、
*cuius [[wikt:en:pater#Latin|pater]] [[wikt:en:principatus#Latin|principatum]] Galliae [[wikt:en:totus#Etymology_1|totius]] [[wikt:en:obtinuerat|obtinuerat]]
**──その父<small>〔ケルティッルス〕</small>はガッリア全体の主導権を占めていたが、
*et ob eam causam, quod [[wikt:en:regnum#Latin|regnum]] [[wikt:en:adpetebat|adpetebat]], ab [[wikt:en:civitas#Latin|civitate]] erat [[wikt:en:interfectus#Latin|interfectus]],
**王位を求めたという理由により、部族の者によって誅殺されていたのであるが、──
*[[wikt:en:convocatus#Latin|convocatis]] suis [[wikt:en:cliens#Latin|clientibus]]
**自らの庇護者たちを招集して、
*facile [[wikt:en:incendit|incendit]].
**容易に焚き付けた。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:cognitus#Participle|Cognito]] eius [[wikt:en:consilium#Latin|consilio]]
**彼の計画を知ると、
*ad [[wikt:en:arma#Latin|arma]] [[wikt:en:concurritur|concurritur]].
**<small>(人々は)</small>武器のもとへ群がり集まった。
*[[wikt:en:prohibetur|Prohibetur]] ab [[wikt:fr:Gobannitio|Gobannitione]], [[wikt:en:patruus#Latin|patruo]] suo, [[wikt:en:reliquus#Latin|reliquis]]<nowiki>que</nowiki> [[wikt:en:princeps#Noun_3|principibus]],
**彼の<small>(父方の)</small>おじゴバンニティオやほかの領袖たちにより妨げられた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''[[w:fr:Gobannitio|Gobannitio]]'' は「鍛冶屋」か「鍛冶の神」に由来する名前と解される。)</span>
*qui hanc [[wikt:en:temptandus#Latin|temptandam]] [[wikt:en:fortuna#Latin|fortunam]] non [[wikt:en:existimabant|existimabant]];
**その者たちは、このような運命を試すべきとは考えていなかったのだ。
*[[wikt:en:expellitur|expellitur]] ex [[wikt:en:oppidum#Latin|oppido]] [[wikt:en:Gergovia#Latin|Gergovia]];
**<small>(ウェルキンゲトリークスは)</small>城塞都市ゲルゴウィアから追放される。
:
*<!--❸--><sup>(3)</sup> non [[wikt:en:destitit|destitit]] tamen
**しかしながら<small>(彼は計画を)</small>取り止めず、
*atque in agris habet [[wikt:en:dilectus#Noun|dilectum]] [[wikt:en:egens#Latin|egentium]] ac [[wikt:en:perditor#Noun|perditorum]].
**野に貧窮者たちやならず者たちを徴集する。
:
*Hac [[wikt:en:coactus#Latin|coacta]] [[wikt:en:manus#Latin|manu]],
**こうした手勢が集められ、
*[[wikt:en:quoscumque|quoscumque]] [[wikt:en:adit#Latin|adit]] ex civitate,
**部族のうちで<small>(彼が)</small>会った者は誰であれ、
*ad suam [[wikt:en:sententia#Latin|sententiam]] [[wikt:en:perducit|perducit]];
**自らの意図に引き込んだ。
:
*<!--❹--><sup>(4)</sup> [[wikt:en:hortatur|hortatur]] ut [[wikt:en:communis#Latin|communis]] [[wikt:en:libertas#Latin|libertatis]] causa [[wikt:en:arma#Latin|arma]] [[wikt:en:capiant|capiant]],
**<small>(ガッリア)</small>共通の自由のために武器を取るように鼓舞した。
*[[wikt:en:magnus#Latin|magnis]]<nowiki>que</nowiki> [[wikt:en:coactus#Latin|coactis]] [[wikt:en:copia#Latin|copiis]]
**大軍勢が集められて、
*[[wikt:en:adversarius#Latin|adversarios]] suos, a quibus paulo ante erat [[wikt:en:eiectus#Latin|eiectus]],
**少し前に<small>(彼をゲルゴウィアから)</small>放逐したところの敵対者たちを、
*[[wikt:en:expellit|expellit]] ex civitate.
**部族から追放する。
*[[wikt:en:rex#Latin|Rex]] ab suis [[wikt:en:appellatur|appellatur]].
**<small>(ウェルキンゲトリークスは)</small>配下の者たちから王と呼ばれている。
:
*<!--❺--><sup>(5)</sup> [[wikt:en:dimittit|Dimittit]] [[wikt:en:quoque#Latin|quoque]] [[wikt:en:versus#Adverb|versus]] [[wikt:en:legatio#Latin|legationes]];
**<small>(ウェルキンゲトリークスは)</small>あらゆる方向へ使節団を派遣して、
*[[wikt:en:obtestatur|obtestatur]] ut in [[wikt:en:fides#Latin|fide]] [[wikt:en:maneant|maneant]].
**誓約に留まるようにと、懇願する。
:
*<!--❻--><sup>(6)</sup> Celeriter sibi
**速やかに、自分たち<small>〔アルウェルニー族〕</small>に対して
*[[wikt:en:Senones#Latin|Senones]], [[wikt:en:Parisii#Latin|Parisios]], [[wikt:en:Pictones#Latin|Pictones]], [[wikt:en:Cadurci#Latin|Cadurcos]], <u>Turonos</u>, [[wikt:en:Aulerci#Latin|Aulercos]], [[wikt:en:Lemovices#Latin|Lemovices]], <u>Andes</u>
**セノネース族、パリースィイー族、ピクトネース族、カドゥルキー族、<br><u>トゥロニイー族</u>、アウレルキー族、レモウィーケース族、アンデース族、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部のトゥロニイー族 ''[[w:Turoni|Turoni]]'' は、トゥロネース族 ''[[wikt:en:Turones#Latin|Turonēs]]'' ともいう。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:二つ目の下線部は、α系写本では [[wikt:en:Andi#Latin|Andos]]「アンディー族」だが、<br> ''[[ガリア戦記/注解編/写本と校訂版#Glareanus|Glareanus]]'' は、[[wikt:en:Andes#Latin|Andēs]]「アンデース族」と修正提案し、<br> これは別名「アンデカーウィー族」''[[wikt:en:Andecavi#Latin|Andecāvī]]'' ともいう。)</span>
*reliquosque omnes, qui [[wikt:en:Oceanus#Latin|Oceanum]] [[wikt:en:adtingunt|adtingunt]], [[wikt:en:adiungit|adiungit]];
**および<ruby><rb>大洋<span style="color:#009900;">〔[[w:大西洋|大西洋]]〕</span></rb><rp>(</rp><rt>オーケアヌス</rt><rp>)</rp></ruby>に接するほかの全部族を、加盟させる。
*omnium [[wikt:en:consensus#Latin|consensu]]
**すべての者たちの同意により、
*ad eum [[wikt:en:defertur|defertur]] [[wikt:en:imperium#Latin|imperium]].
**彼<small>〔ウェルキンゲトリークス〕</small>に<small>(諸部族の)</small>軍勢指揮権が譲り渡される。
:
*<!--❼--><sup>(7)</sup> Qua [[wikt:en:oblatus#Latin|oblata]] [[wikt:en:potestas#Latin|potestate]]
**<small>(ウェルキンゲトリークスは)</small>その権限が任されると、
*omnibus his civitatibus [[wikt:en:obses#Latin|obsides]] [[wikt:en:imperat|imperat]],
**これらすべての部族に人質<small>(の供出)</small>を命令して、
*[[wikt:en:certus#Latin|certum]] numerum [[wikt:en:miles#Latin|militum]] ad se celeriter [[wikt:en:adduci#Latin|adduci]] [[wikt:en:iubet#Latin|iubet]],
**兵の一定の数が自分のもとへ速やかに動員されることを命じる。
:
*<!--❽--><sup>(8)</sup> [[wikt:en:arma#Latin|armorum]] [[wikt:en:quantum#Latin|quantum]] [[wikt:en:quisque#Latin|quaeque]] civitas [[wikt:en:domi#Latin|domi]] [[wikt:en:quisque#Latin|quodque]] ante tempus [[wikt:en:efficiat|efficiat]], [[wikt:en:constituit#Latin|constituit]];
**おのおのの部族が本国で、武器のどれほどをその時期の前に生産するかを、決定した。
*in primis [[wikt:en:equitatus#Latin|equitatui]] [[wikt:en:studet|studet]].
**とりわけ、[[w:騎兵|騎兵隊]]を熱心に求めた。
: <!-- [[wikt:en:| -->
*<!--❾--><sup>(9)</sup> Summae diligentiae summam [[wikt:en:imperium#Latin|imperii]] [[wikt:en:severitas#Latin|severitatem]] addit;
**<small></small>(ウェルキンゲトリークスは)最高の入念さに、命令の最高の厳格さを付け加える。
*magnitudine [[wikt:en:supplicium#Latin|supplicii]] [[wikt:en:dubitans#Latin|dubitantes]] cogit.
**重大な刑罰をふんぎりが付かぬ者たちへ強いる。
: <!-- [[wikt:en:| -->
*<!--❿--><sup>(10)</sup> Nam maiore commisso delicto <u>igni</u> atque omnibus tormentis necat,
**すなわち、より重大な違反を犯したら、火とあらゆる拷問によって誅殺した。
*leviore de causa auribus desectis aut singulis effossis oculis domum remittit,
**より軽微な場合については、両耳を切り取り、あるいは眼を一つずつ繰り抜いて、郷里へ送還する。
*ut sint reliquis documento et magnitudine poenae perterreant alios.
**ほかの者たちへの警告となり、懲罰の重大さが別の者たちを畏怖させるようにである。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===5節===
*<span style="background-color:#ffd;">[[/注解/5節]] {{進捗|00%|2025-12-14}}</span>
;ビトゥリゲース族が、ガッリア同盟軍に寝返る
:
*<!--❶--><sup>(1)</sup> His [[wikt:en:supplicium#Latin|suppliciis]] celeriter [[wikt:en:coactus#Latin|coacto]] [[wikt:en:exercitus#Noun|exercitu]],
**<small>(ウェルキンゲトリークスは)</small>これらの刑罰により速やかに軍隊を徴集して、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:「軍隊」と訳される [[wikt:en:exercitus#Noun|exercitus]] には「鍛えられて規律がある」という意味合いがあり、<br> これまでカエサルがガッリア人の軍勢をこのように表現したことはまれであった。)</span>
*[[wikt:en:Lucterius#Latin|Lucterium]] [[wikt:en:Cadurcus#Latin|Cadurcum]], [[wikt:en:summus#Latin|summae]] hominem [[wikt:en:audacia#Latin|audaciae]],
**この上なく豪胆な人物であるカドゥルキー族のルクテリウスを
*cum parte [[wikt:en:copiarum#Noun_2|copiarum]] in [[wikt:en:Ruteni#Latin|Rutenos]] [[wikt:en:mittit|mittit]];
**軍勢の一部とともにルテーニー族のところに遣わす。
*ipse in [[wikt:en:Bituriges#Latin|Bituriges]] [[wikt:en:proficiscitur|proficiscitur]].
**<small>(ウェルキンゲトリークス)</small>自身はビトゥリゲース族のところに出発する。
:
; ビトゥリゲース族が、ハエドゥイー族に、対ウェルキンゲトリークスのための援兵を依頼
*<!--❷--><sup>(2)</sup> Eius [[wikt:en:adventus#Latin|adventu]]
**彼<small>〔ウェルキンゲトリークス〕</small>の到来により、
*[[wikt:en:Bituriges#Latin|Bituriges]] ad [[wikt:en:Aeduos|Haeduos]], quorum erant in [[wikt:en:fides#Latin|fide]],
**ビトゥリゲース族は、彼らが庇護下にあった[[w:ハエドゥイ族|ハエドゥイー族]]のもとへ、
*[[wikt:en:legatus#Latin|legatos]] [[wikt:en:mittunt|mittunt]] [[wikt:en:subsidium#Latin|subsidium]] [[wikt:en:rogatum#Verb|rogatum]],
**使節たちを、<small>(ハエドゥイー族からの)</small>援兵を依頼するために派遣する。
*[[wikt:en:quo#Adverb|quo]] [[wikt:en:facile#Latin|facilius]] hostium copias [[wikt:en:sustinere|sustinere]] [[wikt:en:possint|possint]].
**それにより、敵の軍勢をより容易に持ちこたえることができるようにということであった。
:
; ハエドゥイー族が、ビトゥリゲース族に対して援兵を派兵
*<!--❸--><sup>(3)</sup> [[wikt:en:Aedui#Latin|Haedui]] de [[wikt:en:consilium#Latin|consilio]] [[wikt:en:legatus#Latin|legatorum]], quos Caesar ad [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:reliquerat|reliquerat]],
**[[w:ハエドゥイ族|ハエドゥイー族]]は、カエサルが軍隊のもとへ残していた<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レーガートゥス</rt><rp>)</rp></ruby>たちの助言により、
*copias [[wikt:en:equitatus#Noun|equitatus]] [[wikt:en:peditatus#Latin|peditatus]]<nowiki>que</nowiki> [[wikt:en:subsidium#Latin|subsidio]] [[wikt:en:Bituriges#Latin|Biturigibus]] [[wikt:en:mittunt|mittunt]].
**[[w:騎兵|騎兵隊]]と[[w:歩兵|歩兵隊]]の軍勢をビトゥリゲース族に対する援兵として派遣する。
:
; ハエドゥイー族の援兵が、ビトゥリゲース族の寝返りを怖れて、途中で逃げ帰ってしまう
*<!--❹--><sup>(4)</sup> Qui cum ad flumen [[wikt:en:Liger#Latin|Ligerim]] [[wikt:en:venissent|venissent]], quod [[wikt:en:Bituriges#Latin|Bituriges]] ab [[wikt:en:Aeduis|Haeduis]] [[wikt:en:dividit#Latin|dividit]],
**その者たち<small>〔援兵〕</small>は、ビトゥリゲース族を[[w:ハエドゥイ族|ハエドゥイー族]]から分け隔てるリゲル川のたもとへやって来たときに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:リゲル川 [[w:la:Liger|Liger]] は、現在の[[w:ロワール川|ロワール川]]。<br> 本書に登場するビトゥリゲース・クビ族 ''[[w:en:Bituriges Cubi|Bituriges Cubi]]'' は、<br> ロワール川西岸の[[w:シェール県|シェール県]]の辺りに居住していた。<br> 対して、[[w:ハエドゥイ族|ハエドゥイー族]]は、<br> ロワール川東岸の[[w:ニエーヴル県|ニエーヴル県]]の辺りに居住していた。)</span>
[[画像:Map of Eduens people-fr.svg|thumb|right|250px|[[w:ハエドゥイ族|ハエドゥイー族]]を軸とするガッリアの合従連衡(<small>フランス語表記</small>)。赤い部分がハエドゥイー族(Eduens)、桃色・茶色の部分が同盟部族、灰色の部分が敵対する[[w:アルウェルニ族|アルウェルニー族]](Arvernes)とセクアニ族(Sequanes)の領域である。茶色のビトゥリゲース族(Bituriges)と赤いハエドゥイー族(Eduens)の境界に沿ってリゲル川([[w:ロワール川|ロワール川]])が流れていることが見て取れる。川の西岸はビトゥリゲース族とアルウェルニー族の勢力圏になっている。]]
*paucos dies ibi [[wikt:en:moratus#Participle|morati]]
**わずかな日々をそこでぐずぐずして、
*neque flumen [[wikt:en:transire#Latin|transire]] [[wikt:en:ausus#Participle|ausi]] [[wikt:en:domus#Latin|domum]] [[wikt:en:revertuntur|revertuntur]]
**川をあえて渡らずに、故国に引き返す。
:
*<!--❺--><sup>(5)</sup> [[wikt:en:legatus#Latin|legatis]]<nowiki>que</nowiki> nostris [[wikt:en:renuntiant|renuntiant]]
**<small>(ハエドゥイー族の援兵たちが)</small>我が方<small>〔ローマ方〕</small>の<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レーガートゥス</rt><rp>)</rp></ruby>たちに報告したことには、
*se [[wikt:en:Bituriges#Latin|Biturigum]] [[wikt:en:perfidia#Latin|perfidiam]] [[wikt:en:veritus#Latin|veritos]] [[wikt:en:revertisse|revertisse]],
**自分たち<small>〔援兵〕</small>は、ビトゥリゲース族の寝返りを恐れて引き返した。
*quibus id [[wikt:en:consilium#Latin|consilii]] fuisse [[wikt:en:cognoverint|cognoverint]],
**彼らには、以下のような謀計があったことを探知したのだ。
*ut, si flumen [[wikt:en:transissent#Latin|transissent]], una ex parte ipsi, altera [[wikt:en:Arverni#Latin|Arverni]] se [[wikt:en:circumsisterent|circumsisterent]].
**もし川を渡ったら、一方から<small>(ビトゥリゲース族)</small>自身が、他方から[[w:アルウェルニ族|アルウェルニー族]]が自分たちを包囲するというものだ、と。
:
*<!--❻--><sup>(6)</sup> Id ea<span style="background-color:#ffa;">[[wikt:la:-ne|ne]]</span> de causa, quam [[wikt:en:legatus#Latin|legatis]] <u>pronuntiarunt</u>,
**そのことは<small>(援兵たちが)</small><ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レーガートゥス</rt><rp>)</rp></ruby>たちに報告した理由によって<small>(なしたのか?)</small>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:-ne#Latin|-ne]] ~ [[wikt:en:an#Latin|an]] …;~であるか、あるいは…であるか。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:pronuntiarunt|pronuntiarunt]]<sub> (直接法・完了形)</sub> は古い印刷本 ''[[ガリア戦記/注解編/写本と校訂版#クリティカル・アパラトゥスとその略号|edd.vett.]]'' の記述で、<br> α系写本では [[wikt:en:pronuntiarint|pronuntiarint]]<sub> (接続法・完了形)</sub> だが、<br> β系写本では [[wikt:en:pronuntiaverint|pronuntia<u>ve</u>rint]]<sub> (接続法・完了形)</sub> となっている。)</span>
*<span style="background-color:#ffa;">[[wikt:la:an|an]]</span> [[wikt:en:perfidia#Latin|perfidia]] [[wikt:en:adductus#Latin|adducti]] [[wikt:en:fecerint|fecerint]],
**あるいは<small>(ビドゥリゲース族の)</small>寝返りに動かされて、なしたのか?
*[[wikt:en:quod#Conjunction|quod]] [[wikt:en:nihil#Latin|nihil]] nobis [[wikt:en:constat#Latin|constat]],
**我々<small>〔ローマ人〕</small>には何ら定かではないので、
*non [[wikt:en:videtur|videtur]] pro [[wikt:en:certus#Latin|certo]] esse <u>proponendum</u>.
**確言するべきであるとは思われない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:~ pro certo ponere;~を確かであると主張する)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:proponendum|<u>pro</u>ponendum]] だが、<br> β系写本では [[wikt:en:ponendum|ponendum]] となっている。)</span>
: <!-- [[wikt:en:| -->
; ビトゥリゲース族が、ローマ人やハエドゥイー族から離反して、アルウェルニー族と同盟してしまう
*<!--❼--><sup>(7)</sup> [[wikt:en:Bituriges#Latin|Bituriges]] eorum [[wikt:en:discessus#Noun|discessu]]
**ビトゥリゲース族は、彼ら<small>〔援兵〕</small>の撤収により、
*[[wikt:en:statim#Latin|statim]] <u>se</u> cum [[wikt:en:Arverni#Latin|Arvernis]] <u>coniunguntur</u>.
**ただちに[[w:アルウェルニ族|アルウェルニー族]]と<small>(同盟を)</small>結んだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:iunguntur|iunguntur]] だが、<br> β系写本では se ~ [[wikt:en:coniungunt|coniungunt]] となっている。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===6節===
*<span style="background-color:#ffd;">[[/注解/6節]] {{進捗|00%|2025-12-15}}</span>
[[画像:Warsaw Royal Castle GM (12).JPG|thumb|right|200px|[[w:グナエウス・ポンペイウス|グナエウス・ポンペイウス]]の立像([[w:ワルシャワ歴史地区|ワルシャワ王宮]])。彼は首都の騒乱を鎮めるために単独の[[w:執政官|執政官]]として大権を与えられ、イタリアの徴兵権を得た。[[w:三頭政治|三頭政治]]後のこの混乱期に、彼はカエサルの政敵たちからこぞって支持されたが、危機に瀕していたカエサルを打倒する絶好の機会を見送った。これは重大な逸機であり、数年後にポンペイウスにとって致命的な結果をもたらすことになる。]]
;諸軍団と分断されて苦慮するカエサル
:
*<!--❶--><sup>(1)</sup> His rebus in Italiam Caesari [[wikt:en:nuntiatus#Latin|nuntiatis]],
**これらの事情がイタリアにいるカエサルへ知らされると、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ここでいうイタリアとは、<br> カエサルの属州[[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]のことである。)</span>
*cum iam ille [[wikt:en:urbanus#Latin|urbanas]] res [[wikt:en:virtus#Latin|virtute]] [[wikt:en:Gnaei#Latin|Gnaei]]<sub> ([[wikt:en:Cn.#Latin|Cn.]])</sub> [[wikt:en:Pompeius#Proper_noun|Pompei]] [[wikt:en:commodior#Latin|commodiorem]] in [[wikt:en:status#Noun_11|statum]] [[wikt:en:pervenisse#Latin|pervenisse]] [[wikt:en:intellegeret|intellegeret]],
**彼は、もはや都<small>〔[[w:ローマ|ローマ市]]〕</small>の事態は[[w:グナエウス・ポンペイウス|グナエウス・ポンペイウス]]の果断さによってより相応な状態に至ったと認識したので、
*in [[wikt:en:Gallia_transalpina#Latin|Transalpinam Galliam]] [[wikt:en:profectus#Latin|profectus]] est.
**ガッリア・トラーンサルピーナ<small>〔アルプスの向こう側のガッリア〕</small>に出発した。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#1節|1節]]②項で言及された Galliam Transalpinam は<br> アルプスの西側「長髪のガッリア」全般を指すと思われるが、<br> ここではどちらかといえば<br> ガッリア南部のローマ属州ガッリア・トラーンサルピーナ<br> すなわち後の[[w:ガリア・ナルボネンシス|ガッリア・ナルボーネーンスィス]]を指す。)</span>
:
*<!--❷--><sup>(2)</sup> [[wikt:en:eo#Adverb|Eo]] cum [[wikt:en:venisset|venisset]],
**<small>(カエサルが)</small>そこに来たときに、
*magna [[wikt:en:difficultas#Latin|difficultate]] [[wikt:en:adficiebatur|adficiebatur]], qua [[wikt:en:ratio#Latin|ratione]] ad [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:pervenire#Latin|pervenire]] [[wikt:en:posset#Latin|posset]].
**どのような方策で軍隊のもとへ到達することができるか、という大きな困難に苦悩させられていた。
:
*<!--❸--><sup>(3)</sup> Nam, si [[wikt:en:legio#Latin|legiones]] in [[wikt:en:provincia#Latin|provinciam]] [[wikt:en:arcesseret|arcesseret]],
**なぜなら、もし、諸[[w:ローマ軍団|軍団]]を属州<small>〔ガッリア・トラーンサルピーナ〕</small>に呼び寄せるのならば、
*se [[wikt:en:absens#Latin|absente]] in [[wikt:en:iter#Latin|itinere]] [[wikt:en:proelium#Latin|proelio]] [[wikt:en:dimicaturus#Latin|dimicaturas]] [[wikt:en:intellegebat|intellegebat]];
**自分<small>〔カエサル〕</small>が不在のままで、行軍中に戦闘を闘うことになるであろうと理解していた。
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> si ipse ad exercitum [[wikt:en:contenderet|contenderet]],
**もし<small>(カエサル)</small>自身が<small>(大部隊の護衛なしで)</small>軍隊のもとへ急いで行くのならば、
*<u>ne</u> iis <u>quidem</u> eo tempore qui quieti [[wikt:en:viderentur|viderentur]],
**そのときには、中立を保っていると見られる者たちでさえも、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:iis#Latin|iis]] はβ系写本の記述で、α系写本では [[wikt:en:his#Latin|his]] となっている。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:quietus#Latin|quietus, quieti]]「平和的な、中立的な」)</span>
*suam [[wikt:en:salus#Latin|salutem]] [[wikt:en:recte#Latin|recte]] [[wikt:en:committi|committi]] [[wikt:en:videbat|videbat]].
**自分の身の安全を良く託されるとは思えなかったのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:前年まで、すなわち第6巻までの戦争は主としてガッリア北部・中部などで闘われていたので、<br> [[ガリア戦記 第6巻#44節|第6巻44節]]で既述のように、ローマ諸軍団はガッリア北部・中部周辺に冬営させられていた。<br> 今回は軍団が駐留していないガッリア中南部を中心に反乱が起こったので、<br> カエサルと諸軍団は分断された。<br> そのため、カエサルが大部隊の護衛なしで北上すれば、<br> 同盟部族にさえ寝首を掻かれる怖れがあったのである。)
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===7節===
*<span style="background-color:#ffd;">[[/注解/7節]] {{進捗|00%|2025-12-19}}</span>
;ルクテリウスとカエサルのナルボーをめぐる駆け引き
[[画像:Narbonne_panorama.jpg|thumb|right|300px|'''ナルボー'''(Narbo)すなわち現在の[[w:ナルボンヌ|ナルボンヌ市]](Narbonne)の街並み。ローマ人が[[w:ドミティア街道|ドミティア街道]]の拠点として植民市'''コロニア・ナルボー・マルティウス'''(Colonia Narbo Martius)を建設し、後には[[w:ローマ内戦 (紀元前49年-紀元前45年)|ローマ内乱]]のときにもカエサル派の根拠地となった。その重要性から帝政期には州都に昇格し、[[w:属州|属州]]名も[[w:ガリア・ナルボネンシス|ガッリア・ナルボネンスィス]]に改められたほどである。]]
[[画像:Via_domitia_map600x600_(1).png|thumb|right|200px|[[w:ドミティア街道|ドミティア街道]](Via Domitia)の経路。ローマ人によってイタリアと[[w:ヒスパニア|ヒスパーニア]]を結ぶ重要な街道として整備された。本節でカエサル側の軍勢が往復したのもこの街道である。]]
:
; カドゥルキー族のルクテリウスが、ルテーニー族を同盟に引き入れる
*<!--❶--><sup>(1)</sup> [[wikt:en:interim#Latin|Interim]] [[wikt:en:Lucterius#Latin|Lucterius]] [[wikt:en:Cadurcus#Latin|Cadurcus]]
**その間に、カドゥルキー族のルクテリウスが
*in [[wikt:en:Ruteni#Latin|Rutenos]] [[wikt:en:missus#Participle|missus]]
**ルテーニー族のところに遣わされて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#5節|5節]]の冒頭で述べられた。<br> ルテーニー族 ''[[w:en:Ruteni|Ruteni]]'' は現在の[[w:アヴェロン県|アヴェロン県]]の<br> [[w:ロデーズ|ロデーズ]]辺りにいたとされる。)</span>
*eam [[wikt:en:civitas#Latin|civitatem]] [[wikt:en:Arverni#Latin|Arvernis]] [[wikt:en:conciliat|conciliat]].
**その部族に[[w:アルウェルニ族|アルウェルニー族]]との仲を取り持つ。
:
; ルクテリウスが、ローマ属州内の拠点都市ナルボーを目指す
*<!--❷--><sup>(2)</sup> [[wikt:en:progressus#Participle|Progressus]] in [[wikt:en:Nitiobriges#Latin|Nitiobriges]] et [[wikt:en:Gabali#Latin|Gabalos]]
**<small>(彼は)</small>ニティオブリゲース族とガバリー族のところに進んで行き、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ニティオブリゲース族<br> またはニティオブロゲース族 ''[[w:en:Nitiobroges|Nitiobroges]]'' は<br> 現在の[[w:ロット=エ=ガロンヌ県|ロット=エ=ガロンヌ県]][[w:アジャン|アジャン]]辺り、<br> ガバリー族 ''[[w:en:Gabali|Gabali]]'' は現在の[[w:ロゼール県|ロゼール県]]辺りにいたらしい。)</span>
*ab [[wikt:en:uterque#Latin|utrisque]] [[wikt:en:obses#Latin|obsides]] [[wikt:en:accipit|accipit]]
**双方から人質たちを受け取って、
*et, magna [[wikt:en:coactus#Latin|coacta]] [[wikt:en:manus#Latin|manu]],
**多くの手勢を徴集すると、
*in [[wikt:en:provincia#Latin|provinciam]] [[wikt:en:Narbo#Latin|Narbonem]] [[wikt:en:versus#Latin|versus]] [[wikt:en:eruptio#Latin|eruptionem]] facere [[wikt:en:contendit|contendit]].
**<small>(ローマ人の)</small>[[w:属州|属州]]内のナルボーに向かって出撃することを急ぐ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ナルボー [[w:la:Narbo|Narbo]] は、ローマ人が建設した地中海岸の植民市で、<br> ヒスパーニアとイタリアを結ぶ拠点であった。<br> 現在の[[w:ナルボンヌ|ナルボンヌ]]。)</span>
:
; カエサルもナルボーを目指す
*<!--❸--><sup>(3)</sup> Qua re [[wikt:en:untiatus#Latin|nuntiata]]
**その事を報告されると、
*Caesar omnibus [[wikt:en:consilium#Latin|consiliis]] [[wikt:en:antevertendus#Latin|antevertendum]] <span style="color:#009900;font-size:8pt;">(esse)</span> [[wikt:en:existimavit|existimavit]], ut [[wikt:en:Narbo#Latin|Narbonem]] [[wikt:en:proficisceretur|proficisceretur]].
**カエサルは、ナルボーに出発することを、あらゆる計画に先立ってするべきであると考えた。
:
*<!--❹--><sup>(4)</sup> [[wikt:en:eo#Adverb|Eo]] cum [[wikt:en:venisset|venisset]],
**<small>(カエサルは)</small>そこへやって来ると、
*[[wikt:en:timens#Latin|timentes]] [[wikt:en:confirmat#Latin|confirmat]],
**<ruby><rb>怖気</rb><rp>(</rp><rt>おじけ</rt><rp>)</rp></ruby>ている者たちを元気付けて、
*[[wikt:en:praesidium#Latin|praesidia]]
**守備隊を
*in [[wikt:en:Ruteni#Latin|Rutenis]] [[wikt:en:provincialis#Latin|provincialibus]], [[wikt:en:Volcae#Latin|Volcis]] [[wikt:en:Arecomici#Latin|Arecomicis]], [[wikt:en:Tolosates#Latin|Tolosatibus]]
**属州側のルテーニー族、[[w:ウォルカエ族|ウォルカエ]]・アレコミキー族、トローサーテース族<small>(らの領内)</small>に、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:上述のように、属州外の<u>ルテーニー族</u>は[[w:アルウェルニ族|アルウェルニー族]]と結んでいる。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[w:ウォルカエ族|ウォルカエ族]]は、西側に住むテクトサゲース族 ''[[w:en:Tectosages|Tectosages]]'' と<br> 東側に住むアレコミキー族 ''[[w:en:Arecomici|Arecomici]]'' の2支族に分かれていた。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:トローサーテース族 ''[[w:fr:Tolosates|Tolosates]]'' は、ウォルカエ・テクトサゲース族の分派とされ、<br> 現在の[[w:トゥールーズ|トゥールーズ]]の近くにいたと考えられている。)</span>
*[[wikt:en:circum#Preposition|circum]]<nowiki>que</nowiki> [[wikt:en:Narbo#Latin|Narbonem]], quae [[wikt:en:locum#Latin|loca]] hostibus erant [[wikt:en:finitimus#Latin|finitima]],
**および敵方に隣接した地である[[w:ナルボンヌ|ナルボー]]周辺に
*[[wikt:en:constituit#Latin|constituit]];
**駐留させる。
:
*<!--❺--><sup>(5)</sup> partem [[wikt:en:copiae#Noun_2|copiarum]] ex [[wikt:en:provincia#Latin|provincia]]
**属州<small>〔ガッリア・トラーンサルピーナ〕</small>からの軍勢の一部、
*[[wikt:en:supplementum#Latin|supplementum]]<nowiki>que</nowiki>, quod ex Italia [[wikt:en:adduxerat|adduxerat]],
**およびイタリアから率いて来た補充兵を
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:後者の補充兵 supplementum は、[[#1節|1節]]で既述のように、<br> [[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]で徴募された軍団兵であろう。)</span>
*in [[wikt:en:Helvii#Latin|Helvios]], qui fines [[wikt:en:Arverni#Latin|Arvernorum]] [[wikt:en:contingunt|contingunt]],
**[[w:アルウェルニ族|アルウェルニー族]]の領土に接しているヘルウィイー族のところに
*[[wikt:en:convenire#Latin|convenire]] [[wikt:en:iubet#Latin|iubet]].
**集結することを命じる。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===8節===
*<span style="background-color:#ffd;">[[/注解/8節]] {{進捗|00%|2026-01-03}}</span>
[[画像:Carte-cevennes-france.png|thumb|right|200px|フランスにおける[[w:中央高地 (フランス)|中央高地]](Massif Central)とセヴェンヌ山地(Cévennes)の位置]]
[[画像:Col_de_legal.jpeg|thumb|right|200px|[[w:雪|雪]]に覆われた[[w:オーヴェルニュ地域圏|オーヴェルニュ高地]]。オーヴェルニュ(Auvergne)の名は[[w:アルウェルニ族|アルウェルニー族]](Arverni)に由来する。]]
[[画像:Causse_Mejean_Evening.jpg|thumb|right|200px|城壁のように続くケウェンナ(セヴェンヌ)山地の断崖]]
[[画像:France_Massif_central.jpg|thumb|right|200px|[[w:アルウェルニ族|アルウェルニー族]]の勢力圏であった[[w:中央高地 (フランス)|中央高地]](Massif Central)の領域(着色部分)。平野の多いフランスにおいて山塊としてそびえ立つ。]]
:
;カエサルがケウェンナ山地を越えてアルウェルニー族の領内へ突入
*<!--❶--><sup>(1)</sup> His rebus [[wikt:en:comparatus#Latin|comparatis]],
**これらの事が整えられて、
*[[wikt:en:repressus#Latin|represso]] iam [[wikt:en:Lucterius#Latin|Lucterio]] et [[wikt:en:remotus#Latin|remoto]],
**<small>(カドゥルキー族の)</small>ルクテリウスはすでに押し留められ、遠ざけられた。
*quod [[wikt:en:intrare#Latin|intrare]] intra [[wikt:en:praesidium#Latin|praesidia]] [[wikt:en:periculosus#Latin|periculosum]] [[wikt:en:putabat|putabat]],
**──というのは<small>(ローマ人の)</small>守備の範囲内に踏み込むことは危険なことであると<small>(ルクテリウスが)</small>見なしていたからであるが、──
*in [[wikt:en:Helvii#Latin|Helvios]] [[wikt:en:proficiscitur|proficiscitur]].
**<small>(そこで、カエサルは)</small>ヘルウィイー族のところに出発する。
:
; カエサルが、アルウェルニー族の要害ケウェンナ山を越える
*<!--❷--><sup>(2)</sup> <u>Etsi</u> mons <u>Cevenna</u>, qui [[wikt:en:Arverni#Latin|Arvernos]] ab [[wikt:en:Helvii#Latin|Helviis]] [[wikt:en:discludit|discludit]],
**[[w:アルウェルニ族|アルウェルニー族]]をヘルウィイー族から隔てている<u>ケウェンナ山</u>は、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:山の名は写本によって Cebenna または Cevenna となっており、<br> [[w:ガイウス・プリニウス・セクンドゥス|大プリーニウス]]が記した [[wikt:en:Cebenna#Latin|Cebenna]] がガリア語に近いようである。<br> 現在名はセヴェンヌ山地 Cévennes と呼ばれ、<br> [[w:中央高地 (フランス)|フランス中央高地]](Massif Central)の南東部にそそり立っている。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:etsi#Latin|etsi]] ~ [[wikt:en:tamen#Latin|tamen]] …「~としても、にもかかわらず…」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:mons#Latin|mons]] は β系写本の記述で、α系写本にはない。)</span>
*[[wikt:en:durissimus#Latin|durissimo]] tempore anni
**最も厳しい時季に
*[[wikt:en:altissimus#Latin|altissima]] [[wikt:en:nix#Latin|nive]] iter [[wikt:en:impediebat|impediebat]],
**豪[[w:雪|雪]]によって道を閉ざしていたのであるが、
*<u>tamen</u> [[wikt:en:discussus#Latin|discussa]] [[wikt:en:nix#Latin|nive]] sex in [[wikt:en:altitudo#Latin|altitudinem]] [[wikt:en:pes#Latin|pedum]]
**にもかかわらず<small>(カエサル勢は)</small>深さ6<u>ペース</u>の雪を粉砕して、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、6ペースは約1.8メートル弱。)</span>
*atque ita [[wikt:en:via#Latin|viis]] [[wikt:en:patefactus#Latin|patefactis]] [[wikt:en:summus#Latin|summo]] [[wikt:en:miles#Latin|militum]] <u>sudore</u>
**このように兵士たちの最大の努力によって道が開かれて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:sudor#Latin|sudore]]「汗」だが、<br> β系写本では [[wikt:en:labor#Latin|labore]]「労苦」 となっている。)</span>
*ad fines [[wikt:en:Arverni#Latin|Arvernorum]] [[wikt:en:pervenit#Latin|pervenit]].
**[[w:アルウェルニ族|アルウェルニー族]]の領土へ到達した。
:
; アルウェルニー族が、カエサルの奇襲に周章狼狽する
*<!--❸--><sup>(3)</sup> Quibus [[wikt:en:oppressus#Latin|oppressis]] [[wikt:en:inopinans#Latin|inopinantibus]],
**<small>(アルウェルニー族は)</small>彼らに対する<small>(カエサルの)</small>攻撃を予期していなかったが、
*quod se <u>Cevenna</u> ut [[wikt:en:murus#Latin|muro]] [[wikt:en:munitus#Latin|munitos]] [[wikt:en:existimabant|existimabant]],
**──というのは、自分たちは<u>ケウェンナ</u>を壁として防御されていると考えていたからであり、
*ac <u>ne</u> [[wikt:en:singularis#Latin|singulari]] <u>quidem</u> [[wikt:en:umquam#Latin|umquam]] homini eo tempore anni [[wikt:en:semita#Latin|semitae]] [[wikt:en:patuerant|patuerant]],
**かつ、その時季には、個人にとってさえも、小道はかつて開かれていなかったからであるが、──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*[[wikt:en:eques#Latin|equitibus]] [[wikt:en:imperat|imperat]],
**<small>(カエサルは)</small>騎兵たちに命令する。
*ut, [[wikt:en:quam#Adverb|quam]] [[wikt:en:late#Latin|latissime]] [[wikt:en:possint|possint]], [[wikt:en:vagentur|vagentur]]
**できるだけ広く動き回り、
*et [[wikt:en:quam#Adverb|quam]] maximum hostibus [[wikt:en:terror#Latin|terrorem]] [[wikt:en:inferant|inferant]].
**敵たちに最大限の恐怖を引き起こすように、と。
:
; ウェルキンゲトリークスが、ビトゥリゲース族のもとから軍勢を取って返す
*<!--❹--><sup>(4)</sup> Celeriter haec [[wikt:en:fama#Latin|fama]] ac <u>nuntiis</u>
**これらのことは速やかに風評や伝令たちによって、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、主要写本ω では [[wikt:en:nuntii#Latin|nuntii]] だが、<br> ''[[ガリア戦記/注解編/写本と校訂版#Manutius|Manutius]]'' が [[wikt:en:nuntiis#Etymology_1|nuntiis]] と修正提案している。)</span>
*ad [[wikt:en:Vercingetorix#Latin|Vercingetorigem]] [[wikt:en:perferuntur|perferuntur]];
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]のもとへ報知される。
*quem [[wikt:en:perterritus#Latin|perterriti]] omnes [[wikt:en:Arverni#Latin|Arverni]] [[wikt:en:circumsistunt|circumsistunt]] atque [[wikt:en:obsecrant|obsecrant]],
**彼<small>〔ウェルキンゲトリークス〕</small>を、脅かされている[[w:アルウェルニ族|アルウェルニー族]]の皆が取り巻いて、嘆願する。
*ut suis [[wikt:en:fortuna#Latin|fortunis]] [[wikt:en:consulat#Latin|consulat]],
**自分たち<small>〔アルウェルニー族〕</small>の境遇に配慮してくれるように、
*<u>neve</u> ab hostibus <u>diripiantur</u>,
**自分たち<small>〔アルウェルニー族〕</small>が敵<small>〔ローマ人〕</small>によって略奪されることを許容しないように、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:この行は、α系写本では [[wikt:en:neve#Latin|neve]] ab hostibus [[wikt:en:diripiantur|diripiantur]] <br> β系写本では [[wikt:en:neu#Latin|neu]] se ab hostibus [[wikt:en:diripi|diripi]] [[wikt:en:patiatur|patiatur]] となっている。)</span>
*[[wikt:en:praesertim#Latin|praesertim]] cum [[wikt:en:videat|videat]] [[wikt:en:omnis#Latin|omne]] ad se bellum [[wikt:en:translatus#Participle|translatum]].
**とりわけ、すべての戦争が自分たちへ向けられると<small>(彼が)</small>見なしているのであるから
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:praesertim cum ~;とりわけ~であるから)</span>
: <!-- [[wikt:en:| -->
*<!--❺--><sup>(5)</sup> Quorum ille [[wikt:en:prex#Latin|precibus]] [[wikt:en:permotus#Latin|permotus]]
**彼<small>〔ウェルキンゲトリークス〕</small>は、その者たちの懇願に揺り動かされて、
*[[wikt:en:castra#Latin|castra]] ex [[wikt:en:Bituriges#Latin|Biturigibus]] [[wikt:en:movet|movet]] in [[wikt:en:Arverni#Latin|Arveruos]] [[wikt:en:versus#Latin|versus]].
**陣営をビトゥリゲース族のところから[[w:アルウェルニ族|アルウェルニー族]]のところに向けて行軍する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:castra movet 「陣営を動かす」=「行軍する」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:現在の[[w:ブールジュ|ブールジュ]]辺りから[[w:クレルモン=フェラン|クレルモン=フェラン]]辺りに南下したようである。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===9節===
*<span style="background-color:#ffd;">[[/注解/9節]] {{進捗|00%|2026-01-12}}</span>
;カエサルが北上して諸軍団と合流するが、同盟軍はゴルゴビナ攻略をめざす
:
*<!--❶--><sup>(1)</sup> At Caesar, [[wikt:en:biduum#Latin|biduum]] in his locis [[wikt:en:moratus#Participle|moratus]],
**それに対して、カエサルは2日間、この地に留まった。
*quod haec de [[wikt:en:Vercingetorix#Latin|Vercingetorige]] usu ventura [[wikt:en:opinio#Latin|opinione]] [[wikt:en:praeceperat|praeceperat]],
**──というのは、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]についてこれ<small>〔陣営の移動〕</small>が起こると予想をしていたからだが、──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:usu venire 「起こる」→ usu [[wikt:en:venturus#Latin|ventūra]] (esse) 「起こるであろう」)</span>
*per causam [[wikt:en:supplementum#Latin|supplementi]] [[wikt:en:equitatus#Noun|equitatus]]<nowiki>que</nowiki> [[wikt:en:cogendus#Latin|cogendi]]
**補充兵と騎兵隊を徴集するためという口実のもとに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:per causam 「口実のもとに」)</span>
*ab [[wikt:en:exercitus#Noun|exercitu]] [[wikt:en:discedit|discedit]];
**軍隊から離れる。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:Brutus#Latin|Brutum]] [[wikt:en:adulescens#Noun|adulescentem]] his copiis [[wikt:en:praeficit|praeficit]];
**<small>(カエサルは)</small><u>青年ブルートゥス</u>にこの軍勢を指揮させる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:青年ブルートゥスとは、<br> [[w:デキムス・ユニウス・ブルトゥス・アルビヌス|デキムス・ブルートゥス]](<small>[[w:la:Decimus_Iunius_Brutus_Albinus|Decimus Iunius Brutus Albinus]]</small>)のことで、<br> [[ガリア戦記 第3巻#14節|第3巻14節]]でカエサルの艦隊を指揮した。)</span>
*hunc [[wikt:en:monet#Latin|monet]], ut in omnes partes [[wikt:en:eques#Latin|equites]] quam [[wikt:en:late#Latin|latissime]] [[wikt:en:pervagentur|pervagentur]]:
**彼には、[[w:騎兵|騎兵]]たちがあらゆる方面にできるだけ広く駆け回るようにと、忠告する。
*<u>daturum</u> se <u>operam</u>, ne longius [[wikt:en:triduum#Latin|triduo]] ab [[wikt:en:castra#Latin|castris]] [[wikt:en:absit#Latin|absit]].
**自分<small>〔カエサル〕</small>は、3日間より長く陣営から離れないように、努力をするであろう、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:opera#Latin|operam]] dare 「努力をする」→ operam [[wikt:en:daturus#Latin|datūrum]] (esse) 「努力をするであろう」)</span>
[[画像:Image-Vienne-Cropped.jpg|thumb|right|300px|'''ウィエンナ'''(Vienna)すなわち現在のヴィエンヌ(Vienne)。ロダヌス川(現[[w:ローヌ川|ローヌ川]])のほとりにある当地は、南仏[[w:プロヴァンス|プロヴァンス地方]]と北仏[[w:ブルゴーニュ地域圏|ブルゴーニュ地方]]を結ぶ交通の要衝として、古代ローマ時代から栄え、今もローマ時代の遺跡が多く残る。]]
:
; カエサルが、急いでウィエンナへ北進する
*<!--❸--><sup>(3)</sup> His [[wikt:en:constitutus#Participle|constitutis]] rebus,
**これらの事を決定すると、
*<u>omnibus</u> suis [[wikt:en:inopinans#Latin|inopinantibus]],
**配下の皆が予期しないほど、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:omnibus は β系写本の記述で、<br> α系写本にはない。)</span>
*quam [[wikt:en:maximus#Latin|maximis]] potest [[wikt:en:iter#Latin|itineribus]],
**できるかぎりの強行軍で、
*[[wikt:en:Vienna#Etymology_1|Viennam]] [[wikt:en:pervenit#Latin|pervenit]].
**<u>ウィエンナ</u>に到着する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ウィエンナ [[w:la:Vienna|Vienna]] は、<br> 現在の[[w:ヴィエンヌ (イゼール県)|ヴィエンヌ]] ''[[w:en:Vienne, Isère|Vienne]]'')</span>
:
; カエサルが、ハエドゥイー族領を抜けて、2個軍団が冬営するリンゴネース族領へ向けて北上する
*<!--❹--><sup>(4)</sup> [[wikt:en:ibi#Latin|Ibi]] [[wikt:en:nactus#Latin|nactus]] [[wikt:en:recens#Latin|recentem]] [[wikt:en:equitatus#Latin|equitatum]], quem [[wikt:en:multus#Latin|multis]] ante diebus eo [[wikt:en:praemiserat|praemiserat]],
**そこで、何日も前にそこに先遣していたまだ新兵の騎兵隊を得て、
[[画像:Langres_FR_(march_2008).jpg|thumb|right|300px|リンゴネース族(Lingones)の名を残す[[w:ラングル|ラングル]](Langres)の街の雪景色]]
*neque [[wikt:en:diurnus#Latin|diurno]] neque [[wikt:en:nocturnus#Latin|nocturno]] itinere [[wikt:en:intermissus#Latin|intermisso]]
**昼間も夜間も行軍を中断せずに、
*per fines [[wikt:en:Aedui#Latin|Haeduorum]]
**[[w:ハエドゥイ族|ハエドゥイー族]]の領土を通って、
*in [[wikt:en:Lingones#Latin|Lingones]] [[wikt:en:contendit|contendit]],
**<u>リンゴネース族のところ</u>に急いだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:リンゴネース族 [[w:la:Lingones|Lingones]] の首邑は<br> 現在の[[w:ラングル|ラングル]] ''[[w:en:Langres|Langres]]'' で、<br> ローマ時代には [[w:la:Andematunnum|Andematunnum]] と呼ばれたが、<br> ''[[wikt:fr:Lingones|Lingones]]'' の転訛が ''[[wikt:fr:Langres|Langres]]'' である。)</span>
*[[wikt:en:ubi#Latin|ubi]] [[wikt:en:duo#Latin|duae]] [[wikt:en:legio#Latin|legiones]] [[wikt:en:hiemabant|hiemabant]],
**そこには、2個[[w:ローマ軍団|軍団]]が冬営していた。
*ut, si [[wikt:en:aliquis#Latin|quid]] etiam de sua [[wikt:en:salus#Latin|salute]] ab [[wikt:en:Aedui#Latin|Haeduis]] [[wikt:en:iniretur|iniretur]] [[wikt:en:consilium#Latin|consilii]], [[wikt:en:celeritas#Latin|celeritate]] [[wikt:en:praecurreret|praecurreret]].
**もし<small>(カエサル)</small>自らの安全についてさえ、ハエドゥイー族により何らかの謀計が始められても、速やかに凌駕するように。
:
; カエサルが、リンゴネース族領の軍団冬営地へ到着して、諸軍団へ集結を指令する
*<!--❺--><sup>(5)</sup> [[wikt:en:eo#Adverb|Eo]] cum [[wikt:en:pervenisset|pervenisset]],
**<small>(カエサルは)</small>そこへ到着したときに、
*ad reliquas [[wikt:en:legio#Latin|legiones]] [[wikt:en:mittit|mittit]]
**残りの軍団のもとへ<small>(伝令を)</small>遣わす。
*<u>prius</u>que omnes in unum locum [[wikt:en:cogit|cogit]], <u>quam</u> de eius [[wikt:en:adventus#Latin|adventu]] [[wikt:en:Arverni#Latin|Arvernis]] [[wikt:en:nuntiari|nuntiari]] [[wikt:en:posset#Latin|posset]].
**彼の到着について[[w:アルウェルニ族|アルウェルニー族]]に知らされ得るより早く、総勢が一か所に集結するように、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:priusquam#Latin|prius ~ quam]] …;…より早く~)</span>
: <!-- [[wikt:en:| -->
; ウェルキンゲトリークスが、ボイイー族がいるゴルゴビナの攻略を企図する
*<!--❻--><sup>(6)</sup> Hac re [[wikt:en:cognitus#Participle|cognita]],
**この事を知ると、
*[[wikt:en:Vercingetorix#Latin|Vercingetorix]] rursus in [[wikt:en:Bituriges#Latin|Bituriges]] [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:reducit|reducit]]
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は再びビトゥリゲース族のところに軍隊を連れ戻して、
*atque [[wikt:en:inde#Latin|inde]] [[wikt:en:profectus#Participle_2|profectus]] Gorgobinam, [[wikt:en:Boii#Latin|Boiorum]] [[wikt:en:oppidum#Latin|oppidum]],
**そこから、[[w:ボイイ族|ボイイー族]]の城塞都市であるゴルゴビナへ出発した。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ゴルゴビナ ''[[w:en:Gorgobina|Gorgobina]]'' は、現在の候補地としては、<br> [[w:ニエーヴル県|ニエーヴル県]]のサン=パリズ=ル=シャテル<small>([[w:en:Saint-Parize-le-Châtel|Saint-Parize-le-Châtel]])</small><br> [[w:アンドル=エ=ロワール県|アンドル=エ=ロワール県]]のラ・ゲルシュ([[w:en:La Guerche|La Guerche]])<br> あるいは、[[w:シェール県|シェール県]]のサン=サテュル([[w:fr:Saint-Satur|Saint-Satur]])などが挙げられている。)</span>
*quos ibi [[wikt:en:helvetico|Helvetico]] [[wikt:en:proelium#Latin|proelio]] [[wikt:en:victus#Participle|victos]]
**──[[w:ヘルウェティイ族|ヘルウェーティイー族]]の戦闘で打ち負かされた彼らをそこに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ボイイー族はヘルウェーティイー族とともにガッリアに移動して、カエサルに敗れていた。第1巻28節~29節を参照。)</span>
*Caesar [[wikt:en:conlocaverat#Latin|conlocaverat]] [[wikt:en:Aedui#Latin|Haeduis]]<nowiki>que</nowiki> [[wikt:en:adtribuerat#Latin|adtribuerat]],
**カエサルは宿営させ、ハエドゥイー族<small>(の庇護)</small>に委ねていたのだが、──
*[[wikt:en:oppugnare#Latin|oppugnare]] [[wikt:en:instituit#Latin|instituit]].
**<small>(ウェルキンゲトリークスはゴルゴビナの)</small>攻略を決意した。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===10節===
[[画像:Caesar's_campaign_to_Agedincum_in_52BC.png|thumb|right|250px|前節までのカエサルの[[w:ナルボンヌ|ナルボー]]からアゲディンクムへの進路(青線)および[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の進路(赤線)。青字名は親ローマ部族、赤字名は反ローマ部族。カエサルは[[w:アルウェルニ族|アルウェルニー族]]の本拠ゲルゴウィアを突くと見せかけてウェルキンゲトリークスを引き寄せ、その間に[[w:ブルゴーニュ地域圏|ブルゴーニュ]]に冬営していた諸軍団と合流できた。これに対して、ウェルキンゲトリークスはボイイー族を攻めようとする。]]
*<span style="background-color:#ffd;">[[/注解/10節]] {{進捗|00%|2026-01-16}}</span>
;カエサルがアゲディンクムを発って、ボイイー族支援に向かう
:
; カエサルが抱えることになった「大きな困難」とは?
*<!--❶--><sup>(1)</sup> Magnam haec res Caesari [[wikt:en:difficultas#Latin|difficultatem]] ad [[wikt:en:consilium#Latin|consilium]] [[wikt:en:capiendus#Latin|capiendum]] [[wikt:en:adferebat|adferebat]]<!--:-->,
**この事態は、カエサルが作戦を立てるためには、大きな困難を引き起こしていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:haec res 「この事態」とは、<br> ウェルキンゲトリークスが<br> ハエドゥイー族の庇護下にあったボイイー族を攻めること。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:magnam ~ difficultatem 「大きな困難を」)</span>
*si reliquam partem [[wikt:en:hiems#Latin|hiemis]] uno loco [[wikt:en:legio#Latin|legiones]] [[wikt:en:contineret|contineret]],
**もし、冬の残りの期間に、諸[[w:ローマ軍団|軍団]]を1か所に留めておくならば、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:前節で述べられたように、<br> カエサルはリンゴネース族の軍団冬営地に着いたときに、<br> 諸軍団に1か所に集結するべく伝令を遣わしていた。)</span>
*ne, [[wikt:en:stipendiarius#Latin|stipendiariis]] [[wikt:en:Haedui#Latin|Haeduorum]] [[wikt:en:expugnatus#Latin|expugnatis]], [[wikt:en:cunctus#Latin|cuncta]] Gallia [[wikt:en:deficeret|deficeret]],
**[[w:ハエドゥイ族|ハエドゥイー族]]の朝貢国が攻略されて、ガッリア全体が背くのではないか?
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:「ハエドゥイー族の朝貢国」とは、ボイイー族のこと。)</span>
*quod [[wikt:en:nullus#Determiner|nullum]] amicis in eo [[wikt:en:praesidium#Latin|praesidium]] <u>videret positum esse</u>;
**──というのは、彼<small>〔カエサル〕</small>においては、友邦に対するいかなる守備隊も置かれていないと<small>(ガッリアが)</small>見るからである──。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> [[ガリア戦記/注解編/写本と校訂版#写本の系図|α系写本]]のうち、χ系・M・B・S写本などでは [[wikt:en:videret|videret]] [[wikt:en:positus#Latin|positum]] esse 、<br> α系写本のうち、写本M・L・Nなどでは [[wikt:en:videretur|videretur]] positum esse 、<br> β系写本では、positum videret となっている。)</span>
*si [[wikt:en:mature#Adverb|maturius]] ex [[wikt:en:hiberna#Noun|hibernis]] [[wikt:en:educeret|educeret]],
**もし、尚早に冬営地から<small>(諸軍団を)</small>進発させれば、
*ne ab re [[wikt:en:frumentarius#Latin|frumentaria]] [[wikt:en:durus#Latin|duris]] [[wikt:en:subvectio#Latin|subvectionibus]] [[wikt:en:laboraret|laboraret]].
**<small>(降雪時期の)</small>糧秣供給の厄介な輸送によって苦労するのではないか?
:
*<!--❷--><sup>(2)</sup> <u>Praestare</u> [[wikt:en:visus#Participle|visum]] est tamen omnes [[wikt:en:difficultas#Latin|difficultates]] [[wikt:en:perpeti#Verb|perpeti]],
**しかしながら、あらゆる困難に耐えることの方が<u>優っている</u>ように見える。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:praestare|praestare]] ~ [[wikt:en:quam#Adverb|quam]] …「…よりも~が優る」)</span>
*<u>quam</u> [[wikt:en:tantus#Latin|tanta]] [[wikt:en:contumelia#Latin|contumelia]] [[wikt:en:acceptus#Latin|accepta]] omnium suorum [[wikt:en:voluntas#Latin|voluntates]] [[wikt:en:alienare#Latin|alienare]].
**これほどの恥辱を受けて、配下の皆の意欲を遠ざけてしまう<u>よりは</u>。
:
*<!--❸--><sup>(3)</sup> Itaque [[wikt:en:cohortatus#Latin|cohortatus]] [[wikt:en:Haedui#Latin|Haeduos]] de [[wikt:en:supportandus#Latin|supportando]] [[wikt:en:commeatus#Noun|commeatu]],
**こうして、<small>(カエサルは)</small>ハエドゥイー族に軍需物資の輸送について、激励して、
*[[wikt:en:praemittit|praemittit]] ad [[wikt:en:Boii#Latin|Boios]], qui de suo [[wikt:en:adventus#Latin|adventu]] [[wikt:en:doceant|doceant]]
**[[w:ボイイ族|ボイイー族]]のもとへ、<small>(カエサル)</small>自らの到着について知らせるための者たちを先遣して、
*[[wikt:en:hortentur|hortentur]]<nowiki>que</nowiki> ut in [[wikt:en:fides#Latin|fide]] [[wikt:en:maneant|maneant]] atque hostium [[wikt:en:impetus#Latin|impetum]] magno animo [[wikt:en:sustineant|sustineant]].
**<small>(カエサルへの)</small>信義に留まって、敵たちの襲撃に大いなる決意をもって持ちこたえるように、と激励させた。
[[画像:Aqueduc2.jpg|thumb|right|250px|アゲディンクム、すなわちセノネース族(Senones)の名を残す現在の[[w:サンス|サーンス]](Sens)に建てられたローマ時代の[[w:水道橋|水道橋]]遺跡。]]
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> Duabus [[wikt:en:Agedincum#Latin|Agedinci]] legionibus atque [[wikt:en:impedimentum#Latin|impedimentis]] [[wikt:en:totus#Latin|totius]] [[wikt:en:exercitus#Noun|exercitus]] [[wikt:en:relictus#Latin|relictis]],
**アゲディンクムに、2個軍団および軍隊全体の輜重を残すと、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:アゲディンクムは敵対するセノネース族の首邑だが、<br> [[ガリア戦記 第6巻#44節|第6巻44節]]で6個軍団を冬営させていた。<br> 現在の[[w:サンス|サーンス]]。)</span>
*ad [[wikt:en:Boii#Latin|Boios]] [[wikt:en:proficiscitur|proficiscitur]].
**[[w:ボイイ族|ボイイー族]]のもとへ出発した。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===11節===
[[画像:France_-_Loiret_-_Montargis_-_Passerelle_vers_l'écluse.JPG|thumb|right|250px|ウェッラウノドゥーヌムの候補地の一つであるモンタルジ(Montargis)の運河沿いの景観。セノネース族の城塞都市ウェッラウノドゥーヌム(Vellaunodunum)が現在のどの地点に当たるのか定説はない。アゲディンクム(現在の[[w:サンス|サーンス]])とケナブム(現在の[[w:オルレアン|オルレアン]])の中間地点であると考えられることから、モンタルジ([[w:en:Montargis|Montargis]])、ボーヌ=ラ=ロランド([[w:en:Beaune-la-Rolande|Beaune-la-Rolande]])やシャトー=ランドン([[w:en:Château-Landon|Château-Landon]])などが候補地に挙げられている。]]
*<span style="background-color:#ffd;">[[/注解/11節]] {{進捗|00%|2026-02-02}}</span>
;セノネース族のウェッラウノドゥーヌムを降し、カルヌーテース族のケナブムを攻略
:
*<!--❶--><sup>(1)</sup> [[wikt:en:alter#Latin|Altero]] die
**<small>(カエサルは出発して)</small>翌日に、
*cum ad [[wikt:en:oppidum#Latin|oppidum]] [[wikt:en:Senones#Latin|Senonum]] [[wikt:en:Vellaunodunum#Latin|Vellaunodunum]] [[wikt:en:venisset|venisset]],
**セノネース族の城塞都市ウェッラウノドゥーヌムへやって来たときに、
*ne [[wikt:en:aliquem|quem]] post se hostem [[wikt:en:relinqueret|relinqueret]],
**自らの後方に何らかの敵を残しておかないように、
*[[wikt:en:quo#Latin|quo]] [[wikt:en:expeditior#Latin|expeditiore]] re [[wikt:en:frumentarius#Adjective|frumentaria]] [[wikt:en:uteretur|uteretur]],
**そのことにより、妨げなく糧秣供給を享受するように、
*[[wikt:en:oppugnare#Latin|oppugnare]] [[wikt:en:instituit#Latin|instituit]]
**<small>(同市の)</small>攻囲を決めて、
*<u>idque</u> [[wikt:en:biduum#Latin|biduo]] [[wikt:en:circumvallavit|circumvallavit]];
**それ<small>〔城塞都市〕</small>を2日間で<small>(塁壁で)</small>囲んだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:id#Latin|id]]<nowiki>que</nowiki> だが、<br> β系写本では [[wikt:en:eo#Etymology_4|eo]]<nowiki>que</nowiki> となっている。)</span>
:
; セノネース族の城塞都市ウェッラウノドゥーヌムが降伏する
*<!--❷--><sup>(2)</sup> [[wikt:en:tertius#Latin|tertio]] die
**3日目に、
*[[wikt:en:missus#Participle|missis]] ex [[wikt:en:oppidum#Latin|oppido]] [[wikt:en:legatus#Noun|legatis]] de [[wikt:en:deditio#Latin|deditione]],
**城塞都市から降伏についての使節たちが遣わされて来て、
*[[wikt:en:arma#Latin|arma]] [[wikt:en:conferri|conferri]],
**武器が運び集められること、
*[[wikt:en:iumentum#Latin|iumenta]] [[wikt:en:produci#Latin|produci]],
**役畜が引き渡されること、
*[[wikt:en:sescenti#Latin|sescentos]] [[wikt:en:obses#Latin|obsides]] [[wikt:en:dari#Latin|dari]] [[wikt:en:iubet#Latin|iubet]].
**600名の人質が供出されることを<small>(カエサルが)</small>命じる。
:
; ウェッラウノドゥーヌムに副官トレボーニスと守備隊を残し、カエサル自身はケナブムへ向かう
*<!--❸--><sup>(3)</sup> Ea qui [[wikt:en:conficeret|conficeret]],
**それらのことを成就するための者として、
*[[wikt:en:Gaius#Latin|Gaium]] [[wikt:en:Trebonius#Latin|Trebonium]] [[wikt:en:legatus#Latin|legatum]] [[wikt:en:relinquit|relinquit]].
**<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レーガートゥス</rt><rp>)</rp></ruby> [[w:ガイウス・トレボニウス|ガーイウス・トレボーニウス]]を<small>(ウェッラウノドゥーヌムに)</small>残留させる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[w:la:Gaius Trebonius|Gaius Trebonius]] は、カエサルの副官の一人。)</span>
*Ipse, ut quam primum iter <u>faceret</u><ref>faceret はα系写本の表記で、β系写本では conficeret となっている。</ref>,
**<small>(カエサル)</small>自身は、できるだけ素早く<small>(ゴルゴビナへの)</small>行軍を成就するように、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:quam#Adverb|quam]] [[wikt:en:primum#Latin|primum]] 〜「できるだけ素早く〜」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:faceret|faceret]] だが、<br> β系写本では [[wikt:en:conficeret|conficeret]] となっている。)</span>
*[[wikt:en:Genabum#Latin|Cenabum]] [[wikt:en:Carnutes#Latin|Carnutum]] [[wikt:en:proficiscitur|proficiscitur]];
**カルヌーテース族のケナブムに出発する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ケナブム Cenabum はケルト語風の読みで、現在の[[w:オルレアン|オルレアン]]。)</span>
:
*<!--❹--><sup>(4)</sup> qui tum primum [[wikt:en:adlatus#Latin|adlato]] [[wikt:en:nuntium#Latin|nuntio]] de [[wikt:en:oppugnatio#Latin|oppugnatione]] [[wikt:en:Vellaunodunum#Latin|Vellaunoduni]],
**そのとき彼ら<small>〔カルヌーテース族〕</small>は、当初はウェッラウノドゥーヌムの攻囲についての報告をもたらされて、
*cum [[wikt:en:longe#Latin|longius]] eam rem <u>ductum</u> [[wikt:en:iri#Latin|iri]] [[wikt:en:existimarent|existimarent]],
**その事・軍事作戦はより長く引き延ばされて行われると考えていたので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ductus#Noun_2|ductus]] は、軍事的な指揮・作戦などを表す。[[#62節]]も同様。)</span>
*[[wikt:en:praesidium#Latin|praesidium]] [[wikt:en:Genabum#Latin|Cenabi]] [[wikt:en:tuendus#Latin|tuendi]] causa, quod eo [[wikt:en:mitterent|mitterent]], [[wikt:en:comparabant|comparabant]].
**ケナブムを固守するために、守備隊をそこへ派遣することを準備していた。
:
; カエサルが、カルヌーテース族の城塞都市ケナブムの攻囲を翌日に延期する
*<!--❺--><sup>(5)</sup> [[wikt:en:huc#Latin|Huc]] [[wikt:en:biduum#Latin|biduo]] [[wikt:en:pervenit#Etymology_1|pervenit]].
**<small>(カエサルは)</small>ここ<small>〔ケナブム〕</small>へ2日間で到着する。
*[[wikt:en:castra#Latin|Castris]] ante oppidum [[wikt:en:positus#Participle|positis]],
**城塞都市の前に陣営を設置したが、
*[[wikt:en:dies#Latin|diei]] [[wikt:en:tempus#Latin|tempore]] [[wikt:en:exclusus#Latin|exclusus]]
**日の時刻<small>〔夕刻〕</small>によって妨げられたので、
*in posterum [[wikt:en:oppugnatio#Latin|oppugnationem]] [[wikt:en:differt|differt]],
**翌日に攻囲を延期する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:in posterum = in [[wikt:en:posterus#Latin|posterum]] [[wikt:en:diem#Latin|diem]]「翌日に」)</span>
*[[wikt:en:quisque#Latin|quaeque]] ad eam rem [[wikt:en:usus#Latin|usui]] [[wikt:en:sint#Latin|sint]],
**その事<small>〔攻囲〕</small>に有益になることは何であれ、
*[[wikt:en:miles#Latin|militibus]] [[wikt:en:imperat|imperat]];
**兵士たちに命令する。
[[画像:Orleans.jpg|thumb|right|400px|ケナブム(Cenabum)すなわち現在の[[w:オルレアン|オルレアン]](Orléans)を流れるリゲル川(現在の[[w:ロワール川|ロワール川]])の景観。左が北岸のオルレアン聖十字架大聖堂、右がジョージ5世橋と思われる。]]
:
*<!--❻--><sup>(6)</sup> et, quod oppidum [[wikt:en:Genabum#Latin|Cenabum]] [[wikt:en:pons#Latin|pons]] [[wikt:en:flumen#Latin|fluminis]] [[wikt:en:Liger#Latin|Ligeris]] [[wikt:en:contingebat|contingebat]],
**城塞都市ケナブムには、リゲル川の橋が接していたので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:リゲル川は、現在の[[w:ロワール川|ロワール川]]。)</span>
*[[wikt:en:veritus#Latin|veritus]] ne [[wikt:en:noctu#Adverb|noctu]] ex oppido [[wikt:en:profugerent|profugerent]],
**夜間に城塞都市から<small>(敵勢が)</small>逃亡するのではないかと恐れて、
*[[wikt:en:duo#Latin|duas]] legiones in [[wikt:en:arma#Latin|armis]] [[wikt:en:excubare|excubare]] [[wikt:en:iubet#Latin|iubet]].
**<small>(カエサルは)</small>2個[[w:ローマ軍団|軍団]]に武装して寝ずの番をすることを命じる。
:
; ケナブムの住民たちが退避し始める
*<!--❼--><sup>(7)</sup> [[wikt:en:Genabensis#Noun|Cenabenses]] paulo ante mediam noctem
**ケナブムの人々は、真夜中の少し前に
*[[wikt:en:silentium#Latin|silentio]] ex oppido [[wikt:en:egressus#Participle|egressi]]
**沈黙のうちに城塞都市から出て、
*flumen [[wikt:en:transire#Latin|transire]] [[wikt:en:coeperunt|coeperunt]].
**川を渡り始めた。
:
; カエサルの諸軍団がケナブムを制圧する
*<!--❽--><sup>(8)</sup> Qua re per [[wikt:en:explorator#Latin|exploratores]] [[wikt:en:nuntiatus#Latin|nuntiata]]
**その事が偵察者たちによって報告されると、
*Caesar legiones, quas [[wikt:en:expeditus#Latin|expeditas]] esse [[wikt:en:iusserat|iusserat]]
**カエサルは、戦備を整えることを命じていた諸軍団を、
*[[wikt:en:porta#Latin|portis]] [[wikt:en:incensus#Participle|incensis]]
**<small>(ケナブムの)</small>城門を焼き打ちさせた後で、
*[[wikt:en:intromittit|intromittit]] atque oppido [[wikt:en:potitur|potitur]],
**<small>(軍団を)</small>送り込み、城塞都市を占領させて、
*[[wikt:en:perpaucus#Latin|perpaucis]] ex hostium numero [[wikt:en:desideratus#Latin|desideratis]] [[wikt:en:quin#Latin|quin]] [[wikt:en:cunctus#Latin|cuncti]] [[wikt:en:caperentur#Etymology_1|caperentur]],
**敵のうちからわずかな数を取り逃がしたが、むしろ皆がことごとく捕らえられた。
*quod [[wikt:en:pons#Latin|pontis]] atque [[wikt:en:iter#Latin|itinerum]] [[wikt:en:angustia#Latin|angustiae]] <u>multitudinis</u> fugam [[wikt:en:intercluserant|intercluserant]].
**──というのは、橋や道の狭さが、大勢の逃亡をさえぎったからである。──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:multitudinis|multitudinis]]<sub> (単数・属格)</sub> だが、<br> β系写本では [[wikt:en:multitudini|multitudini]]<sub> (単数・与格)</sub> となっている。)</span>
: <!-- [[wikt:en:| -->
; カエサル勢がケナブムを略奪・焼き討ち。リゲル川を渡ってビトゥリゲース族領へ達する
*<!--❾--><sup>(9)</sup> Oppidum [[wikt:en:diripit|diripit]] atque [[wikt:en:incendit|incendit]],
**<small>(カエサルは)</small>城塞都市を略奪し、焼き討ちして、
*[[wikt:en:praeda#Latin|praedam]] militibus [[wikt:en:donat#Latin|donat]],
**略奪品を兵士たちに与える。
*[[wikt:en:exercitus#Noun|exercitum]] <u>Ligerem</u> [[wikt:en:traducit|traducit]]
***軍隊にリゲル川を渡らせて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:Ligerem|Ligerem]] だが、<br> β系写本では Ligerim となっている。)</span>
*atque in [[wikt:en:Bituriges#Latin|Biturigum]] fines [[wikt:en:pervenit#Etymology_1|pervenit]].
*ビトゥリゲース族の領土に到達する。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===12節===
[[画像:Sancerre.jpg|thumb|right|250px|ビトゥリゲース族の城塞都市があったと考えられる[[w:サンセール|サンセール]]([[w:en:Sancerre|Sancerre]])の街並み。カエサルがケナブム(現[[w:オルレアン|オルレアン]])からリゲル川(現[[w:ロワール川|ロワール川]])沿いに当初の目的地であったゴルゴビナへ向かい、後にアウァーリクム(現[[w:ブールジュ|ブールジュ]])へ右折したと見なせば、この地がノウィオドゥーヌムであったとも考えられる。街の名 Sancerre の意味が「カエサルに捧げられた」であるという説もある。現在は[[w:ロワールワイン|ロワールワイン]]の産地として有名で、辛口の白ワインなどの銘柄「Sancerre」にもなっている。]]
[[画像:Neung-sur-Beuvron_église_Saint-Denis_1.jpg|thumb|right|250px|城塞都市ノウィオドゥーヌム(Noviodunum)の所在地として現在有力視されている[[w:ロワール=エ=シェール県|ロワール=エ=シェール県]]のヌン=スュル=ブーヴロン([[w:en:Neung-sur-Beuvron|Neung-sur-Beuvron]])のサン=ドニ教会。カエサルは当初の目的地であったボイイー族のゴルゴビナへは真っ直ぐ向かわずに大きく迂回しており、ケナブム(現[[w:オルレアン|オルレアン]])の南方約45kmにあるこの地点(Beuvron川沿いのNeung)がノウィオドゥーヌムであると推定されている。上空からは、ガッリア時代の城塞都市跡の輪郭が見て取れるという。しかしながら、ボイイ族からは遠い位置にある。]]
*<span style="background-color:#ffd;">[[/注解/12節]] {{進捗|00%|2026-02-02}}</span>
;ビトゥリゲース族のノウィオドゥーヌムを降すが、敵の騎兵が来援
:
*<!--❶--><sup>(1)</sup> [[wikt:en:Vercingetorix#Latin|Vercingetorix]], ubi de Caesaris [[wikt:en:adventus#Latin|adventu]] [[wikt:en:cognovit#Latin|cognovit]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、カエサルの到来について知るや否や、
*[[wikt:en:oppugnatio#Latin|oppugnatione]] <u>destitit</u>
**<small>(ボイイー族の城塞都市ゴルゴビナの)</small>攻略を取り止めて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> α系写本では [[wikt:en:destitit|destitit]]<sub> (完了形)</sub> だが、<br> β系写本や印刷本では [[wikt:en:desistit#Latin|desistit]]<sub> (現在形)</sub> となっている。)</span>
*atque [[wikt:en:obviam#Adverb|obviam]] Caesari [[wikt:en:proficiscitur|proficiscitur]].
**カエサルの方に向かって進発する。
:
*<!--❷--><sup>(2)</sup> Ille oppidum [[wikt:en:Biturigēs|Biturigum]] [[wikt:en:positus#Latin|positum]] in via [[wikt:en:Noviodunum#Latin|Noviodunum]] [[wikt:en:oppugnare#Latin|oppugnare]] [[wikt:en:instituerat|instituerat]].
**彼<small>〔カエサル〕</small>は、途中に位置しているビトゥリゲース族の[[w:オッピドゥム|城塞都市]]ノウィオドゥーヌムの攻略を決めていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:どこへの途中なのか明記されていないため、その解釈により場所についての解釈が変わるようである。)</span>
:
; カエサルの城塞都市ノウィオドゥーヌムへの降伏条件
*<!--❸--><sup>(3)</sup> [[wikt:en:qui#Determiner|Quo]] ex oppido
**その城塞都市から
*cum legati ad eum [[wikt:en:venissent|venissent]] [[wikt:en:oratum#Verb|oratum]] ut sibi [[wikt:en:ignosceret|ignosceret]] suaeque vitae [[wikt:en:consuleret|consuleret]],
**使節たちが彼<small>〔カエサル〕</small>のもとへ、自分たちを容赦して生命を助けるように嘆願するために、やって来たときに、
*ut celeritate reliquas res [[wikt:en:conficeret|conficeret]], [[wikt:en:qui#Determiner|qua]] [[wikt:en:pleraque#Latin|pleraque]] erat [[wikt:en:consecutus#Latin|consecutus]],
**<small>(カエサルは)</small>多くのことを実行してきた迅速さによって、ほかの事を成し遂げるために、
*arma [[wikt:en:conferri|conferri]],
**武具が運び集められること、
*[[wikt:en:quus#Latin|equos]] [[wikt:en:produci#Verb_2|produci]],
**馬匹が引き渡されること、
*obsides [[wikt:en:dari#Latin|dari]] [[wikt:en:iubet#Latin|iubet]].
**人質が供出されること、を命じる。
:
*<!--❹--><sup>(4)</sup> Parte iam obsidum [[wikt:en:traditus#Participle|tradita]],
**すでに人質の一部が移送されて、
*cum [[wikt:en:reliqua#Latin|reliqua]] [[wikt:en:administrarentur|administrarentur]],
**残り<small>(の人質たち)</small>が処置されていたときに、
*[[wikt:en:centurio#Latin|centurionibus]] et paucis [[wikt:en:miles#Latin|militibus]] [[wikt:en:intromissus#Latin|intromissis]], qui arma [[wikt:en:iumentum#Latin|iumenta]]<nowiki>que</nowiki> [[wikt:en:conquirerent|conquirerent]],
**<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby>たちや若干の兵士たちが、武器や[[w:使役動物|役畜]]を探し集めるべく<small>(城塞都市の中に)</small>送り込まれていたのだが、
*[[wikt:en:equitatus#Noun|equitatus]] hostium procul [[wikt:en:visus#Latin|visus]] est, qui [[wikt:en:agmen#Latin|agmen]] [[wikt:en:Vercingetorix#Latin|Vercingetorigis]] [[wikt:en:antecesserat|antecesserat]].
**ウェルキンゲトリークスの隊列に先行していた敵の[[w:騎兵|騎兵隊]]が遠くに望見された。
:
; ウェルキンゲトリークスの来援に気づいた城塞の者たちが、籠城に転じる
*<!--❺--><sup>(5)</sup> Quem [[wikt:en:simulatque|simulatque]] [[wikt:en:oppidanus#Noun|oppidani]] [[wikt:en:conspexerunt|conspexerunt]] atque in [[wikt:en:spes#Latin|spem]] [[wikt:en:auxilium#Latin|auxilii]] [[wikt:en:venerunt|venerunt]],
**それ<small></small>を城塞都市の者たちが視認して、救援の希望を抱くや否や、
*[[wikt:en:clamor#Latin|clamore]] [[wikt:en:sublatus#Etymology_1|sublato]]
**雄叫びを上げて、
*arma capere,
**武具を取ること、
*portas [[wikt:en:claudere#Etymology_1|claudere]],
**城門を閉じること、
*[[wikt:en:murus#Latin|murum]] [[wikt:en:complere|complere]] [[wikt:en:coeperunt|coeperunt]].
**城壁を<small>(兵で)</small>満たすこと、を始めた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:sublato は [[wikt:en:tollo|tollo]] の分詞)</span>
: <!-- [[wikt:en:| -->
; 城塞民たちの心変わりに感づいたローマ人の将兵たちが城外に撤収する
*<!--❻--><sup>(6)</sup> [[wikt:en:centurio#Latin|Centuriones]] in oppido,
**城塞都市の中の<small>(カエサルの配下の)</small>百人隊長たちは、
*cum ex [[wikt:en:significatio#Latin|significatione]] Gallorum [[wikt:en:novus#Latin|novi]] [[wikt:en:aliquis#Latin|aliquid]] ab iis [[wikt:en:iniri#Latin|iniri]] consilii [[wikt:en:intellexissent|intellexissent]],
**ガッリア人たちの兆候から、彼らによる何らかの新たな謀りごとが始められていると察知していたので、
*[[wikt:en:gladius#Latin|gladiis]] [[wikt:en:destrictus#Latin|destrictis]]
**<ruby><rb>[[w:グラディウス (武器)|長剣]]</rb><rp>(</rp><rt>グラディウス</rt><rp>)</rp></ruby> を抜いて、
*portas [[wikt:en:occupaverunt|occupaverunt]]
**城門を占拠して、
*suosque omnes [[wikt:en:incolumis#Latin|incolumes]] [[wikt:en:receperunt|receperunt]].
**配下たち皆を無傷なままで退却させた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===13節===
*<span style="background-color:#ffd;">[[/注解/13節]] {{進捗|00%|2026-02-15}}</span>
[[画像:Caesar's_campaign_to_Noviodunum_in_52BC.png|thumb|right|250px|ノウィオドゥーヌムに至るカエサルの進路(青線)および[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の進路(赤線)。青字名は親ローマ部族、赤字名は反ローマ部族。カエサルはアゲディンクムを発してからウェッラウノドゥーヌム、ケナブム、ノウィオドゥーヌムを続けて降し、ボイイー族のゴルゴビナ攻略を諦めたウェルキンゲトリークスもノウィオドゥーヌム来援に駆けつけて来た。ここに、初めて両軍が騎兵戦で激突することになった。]]
;同盟軍の騎兵を撃退、城塞都市を再び降して、アウァーリクム攻めに向かう
:
; カエサルが、騎兵戦の切り札としてゲルマーニア騎兵を繰り出す
*<!--❶--><sup>(1)</sup> Caesar ex castris [[wikt:en:equitatus#Latin|equitatum]] [[wikt:en:educi#Latin|educi]] [[wikt:en:iubet#Latin|iubet]],
**カエサルは、陣営から[[w:騎兵|騎兵隊]]を進発させることを命じて、
*<u>[[wikt:en:proelium#Latin|proelium]]</u> [[wikt:en:equester#Latin|equestre]] [[wikt:en:committit|committit]];
**<small>(ウェルキンゲトリークス勢と)</small>騎兵戦を交える。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> α系写本では proelium だが、<br> β系写本では proelium<u>que</u> となっている。)</span>
*[[wikt:en:laborans#Latin|laborantibus]] iam suis
**配下の者たちがすでに苦戦していたときに、
*[[wikt:en:Germanus#Adjective|Germanos]] [[wikt:en:eques#Latin|equites]] circiter CCCC([[wikt:en:quadringentos|quadringentos]]) [[wikt:en:submittit|submittit]],
**<small>(カエサルは)</small>[[w:ゲルマニア|ゲルマーニア]]人の騎兵たち約400騎を救援に派遣する。
*quos ab [[wikt:en:initium#Latin|initio]] <u>habere [[wikt:en:secum#Latin|secum]]</u> [[wikt:en:instituerat|instituerat]].
**その者らは<small>(戦いの)</small>当初から自分のそばに保持すると決めていたものであった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> χ系・B・M・S写本では habere secum だが、<br> β系・L・N写本では secum habere となっている。)</span>
:
; ゲルマーニア騎兵が、ウェルキンゲトリークス配下の騎兵を一蹴する
*<!--❷--><sup>(2)</sup> Eorum [[wikt:en:impetus#Latin|impetum]] [[wikt:en:Galli#Latin|Galli]] [[wikt:en:sustineo#Latin|sustinere]] non [[wikt:en:potuerunt|potuerunt]]
**彼ら<small>〔ゲルマーニア人騎兵〕</small>の突撃に<small>(敵側の)</small>ガッリア人たちは持ちこたえることができず、
*atque in fugam [[wikt:en:coniectus#Participle|coniecti]]
**敗走に追いやられて、
*multis [[wikt:en:amissus#Latin|amissis]]
**大勢の者を失い、
*se ad [[wikt:en:agmen#Latin|agmen]] [[wikt:en:receperunt|receperunt]].
**<small>(後方にいたウェルキンゲトリークスの)</small>隊列に退却した。
:
; 城塞都市ノウィオドゥーヌムがカエサルの軍門に降る
*Quibus [[wikt:en:profligatus#Latin|profligatis]],
**彼ら<small>〔ウェルキンゲトリークスの騎兵隊〕</small>が制圧されると、
*rursus [[wikt:en:oppidanus#Noun|oppidani]] [[wikt:en:perterritus#Latin|perterriti]]
**[[w:オッピドゥム|城塞都市]]<small>〔ノウィオドゥーヌム〕</small>の者たちは再び怖れをなして、
*[[wikt:en:comprehensus#Latin|comprehensos]] eos, quorum [[wikt:en:opera#Latin|opera]] [[wikt:en:plebs#Latin|plebem]] [[wikt:en:concitatus#Latin|concitatam]] [[wikt:en:existimabant|existimabant]],
**その働きかけによって民衆を扇動したと<small>(城塞の民が)</small>考えていたところの者たちを拘束して、
*ad Caesarem [[wikt:en:perduxerunt|perduxerunt]]
**カエサルのもとへ連行して、
*seseque ei [[wikt:en:dediderunt|dediderunt]].
**自分たちも彼<small>〔カエサル〕</small>に降伏した。
: <!-- [[wikt:en:| -->
; カエサルが、ビトゥリゲース族の城塞都市アウァーリクムを目指す
*<!--❸--><sup>(3)</sup> Quibus rebus [[wikt:en:confectus#Latin|confectis]],
**それらの事が成し遂げられると、
*Caesar ad oppidum [[wikt:en:Avaricum#Latin|Avaricum]],
**カエサルは、[[w:オッピドゥム|城塞都市]]アウァーリクムへ、
*quod erat [[wikt:en:maximus#Latin|maximum]] [[wikt:en:munitissimus#Latin|munitissimum]]<nowiki>que</nowiki> in finibus [[wikt:en:Bituriges#Latin|Biturigum]] atque [[wikt:en:ager#Latin|agri]] [[wikt:en:fertilissimus#Latin|fertilissima]] [[wikt:en:regio#Latin|regione]],
**──それはビトゥリゲース族の領土で耕地の最も肥沃な地方にあり、最大かつ最も要塞化されていたが、──
*[[wikt:en:profectus#Etymology_3|profectus]] est,
**<small>(そこへ)</small>出発した。
*quod eo oppido [[wikt:en:receptus#Latin|recepto]]
**──というのは、その城塞都市を獲得することで、
*[[wikt:en:civitas#Latin|civitatem]] [[wikt:en:Bituriges#Latin|Biturigum]] se in [[wikt:en:potestas#Latin|potestatem]] [[wikt:en:redacturus#Latin|redacturum]] [[wikt:en:confidebat|confidebat]].
**ビトゥリゲースの部族国家を<small>(カエサルの)</small>隷下に引き戻すであろうと、確信していたからである──。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
==アウァーリクム攻略戦==
===14節===
*<span style="background-color:#ffd;">[[/注解/14節]] {{進捗|00%|2026-03-08}}</span>
;ウェルキンゲトリークスが兵站妨害と焦土戦術を決断
:
*<!--❶--><sup>(1)</sup> [[wikt:en:Vercingetorix#Latin|Vercingetorix]] tot [[wikt:en:continuus#Latin|continuis]] [[wikt:en:incommodum#Latin|incommodis]] [[wikt:en:Vellaunodunum#Latin|Vellaunoduni]], [[wikt:en:Genabum#Latin|Cenabi]], [[wikt:en:Noviodunum#Latin|Novioduni]] [[wikt:en:acceptus#Latin|acceptis]]
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、ウェッラウノドゥーヌム、ケナブム、ノウィオドゥーヌムと、このような多くの引き続く敗北をこうむると、
*suos ad [[wikt:en:concilium#Latin|concilium]] [[wikt:en:convocat#Latin|convocat]].
**麾下の者たちを会合へ召集する。
: <!-- [[wikt:en:| -->
; ウェルキンゲトリークスが、ローマ勢の糧道を断つことを提言
*<!--❷--><sup>(2)</sup> [[wikt:en:docet|Docet]] longe alia ratione esse bellum [[wikt:en:gerendus#Latin|gerendum]] atque antea [[wikt:en:gestus#Participle|gestum]] sit.
**以前に遂行されていたのとはまったく別の作戦で戦争が遂行されるべきである、と説く。
*Omnibus [[wikt:en:modus#Latin|modis]] huic rei studendum, ut [[wikt:en:pabulatio#Latin|pabulatione]] et [[wikt:en:commeatus#Noun|commeatu]] Romani [[wikt:en:prohibeantur|prohibeantur]].
**ローマ人たちが[[w:糧秣|糧秣]]徴発と物資輸送を妨げられるべく、この事をあらゆる方法で追求するべきだ。
:
*<!--❸--><sup>(3)</sup> Id esse facile,
**そのことは、容易である。
*quod [[wikt:en:equitatus#Latin|equitatu]] ipsi [[wikt:en:abundent#Latin|abundent]]
**というのは<small>(我々ガッリア勢)</small>自身は[[w:騎兵|騎兵隊]]がたくさんおり、
*et quod anni tempore [[wikt:en:subleventur|subleventur]].
**<small>(冬という)</small>時季に支えられているのだから。
:
; ローマ人が穀物倉に群がるところを騎兵で襲撃するべし
*<!--❹--><sup>(4)</sup> [[wikt:en:pabulum#Latin|Pabulum]] [[wikt:en:secari|secari]] non posse;
**<small>(この時季には)</small><ruby><rb>[[w:秣|秣]]</rb><rp>(</rp><rt>まぐさ</rt><rp>)</rp></ruby> は刈り取られることができない。
*[[wikt:en:necessario#Adverb|necessario]] [[wikt:en:dispersus#Latin|dispersos]] hostes ex [[wikt:en:aedificium#Latin|aedificiis]] [[wikt:en:petere|petere]];
**敵たち<small>〔ローマ勢〕</small>はやむなく分散して、家屋から<small>(糧秣を)</small>求める。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ほとんどの会話が間接話法を採る本書で、<br> ローマ勢が「敵」hostes と表現されることは極めてまれである。)</span>
*hos omnes [[wikt:en:cotidie#Latin|cotidie]] ab [[wikt:en:eques#Latin|equitibus]] <u>deleri</u> posse.
**これら皆を日々に<small>(ガッリア側の)</small>騎兵隊によって壊滅させることができる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系写本では [[wikt:en:deleri|deleri]]「滅ぼされる」だが、<br> α系写本では [[wikt:en:diligi#Latin|diligi]]「分断される」となっている。)</span>
:
; 焦土戦術をもって、ローマ人と軍馬を飢えさせるべし
*<!--❺--><sup>(5)</sup> Praeterea [[wikt:en:salus#Latin|salutis]] causa rei [[wikt:en:familiaris#Adjective|familiaris]] [[wikt:en:commodum#Latin|commoda]] [[wikt:en:neglegendus#Latin|neglegenda]];
**さらに<small>(同盟諸部族に共通の)</small>安全のために、私有資産の利益はなおざりにされるべきだ。
*[[wikt:en:vicus#Latin|vicos]] atque [[wikt:en:aedificium#Latin|aedificia]] [[wikt:en:incendi#Verb_2|incendi]] [[wikt:en:oportet#Latin|oportere]]
**<small>(以下のような領域の)</small>村々や建物は焼かれるべきだ。
*hoc spatio ab Boia quoque versus, quo [[wikt:en:pabulandi#Verb|pabulandi]] causa [[wikt:en:adire#Latin|adire]] posse [[wikt:en:videantur|videantur]].
**[[w:ボイイ族|ボイイー族]]のところから四方八方へ糧秣徴発するために赴くことができると思われる領域では。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:主要写本ω にある ab Boia「ボイイー族のところから」は、<br> 現代では「街道から」ab via と修正読みされることが多い。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:quoque#Latin|quōque]] [[wikt:en:versus#Adverb|versus]] = [[wikt:en:quisque#Latin|quōquō]] versus「あらゆる方向へ」)</span>
[[画像:Eglise_saint_parize_le_chatel.jpg|thumb|right|250px|ボイイ族(Boii)の領内であったと思われる現在のサン=パリーズ=ル=シャテルの教会。ボイイー族の首邑ゴルゴビナは、[[w:ニエーヴル県|ニエーヴル県]]のサン=パリーズ=ル=シャテル([[w:en:Saint-Parize-le-Châtel|Saint-Parize-le-Châtel]])あるいは[[w:シェール県|シェール県]]のラ・ゲルシュ=スュル=ローボワ([[w:en:La Guerche-sur-l'Aubois|La Guerche-sur-l'Aubois]])の近辺にあったと推定されている。]]
:
*<!--❻--><sup>(6)</sup> Harum ipsis rerum copiam [[wikt:en:suppeto#Latin|suppetere]],
**<small>(ガッリア勢)</small>自身には、これらの物は、豊富に貯えてある。
*quod quorum in finibus bellum [[wikt:en:geratur|geratur]], eorum [[wikt:en:ops#Noun_4|opibus]] [[wikt:en:subleventur|subleventur]];
**──というのは、戦争が遂行される領土内の者たちの、彼らの助力に支えられているからだ。──
:
*<!--❼--><sup>(7)</sup> Romanos <u>aut</u> [[wikt:en:inopia#Latin|inopiam]] non [[wikt:en:laturus#Latin|laturos]] <span style="color:#009900;">(esse)</span>
**ローマ人たちは、あるいは<small>(糧食の)</small>欠乏に耐えられないであろうし、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:aut#Latin|aut]] ~ aut …「あるいは~あるいは…」)</span>
*<u>aut</u> magno <u>cum</u> periculo longius <u>ab</u> castris [[wikt:en:processurus#Latin|processuros]] <span style="color:#009900;">(esse)</span>;
**あるいは大きな危険とともに陣営からより遠くに進み出るであろう。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:cum は、ρ系写本・写本Tの記述で、<br> α系写本・写本Vにはない。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ab は、α系・ρ系写本・写本Vの記述で、写本Tでは a となっている。)</span>
:
*<!--❽--><sup>(8)</sup> neque [[wikt:en:interesse#Latin|interesse]], ipsos<u>ne</u> [[wikt:en:interficiant|interficiant]], [[wikt:en:impedimentum#Latin|impedimentis]]<u><nowiki>ne</nowiki></u> [[wikt:en:exuant|exuant]],
**<small>(ローマ人の)</small>当人たちを殺戮するか、輜重を奪い取るか、<small>(どちらであろうが)</small>違いはない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:-ne#Latin|-ne]] は疑問小辞。~ -ne, … -ne 「~か、…か」)</span>
*quibus [[wikt:en:amissus#Latin|amissis]] bellum [[wikt:en:geri#Latin|geri]] non [[wikt:en:possit|possit]].
**それら<small>〔輜重〕</small>を失えば、戦争を遂行することができないのだから。
:
*<!--❾--><sup>(9)</sup> Praeterea oppida [[wikt:en:incendi#Verb_2|incendi]] [[wikt:en:oportet#Latin|oportere]],
**さらに、<small>(以下のような)</small>[[w:オッピドゥム|城塞都市]]は焼かれなければならない。
*quae non [[wikt:en:munitio#Latin|munitione]] et loci natura <u>ab omni</u> sint <u>periculo</u> [[wikt:en:tutus#Latin|tuta]],
**防塁や地勢によってあらゆる危険から守られていない<small>(城塞都市は)</small>。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ab [[wikt:en:omni#Latin|omni]] [[wikt:en:periculum#Latin|periculo]] 「あらゆる危険から」)</span>
*<u>neu</u> suis sint ad <u>detrectandam</u> [[wikt:en:militia#Latin|militiam]] [[wikt:en:receptaculum#Latin|receptacula]]
**麾下の者たちにとっては<small>(城塞都市が)</small>[[w:兵役逃れ|兵役を忌避すること]]のための隠れ場所になることがないように、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:neu#Latin|neu]] は α系写本の記述で、β系写本では [[wikt:en:ne#Latin|ne]] となっている。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:detrectandam|detrectandam]] は α系・ρ系写本の表記で、π系写本では [[wikt:en:detractandam|detractandam]] となっている。)</span>
*neu [[wikt:en:Romani#Latin|Romanis]] [[wikt:en:propositus#Latin|proposita]] ad [[wikt:en:copia#Latin|copiam]] [[wikt:en:commeatus#Noun|commeatus]] [[wikt:en:praeda#Latin|praedam]]<nowiki>que</nowiki> [[wikt:en:tollendus#Latin|tollendam]],
**ローマ人たちにとって<small>(城塞都市が)</small>豊富な物資や戦利品を奪うための置き場所ともならないように。
:
*<!--❿--><sup>(10)</sup> Haec si [[wikt:en:gravis#Latin|gravia]] aut [[wikt:en:acerbus#Latin|acerba]] [[wikt:en:videantur|videantur]],
**もし、これら<small>(の作戦)</small>が厳しい、または苦しいと見えるとしても、
*multo illa [[wikt:en:graviter#Latin|gravius]] <u>aestimare</u>, [[wikt:en:liber#Noun_6|liberos]], [[wikt:en:coniunx#Latin|coniuges]] in [[wikt:en:servitus#Latin|servitutem]] [[wikt:en:abstrahi|abstrahi]], ipsos [[wikt:en:interfici|interfici]];
**それより、子供や配偶者たちが奴隷状態で連れ去られ、自身が殺されることの方が、はるかに厳しいと判断されるべきだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:aestimare|aestimare]] だが、 <br> β系写本では [[wikt:en:aestimari|aestimari]] [[wikt:en:debere|debere]] となっている。)</span>
*quae sit [[wikt:en:necesse#Latin|necesse]] [[wikt:en:accido#Etymology_1|accidere]] [[wikt:en:victus#Participle|victis]].
**それらのことは、打ち負かされた者たちには、起こることが必然なのである。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===15節===
[[画像:Bourges_-_002_-_Low_Res.jpg|thumb|right|300px|'''アウァーリクム'''(Avaricum)すなわちビトゥリゲース族(Bituriges)の名を残すともいわれる現在の[[w:ブールジュ|ブールジュ]](Bourges)の[[w:サン=テチエンヌ大聖堂 (ブールジュ)|サン=テティエンヌ大聖堂]]([[w:世界遺産|世界遺産]])。この街はガッリア時代からこの地方の中心的な城塞都市であり、現代ではそれほど大都会ではないが、世界遺産の大聖堂や音楽祭などで広く知られている。]]
[[画像:Bourges.JPG|thumb|right|300px|アウァーリクムすなわち[[w:ブールジュ|ブールジュ]]の大聖堂から眺めた街並み。'''ビトゥリゲース族'''はかつてはイタリア北部に移住したこともある強大な部族で、この当時はブルディガラ(Burdigala:現在の[[w:ボルドー|ボルドー]])周辺にいたビトゥリゲース・ウィウィスキ族(Bituriges Vivisci)およびアウァーリクム周辺にいた'''ビトゥリゲース・クビ族'''(Bituriges Cubi)の二派に分かれていた。『ガリア戦記』に登場するのはビトゥリゲース・クビ族の方である。]]
*<span style="background-color:#ffd;">[[/注解/15節]] {{進捗|00%|2026-03-08}}</span>
;焦土戦術開始、しかしアウァーリクムの防衛を決定
:
; 焦土戦術として、ビトゥリゲース族の街々が焼かれる
*<!--❶--><sup>(1)</sup> Omnium [[wikt:en:consensus#Latin|consensu]]
**<small>(会合の参加者)</small>全員の合意により
*hac [[wikt:en:sententia#Latin|sententia]] [[wikt:en:probatus#Latin|probata]],
**<small>(ウェルキンゲトリークスの)</small>この意向が承認されると、
*uno die [[wikt:en:amplius|amplius]] [[wikt:en:viginti|viginti]]<sub> (XX)</sub> [[wikt:en:urbs#Latin|urbes]] [[wikt:en:Bituriges#Latin|Biturigum]] [[wikt:en:incenduntur|incenduntur]].
**一日で、20より多いビトゥリゲース族の街々が焼かれる。
:
; ほかの諸部族の街々も焼かれる
*<!--❷--><sup>(2)</sup> Hoc idem fit in reliquis [[wikt:en:civitas#Latin|civitatibus]]:
**これと同じことが、ほかの諸部族でも行なわれて、
*in omnibus partibus
**あらゆる方面において、
*[[wikt:en:incendium#Latin|incendia]] [[wikt:en:conspiciuntur|conspiciuntur]];
**炎上が望見される。
*quae <u>etsi</u> magno cum [[wikt:en:dolor#Latin|dolore]] omnes [[wikt:en:ferebant|ferebant]],
**それらの皆が大きな悲嘆とともに耐えていたとしても、
*<u>tamen</u> hoc sibi [[wikt:en:solacium#Latin|solacii]] [[wikt:en:proponebant|proponebant]],
**しかし、自分らにとっての<small>(以下の)</small>慰めを抱いていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:etsi#Latin|etsi]] ~ [[wikt:en:tamen#Latin|tamen]] …<br> 「~としても、にもかかわらず…」)</span>
*quod se prope [[wikt:en:exploratus#Latin|explorata]] [[wikt:en:victoria#Latin|victoria]]
**勝利はほぼ確実なものとされて、
*celeriter [[wikt:en:amissus#Latin|amissa]] [[wikt:en:reciperaturus#Latin|reciperaturos]] <span style="color:#009900;">(esse)</span>
**失ったものを速やかに回復するであろう、
*[[wikt:en:confidebant|confidebant]].
**と確信していたことである。
:
; アウァーリクムは、焦土戦術か、それとも防衛すべきか?
*<!--❸--><sup>(3)</sup> [[wikt:en:deliberatur|Deliberatur]] de [[wikt:en:Avaricum#Latin|Avarico]] in [[wikt:en:communis#Latin|communi]] [[wikt:en:concilium#Latin|concilio]], [[wikt:en:incendi#Latin|incendi]] <u>placeret</u> an [[wikt:en:defendi#Latin|defendi]].
**合同の会合において、アウァーリクムについて (も) 焼き討ちが良いか、あるいは防衛か、が吟味される。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:placeret|placeret]]<sub> (接続法・未完了過去)</sub> だが、<br> β系写本では [[wikt:en:placeat|placeat]]<sub> (接続法・現在)</sub> となっている。)</span>
:
; ビトゥリゲース族が、要害であるアウァーリクムの防衛を懇願する
*<!--❹--><sup>(4)</sup> [[wikt:en:procumbunt|Procumbunt]] omnibus Gallis ad pedes [[wikt:en:Bituriges#Latin|Bituriges]],
**<small>(会合に参加していた)</small>すべてのガッリア人の足元へ、ビトゥリゲース族の者たちはひれ伏す。
*ne [[wikt:en:pulcherrimus#Latin|pulcherrimam]] prope <u>[[wikt:en:totus#Latin|totius]] Galliae</u> [[wikt:en:urbs#Latin|urbem]], quae <u>et</u> [[wikt:en:praesidium#Latin|praesidio]] et [[wikt:en:ornamentum#Latin|ornamento]] sit [[wikt:en:civitas#Latin|civitati]],
**ほぼ全ガッリアの街々で最も美しいもの、部族にとっては要害でも誉れでもあるものを、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:totius Galliae は α系写本の語順で、β系写本では Galliae totius となっている。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et は β系写本にはあるが、α系写本にはない。)</span>
*suis manibus [[wikt:en:succendo#Latin|succendere]] [[wikt:en:cogerentur|cogerentur]];
**自分たちの手で燃やすことを強いられないように、と(懇願した)。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ne ~ cogerentur;~を強いられないように)</span>
:
; アウァーリクムの地の利
*<!--❺--><sup>(5)</sup> facile se loci natura [[wikt:en:defensurus#Latin|defensuros]] [[wikt:en:dicunt|dicunt]],
**自分たちは<small>(アウァーリクムを)</small>地勢によって容易に防衛するだろう、と述べる。
*quod prope ex omnibus partibus [[wikt:en:flumen#Latin|flumine]] et [[wikt:en:palus#Latin|palude]] [[wikt:en:circumdatus#Latin|circumdata]]
**というのは<small>(アウァーリクムは)</small>ほぼあらゆる方向から川や沼地で囲まれており、
*unum habeat et [[wikt:en:perangustus#Latin|perangustum]] [[wikt:en:aditus#Latin|aditum]].
**一つだけ、非常に狭い進入路を持っているからだ。
[[画像:Bourges_2.JPG|thumb|right|300px|アウァーリクムすなわち[[w:ブールジュ|ブールジュ]]の大聖堂から眺めた沼地。イェーヴル川([[w:fr:Yèvre (Cher)|fr:Yèvre]])と沼地は、カエサルが書いたようにガッリア時代からこの街を囲んでいる。]]
:
; アウァーリクムの防衛が認められる
*<!--❻--><sup>(6)</sup> [[wikt:en:datur#Latin|Datur]] [[wikt:en:petens#Latin|petentibus]] [[wikt:en:venia#Latin|venia]]
**<small>(アウァーリクムの防衛を)</small>求める者たちに許可が与えられる。
*[[wikt:en:dissuadens#Latin|dissuadente]] primo [[wikt:en:Vercingetorix#Latin|Vercingetorige]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は当初は思い止まらせていたが、
*post [[wikt:en:concedens#Latin|concedente]] et [[wikt:en:prex#Latin|precibus]] ipsorum et [[wikt:en:misericordia#Latin|misericordia]] [[wikt:en:vulgus#Latin|vulgi]].
**後には、彼ら当人の懇願にも、民衆への哀れみにも、譲歩した。
*[[wikt:en:defensor#Latin|Defensores]] [[wikt:en:oppidum#Latin|oppido]] [[wikt:en:idoneus#Latin|idonei]] [[wikt:en:deliguntur|deliguntur]].
**城塞都市の適切な防衛者たちが選ばれる。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===16節===
*<span style="background-color:#ffd;">[[/注解/16節]] {{進捗|00%|2026-03-22}}</span>
;アウァーリクムをめぐる両軍の駆け引き
:
; ウェルキンゲトリークスが、アウァーリクムから16マイル離れたところに宿営する
*<!--❶--><sup>(1)</sup> [[wikt:en:Vercingetorix#Latin|Vercingetorix]] [[wikt:en:minor#Latin|minoribus]] Caesarem [[wikt:en:iter#Latin|itineribus]] [[wikt:en:subsequitur|subsequitur]]
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、カエサルを緩やかな行軍で追尾して、
*et locum [[wikt:en:castra#Latin|castris]] [[wikt:en:eligit#Latin|deligit]] [[wikt:en:palus#Latin|paludibus]] [[wikt:en:silva#Latin|silvis]]<nowiki>que</nowiki> [[wikt:en:munitus#Latin|munitum]]
**沼地や森林で防御された地点を陣営のために選んだ。
*ab [[wikt:en:Avaricum#Latin|Avarico]] longe milia passuum [[wikt:en:sedecim#Latin|sedecim]]<sub> (XVI)</sub>.
**アウァーリクムから16<u>ローママイル</u>隔たっていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ミーッレ・パッスーム、ミーリア(ローママイル)|ローママイル]]は約1.48 kmで、16マイルは約24 km)</span>
:
; ウェルキンゲトリークスが、斥候を放ってアウァーリクムを探り、部下たちに指図する
*<!--❷--><sup>(2)</sup> Ibi per [[wikt:en:certus#Latin|certos]] [[wikt:en:explorator#Latin|exploratores]]
**そこで、一定の斥候たちを通して、
*in [[wikt:en:singulus#Latin|singula]] diei tempora, quae ad [[wikt:en:Avaricum#Latin|Avaricum]] <u>agerentur</u>, [[wikt:en:cognoscebat|cognoscebat]]
**日中の毎時、アウァーリクム近傍で行なわれていることを探知して、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:agerentur|agerentur]] だが、<br> β系写本では [[wikt:en:gererentur|gererentur]] となっている。)</span>
*et, [[wikt:en:quis#Latin|quid]] [[wikt:en:fieri#Latin|fieri]] [[wikt:en:vellet#Latin|vellet]], [[wikt:en:imperabat|imperabat]].
**<small>(彼自身が)</small>なされることを欲していることを<small>(麾下の者たちに)</small>命令していた。
:
; ウェルキンゲトリークスとローマ勢の糧秣調達をめぐる攻防
*<!--❸--><sup>(3)</sup> Omnes nostras [[wikt:en:pabulatio#Latin|pabulationes]] [[wikt:en:frumentatio#Latin|frumentationes]]<nowiki>que</nowiki> [[wikt:en:observabat|observabat]]
**我が方<small>〔ローマ勢〕</small>の[[w:糧秣|秣や糧食]]の徴発の一部始終を注視していて、
*[[wikt:en:dispersus#Latin|dispersos]]<nowiki>que</nowiki>, cum longius necessario [[wikt:en:procederent|procederent]], [[wikt:en:adoriebatur|adoriebatur]]
**<small>(ローマ勢が)</small>分散して、やむを得ずにはるか遠くに進み出たときに、<small>(ガッリア勢が)</small>襲いかかって、
*[[wikt:en:magnus#Latin|magno]]<nowiki>que</nowiki> [[wikt:en:incommodum#Latin|incommodo]] [[wikt:en:adficiebat|adficiebat]],
**<small>(ローマ勢に)</small>大きな損害を与えていた。
*[[wikt:en:etsi#Latin|etsi]], quantum [[wikt:en:ratio#Latin|ratione]] [[wikt:en:provideri|provideri]] [[wikt:en:poterat|poterat]], ab nostris [[wikt:en:occurrebatur|occurrebatur]],
**とはいえ、できるかぎり用心する判断により<small>(敵の襲撃を)</small>我が方<small>〔ローマ勢〕</small>によって阻止していた。
*ut [[wikt:en:incertus#Latin|incertis]] temporibus [[wikt:en:diversus#Latin|diversis]]<nowiki>que</nowiki> itineribus [[wikt:en:iretur|iretur]].
**不確定な時間帯にまったく別々の道を行き来するというように。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===17節===
[[画像:Carte_du_Cher.svg|thumb|right|250px|アウァーリクム、すなわち現在の[[w:ブールジュ|ブールジュ市]](Bourges)のあるフランス・[[w:シェール県|シェール県]]の地図。中心にブールジュがあり、右下(南東)のラ・ゲルシュ=スュル=ローボワ([[w:en:La Guerche-sur-l'Aubois|La Guerche-sur-l'Aubois]])の近辺にボイイー族の首邑ゴルゴビナ(Gorgobina)があったと推定されている。右(東)隣の[[w:ニエーヴル県|ニエーヴル県]](Nièvre)が[[w:ハエドゥイ族|ハエドゥイー族]]の版図であった。]]
*<span style="background-color:#ffd;">[[/注解/17節]] {{進捗|00%|2026-03-28}}</span>
;アウァーリクム攻囲に取りかかるローマ軍の糧秣欠乏
:
; カエサルが、アウァーリクム攻囲のための堡塁工事に着手
*<!--❶--><sup>(1)</sup> [[wikt:en:castra#Latin|Castris]] ad eam partem [[wikt:en:oppidum#Latin|oppidi]] [[wikt:en:positus#Participle|positis]] Caesar,
**カエサルは、[[w:オッピドゥム|城塞都市]]の<small>(以下に述べるような)</small>方面に陣営を設置して、
*quae [[wikt:en:intermissus#Latin|intermissa]] a flumine et a <u>paludibus</u>
**──<small>(その方面は)</small>川や沼地により<small>(外部から)</small>遮断されて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:paludibus|paludibus]] だが、<br> β系写本では [[wikt:en:palude#Latin|palude]] となっている。)</span>
*[[wikt:en:aditus#Noun_3|aditum]], ut supra [[wikt:en:diximus#Latin|diximus]], [[wikt:en:angustus#Latin|angustum]] [[wikt:en:habebat|habebat]],
**<u>前に述べたように</u>、狭い進入路を持っているというものであるが、──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#15節|15節]]⑤項では、<br> ほぼあらゆる方向から川や沼地で囲まれており、<br> 一つだけ、非常に狭い進入路を持っている、<br> と言及された。)</span>
*[[wikt:en:agger#Latin|aggerem]] [[wikt:en:apparare#Latin|apparare]],
**<small>(さらに)</small><ruby><rb>[[w:土塁|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby> を装備すること、
*[[wikt:en:vinea#Latin|vineas]] [[wikt:en:ago#Latin|agere]],
**<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby> を駆動すること、
*[[wikt:en:turris#Latin|turres]] duas [[wikt:en:constituo#Latin|constituere]] [[wikt:en:coepit|coepit]];
**2つの<ruby><rb>[[w:攻城塔|攻城櫓]]</rb><rp>(</rp><rt>トゥッリス</rt><rp>)</rp></ruby> を建てること、を始めた。
*nam [[wikt:en:circumvallo#Latin|circumvallare]] loci natura [[wikt:en:prohibebat|prohibebat]].
**なぜなら<small>(城塞都市を)</small>堡塁で囲むことを地勢が妨げていたからだ。
<div style="text-align:center;">
{|
|-
|[[画像:Caesar's Gallic war; (Allen and Greenough's ed.) (1898) (14781415375).jpg|thumb|right|350px|城壁(図中の左端)を攻略するために築かれた<ruby><rb>土塁</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby> の復元画([[ガリア戦記_第2巻#12節|第2巻12節]]で既出)。左上には、両軍の<ruby><rb>[[w:攻城塔|攻城櫓]]</rb><rp>(</rp><rt>トゥッリス</rt><rp>)</rp></ruby>が描かれている。]]
|[[画像:Bender - Vinea.JPG|thumb|right|350px|<ruby><rb>工作小屋</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby> [[wikt:en:vinea|vinea]] の復元画([[ガリア戦記_第2巻#12節|第2巻12節]]で既出)。敵の矢玉などから身を守りながら城壁に近づくために用いられたと考えられている。]]
|}
</div>
:
; カエサルが、同盟者であるボイイー族やハエドゥイー族に、糧秣徴発を促す
*<!--❷--><sup>(2)</sup> De re [[wikt:en:frumentarius#Adjective|frumentaria]]
**<small>(カエサルは)</small>[[w:糧秣|糧秣]]調達について、
*[[wikt:en:Boii#Latin|Boios]] atque [[wikt:en:Haedui#Latin|Haeduos]] [[wikt:en:adhortari|adhortari]] non [[wikt:en:destitit|destitit]];
**[[w:ボイイ族|ボイイー族]]や[[w:ハエドゥイ族|ハエドゥイー族]]を鼓舞することを止めなかった。
*quorum [[wikt:en:alter#Latin|alteri]], quod [[wikt:en:nullus#Determiner|nullo]] [[wikt:en:studium#Latin|studio]] [[wikt:en:agebant|agebant]], non multum [[wikt:en:adiuvabant|adiuvabant]],
**彼らのうち一方<small>〔ハエドゥイー族〕</small>は、何らの努力を行なわなかったので、あまり助けにならなかった。
*[[wikt:en:alter#Latin|alteri]] non magnis [[wikt:en:facultas#Latin|facultatibus]], quod [[wikt:en:civitas#Latin|civitas]] erat [[wikt:en:exiguus#Latin|exigua]] et [[wikt:en:infirmus#Latin|infirma]],
**他方<small>〔ボイイー族〕</small>は、貧弱かつ無力な部族であったので、大した貯えもなく、
*celeriter quod [[wikt:en:habuerunt|habuerunt]] [[wikt:en:consumpserunt|consumpserunt]].
**早々と持っていたものを消費し切ってしまった。
:
; 糧秣の欠乏が続くが、ローマの将兵たちが耐え抜く
*<!--❸--><sup>(3)</sup> [[wikt:en:summus#Latin|Summa]] [[wikt:en:difficultas#Latin|difficultate]] rei [[wikt:en:frumentarius#Adjective|frumentariae]] [[wikt:en:adfectus#Latin|adfecto]] [[wikt:en:exercitus#Noun|exercitu]]
**<small>(ローマ人の)</small>軍隊は糧秣調達の大いなる困難さに苦悩させられながらも、
*[[wikt:en:tenuitas#Latin|tenuitate]] [[wikt:en:Boii#Latin|Boiorum]],
**──<small>(その困難は)</small>ボイイー族の微力さ、
*[[wikt:en:indiligentia#Latin|indiligentia]] [[wikt:en:Haedui#Latin|Haeduorum]],
**ハエドゥイー族の怠慢、
*[[wikt:en:incendium#Latin|incendiis]] [[wikt:en:aedificium#Latin|aedificiorum]],
**<small>(敵勢による)</small>家屋の焼き打ちによるものであったが、──
*usque eo ut [[wikt:en:complures#Determiner|complures]] dies [[wikt:en:frumentum#Latin|frumento]] [[wikt:en:miles#Latin|milites]] [[wikt:en:caruerint|caruerint]]
**かなりの日々にわたって兵士たちは糧食を欠くまでになり、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:usque#Latin|usque]] eo ut ~「~まで」)</span>
*et [[wikt:en:pecus#Latin|pecore]] ex [[wikt:en:longinquior#Latin|longinquioribus]] [[wikt:en:vicus#Latin|vicis]] [[wikt:en:adactus#Latin|adacto]]
**かなり遠方の村々から家畜を駆り立てたので
*[[wikt:en:extremus#Latin|extremam]] [[wikt:en:fames#Latin|famem]] [[wikt:en:sustentarent|sustentarent]],
**極限の飢えに耐え通すまでになったのであるが、
*[[wikt:en:nullus#Determiner|nulla]] tamen <u>vox est ab iis</u> [[wikt:en:auditus#Latin|audita]] populi Romani [[wikt:en:maiestas#Latin|maiestate]] et [[wikt:en:superior#Latin|superioribus]] [[wikt:en:victoria#Latin|victoriis]] [[wikt:en:indignus#Latin|indigna]].
**しかしながら、ローマ人民の威厳やかつての勝利にふさわしからぬ声は、彼らから何ら聞かれなかった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:vox#Latin|vox]] est <u>ab</u> iis だが、<br> β系写本では <u>ex</u> iis vox est となっている。)</span>
:
; ローマ人将兵たちがカエサルに攻囲の継続を訴える
*<!--❹--><sup>(4)</sup> [[wikt:en:quin#Latin|Quin]] etiam Caesar cum in [[wikt:en:opus#Latin|opere]] [[wikt:en:singulus#Latin|singulas]] [[wikt:en:legio#Latin|legiones]] [[wikt:en:appellaret|appellaret]],
**いやそればかりか、カエサルが作業中のそれぞれの[[w:ローマ軍団|軍団]]に呼びかけたとき、
*et, si [[wikt:en:acerbe#Latin|acerbius]] [[wikt:en:inopia#Latin|inopiam]] [[wikt:en:ferrent#Latin|ferrent]], se [[wikt:en:dimissurus#Latin|dimissurum]] <span style="color:#009900;"><sub>(esse)</sub></span> [[wikt:en:oppugnatio#Latin|oppugnationem]] [[wikt:en:diceret|diceret]],
**もし、とても過酷に欠乏に耐えているのならば、自分は攻囲を放棄するであろう、とカエサルが言っていたときに、
:
*<!--❺--><sup>(5)</sup> [[wikt:en:universi#Latin|universi]] ab eo, ne id [[wikt:en:faceret|faceret]], [[wikt:en:petebant|petebant]] :
**<small>(各軍団の)</small>一同は、彼<small>〔カエサル〕</small>に、それ<small>〔攻囲の放棄〕</small>をしないように求めていた。
*sic se complures annos illo [[wikt:en:imperans#Latin|imperante]] [[wikt:en:meruisse|meruisse]],
**自分たちは<small>(以下のように)</small>幾年にもわたって彼<small>〔カエサル〕</small>の麾下で努めてきた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:sic ~ ut …「…のように~である」)</span>
*ut [[wikt:en:nullus#Determiner|nullam]] [[wikt:en:ignominia#Latin|ignominiam]] [[wikt:en:acciperent|acciperent]], <u>nusquam incepta</u> re [[wikt:en:discederent|discederent]]:
**何ら不名誉を蒙ってないし、事<small>〔戦役〕</small>が完遂されないまま<small>(戦列を)</small>離脱することは決してなかったのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:nusquam#Latin|nusquam]] [[wikt:en:inceptus#Latin|incepta]] だが、<br> β系写本では [[wikt:en:numquam#Latin|numquam]] [[wikt:en:infectus#Adjective|infecta]] となっている。)</span>
:
*<!--❻--><sup>(6)</sup> hoc se [[wikt:en:ignominia#Latin|ignominiae]] <u>loco [[wikt:en:laturus#Latin|laturos]]</u> <span style="color:#009900;"><sub>(esse)</sub></span>, si [[wikt:en:inceptus#Latin|inceptam]] [[wikt:en:oppugnatio#Latin|oppugnationem]] [[wikt:en:reliquissent|reliquissent]];
**もし<small>(自分たちが)</small>着手した攻囲を放棄してしまったならば、自分たちはこの状態を不名誉と見なすであろう。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系写本では loco laturos の語順だが、<br> α系写本では laturos loco の語順となっている。)</span>
:
*<!--❼--><sup>(7)</sup> <u>praestare</u> omnes [[wikt:en:perferre|perferre]] [[wikt:en:acerbitas#Latin|acerbitates]],
**あらゆる厳しさに持ちこたえることは<small>(以下のこと)</small>よりましである。
**:<span style="color:#009900;">(訳注:[[wikt:en:praestare|praestare]] ~ [[wikt:en:quam#Adverb|quam]] …「…よりも~がより優る」)</span>
*<u>quam</u> non [[wikt:en:civis#Latin|civibus]] Romanis, qui [[wikt:en:Genabum#Latin|Cenabi]] [[wikt:en:perfidia#Latin|perfidia]] Gallorum [[wikt:en:interissent|interissent]], [[wikt:en:parentarent|parentarent]].
**ケナブムでガッリア人たちの不義により滅びたローマ市民たちの仇討ちをしないよりも。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#3節|3節]]①項を参照。仇討ちをしないのなら、苦しむ方がましである、の意)</span>
:
*<!--❽--><sup>(8)</sup> Haec [[wikt:en:idem#Latin|eadem]] [[wikt:en:centurio#Latin|centurionibus]] [[wikt:en:tribunus#Latin|tribunis]]<nowiki>que</nowiki> [[wikt:en:miles#Latin|militum]]
**これらと同じことを、<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby>たちや<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>たちに、
*[[wikt:en:mandabant|mandabant]], ut per eos ad Caesarem [[wikt:en:deferrentur|deferrentur]].
**彼らを通じてカエサルに申し立てるように、依頼していた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===18節===
*<span style="background-color:#ffd;">[[/注解/18節]] {{進捗|00%|2026-04-13}}</span>
;カエサルがウェルキンゲトリークス不在の敵陣へ迫る
:
; カエサルは、ウェルキンゲトリークスが糧秣の欠乏によりローマ勢の糧秣徴発隊を襲撃に向かったと知る
*<!--❶--><sup>(1)</sup> Cum iam [[wikt:en:murus#Latin|muro]] [[wikt:en:turris#Latin|turres]] [[wikt:en:adpropinquassent#Latin|adpropinquassent]],
**すでに<small>(アウァーリクムの)</small>城壁に<small>(ローマ勢の)</small>[[w:攻城塔|攻城櫓]]が近づいていた際に、
*ex [[wikt:en:captivus#Noun|captivis]] Caesar [[wikt:en:cognovit#Latin|cognovit]],
**カエサルは、捕虜たちから<small>(以下のことを)</small>知った。
*[[wikt:en:Vercingetorix#Latin|Vercingetorigem]], [[wikt:en:consumptus#Latin|consumpto]] [[wikt:en:pabulum#Latin|pabulo]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は[[w:糧秣|糧秣]]を消費し切ると、
*castra [[wikt:en:movisse#Latin|movisse]] propius [[wikt:en:Avaricum#Latin|Avaricum]],
**陣営をアウァーリクムのより近くに移動させて、
*atque ipsum cum [[wikt:en:equitatus#Latin|equitatu]] [[wikt:en:expeditus#Noun|expeditis]]<nowiki>que</nowiki>, qui inter [[wikt:en:eques#Latin|equites]] [[wikt:en:proeliari#Verb|proeliari]] [[wikt:en:consuessent#Latin|consuessent]],
**彼自身は、[[w:騎兵|騎兵]]隊、および騎兵たちの間で争闘することに習熟していた[[w:軽装歩兵|軽装歩兵]]たちとともに、
*<u>insidiarum</u> causa eo [[wikt:en:profectus#Etymology_3|profectum]], quo nostros postero die [[wikt:en:pabulatum#Verb|pabulatum]] [[wikt:en:venturus#Latin|venturos]] [[wikt:en:arbitraretur#Latin|arbitraretur]].
**我が方<small>〔ローマ勢〕</small>が翌日に糧秣徴発にやって来るであろうと思われるところで待ち伏せするために、出発した、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:insidiarum|insidiarum]] だが、<br> β系写本では [[wikt:en:insidiandi#Latin|insidiandi]] となっている。)</span>
[[画像:AVARICUM Battaglia 52 aC.png|thumb|right|300px|アウァーリクム攻略戦の布陣図(<small>イタリア語</small>)。中央がアウァーリクム(AVARICUM)、右下の赤枠内がカエサルと8個軍団の陣営、赤い矢印の先端がローマ軍の土塁。左上の楕円形がウェルキンゲトリークスが移動させた陣営。]]
[[画像:Funerary chariot in the archeological museum of Strasbourg.jpg|thumb|right|300px|[[w:ハルシュタット文化|ハルシュタット文化]]の墳墓の副葬品として発掘された '''四輪荷馬車''' のレプリカ(仏ストラスブール考古学博物館)。]]
:
*<!--❷--><sup>(2)</sup> Quibus rebus [[wikt:en:cognitus#Participle|cognitis]]
**<small>(カエサルは)</small>それらの事情を知るや、
*media nocte [[wikt:en:silentium#Latin|silentio]] [[wikt:en:profectus#Etymology_3|profectus]]
**真夜中の静けさのうちに出発して、
*ad hostium castra [[wikt:en:mane#Adverb_2|mane]] [[wikt:en:pervenit#Etymology_2|pervenit]].
**敵の陣営の辺りへ朝方に到着した。
:
*<!--❸--><sup>(3)</sup> Illi, celeriter per [[wikt:en:explorator#Latin|exploratores]] [[wikt:en:adventus#Latin|adventu]] Caesaris [[wikt:en:cognitus#Participle|cognito]]
**あの者たちは、速やかに斥候たちを通じてカエサルの到来を知るや、
*<u>carros</u> [[wikt:en:impedimentum#Latin|impedimenta]]<nowiki>que</nowiki> sua in [[wikt:en:artior#Latin|artiores]] [[wikt:en:silva#Latin|silvas]] [[wikt:en:abdiderunt#Latin|abdiderunt]],
**自分たちの<u>四輪荷馬車</u>と[[w:輜重|輜重]]をとても深い森の中に隠して、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:四輪荷馬車 [[wikt:en:carrus#Latin|carrus]] は、例えば右の画像のものを参照。)</span>
*copias omnes in loco [[wikt:en:editus#Latin|edito]] atque [[wikt:en:apertus#Latin|aperto]] [[wikt:en:instruxerunt#Latin|instruxerunt]].
**全軍勢を高くそびえて開けている場所に配置した。
:
*<!--❹--><sup>(4)</sup> Qua re [[wikt:en:nuntiatus#Latin|nuntiata]]
**その事を報告されて、
*Caesar celeriter [[wikt:en:sarcina#Latin|sarcinas]] [[wikt:en:conferri#Latin|conferri]],
**カエサルは速やかに<small>(兵士たちの)</small>[[w:背嚢|背嚢]]が運び集められること、
*[[wikt:en:arma#Latin|arma]] [[wikt:en:expediri#Latin|expediri]] [[wikt:en:iussit#Verb|iussit]].
**武具が<small>(すぐ使えるように)</small>整えられることを命じた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===19節===
*<span style="background-color:#ffd;">[[/注解/19節]] {{進捗|00%|2026-04-20}}</span>
;丘の上のガッリア勢と沼沢を挟んで対峙する
:
; ガッリア勢の陣営の地勢
*<!--❶--><sup>(1)</sup> [[wikt:en:collis#Latin|Collis]] erat <u>leniter</u> ab [[wikt:en:infimus#Latin|infimo]] [[wikt:en:adclivis#Latin|adclivis]].
**<small>(ガッリア勢がいる)</small>丘陵はふもとから緩やかに、登り坂になっていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系・χ系・B・M・S・N<sup>c</sup> 写本では [[wikt:en:leviter#Latin|leviter]] 、<br> L・N写本では [[wikt:en:breviter#Latin|breviter]] だが、<br> より劣った写本 ''[[ガリア戦記/注解編/写本と校訂版#クリティカル・アパラトゥスとその略号|codd.deter.]]'' では [[wikt:en:leniter#Latin|leniter]] となっている。
*Hunc ex omnibus fere partibus [[wikt:en:palus#Latin|palus]] [[wikt:en:difficilis#Latin|difficilis]] atque [[wikt:en:impeditus#Latin|impedita]] [[wikt:en:cingebat#Latin|cingebat]]
**これ<small>〔丘陵〕</small>を、ほぼすべての方角から、不便で通りにくい沼地が取り巻いていて、
*non [[wikt:en:latior#Latin|latior]] [[wikt:en:pes#Latin|pedibus]] [[wikt:en:quinquaginta#Latin|quinquaginta]].
**<small>(その沼地は)</small>50<u>[[w:ペース (長さ)|ペース]]</u>より幅広くなかった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、50ペースは約15メートル弱。)</span>
:
; 丘の周囲を部族ごとに分かれて守備している
*<!--❷--><sup>(2)</sup> Hoc se [[wikt:en:collis#Latin|colle]] [[wikt:en:interruptus#Latin|interruptis]] [[wikt:en:pons#Latin|pontibus]]
**この丘陵において、橋梁を破却すると、
*Galli [[wikt:en:fiducia#Latin|fiducia]] loci [[wikt:en:continebant#Latin|continebant]]
**ガッリア人たちは、地勢を頼りに留まっていて、
*[[wikt:en:generatim#Latin|generatim]]<nowiki>que</nowiki> [[wikt:en:distributus#Latin|distributi]] in civitates
**<small>(軍勢を)</small>諸部族の種族ごとに分けて配置させて、
*omnia [[wikt:en:vadum#Latin|vada]] ac [[wikt:en:saltus#Etymology_2|saltus]] eius [[wikt:en:palus#Latin|paludis]] <u>certis custodiis</u> [[wikt:en:obtinebant#Latin|obtinebant]],
**その沼地の、すべての浅瀬や隘路を <u>一定の護衛兵たちによって</u> 占領していた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:certus#Latin|certis]] [[wikt:en:custodia#Latin|custodiis]] は β系写本の記述で、α系写本にはない。)</span>
*<u>sic</u> animo [[wikt:en:paratus#Latin|parati]] <u>ut</u>, si eam [[wikt:en:palus#Latin|paludem]] Romani [[wikt:en:perrumpo#Latin|perrumpere]] [[wikt:en:conarentur#Latin|conarentur]], [[wikt:en:haesitans#Latin|haesitantes]] [[wikt:en:premerent#Latin|premerent]] ex loco [[wikt:en:superior#Latin|superiore]];
**もしローマ勢がその沼地を強行突破せんと試みたならば、ぐずぐずしている者らを高地から圧倒する心積もりであった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:sic#Latin|sīc]] ~, [[wikt:en:ut#Latin|ut]] ・・・「…であるように~である」)</span>
:
; 両軍は互角か?
*<!--❸--><sup>(3)</sup> ut, qui [[wikt:en:propinquitas#Latin|propinquitatem]] loci [[wikt:en:videret#Latin|videret]],
**<small>(両軍の)</small>陣地が近接していることを見た者は、
*[[wikt:en:paratus#Latin|paratos]] prope [[wikt:en:aequus#Latin|aequo]] <u>Marte</u> ad [[wikt:en:dimicandum#Latin|dimicandum]] [[wikt:en:existimaret#Latin|existimaret]],
**<small>(ガッリア勢がローマ勢に対して)</small>ほぼ互角の戦い<small>(の条件)</small>で闘うつもりでいると考えただろう。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、[[wikt:en:Mars#Proper_noun_22|Mars]]「戦争の神マールス」ではなく、<br> [[wikt:en:Mars#Noun_4|Mars]]「戦争、闘い」そのものを指す。)</span>
; ガッリア勢は不利なのに虚勢を張っているのか?
*qui [[wikt:en:iniquitas#Latin|iniquitatem]] [[wikt:en:condicio#Latin|condicionis]] [[wikt:en:perspiceret#Latin|perspiceret]],
**<small>(ガッリア勢の)</small>条件の不利なことを見通した者は、
*[[wikt:en:inanis#Latin|inani]] [[wikt:en:simulatio#Latin|simulatione]] sese [[wikt:en:ostentare#Latin|ostentare]] [[wikt:en:cognosceret#Latin|cognosceret]].
**<small>(ガッリア勢が)</small>虚栄の見せかけで己を誇示していることを、理解しただろう。
:
; カエサルが、至近距離の敵への攻撃にいきり立つ将兵らを教え諭す
*<!--❹--><sup>(4)</sup> [[wikt:en:indignans#Latin|Indignantes]] [[wikt:en:miles#Latin|milites]] Gaesar,
**カエサルは<small>(ガッリア勢の誇示に)</small>憤慨している兵士たちに、
*quod [[wikt:en:conspectus#Noun_2|conspectum]] suum hostes <u>perferre</u> [[wikt:en:possent#Latin|possent]] [[wikt:en:tantulus#Latin|tantulo]] [[wikt:en:spatium#Latin|spatio]] [[wikt:en:interiectus#Latin|interiecto]],
**──というのも、これほどのわずかな距離しか介在してないのに、敵勢が自分らを<small>(平然と)</small>見据えていられるためだが──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:perferre#Latin|perferre]] だが、β系写本では [[wikt:en:ferre#Latin|ferre]] となっている。)</span>
*et signum proelii [[wikt:en:exposcens#Latin|exposcentes]] [[wikt:en:edocet#Latin|edocet]],
**および戦闘の合図を熱心に求めている者たちに対して<small>(以下のように)</small>説く。
*[[wikt:en:quantus#Latin|quanto]] [[wikt:en:detrimentum#Latin|detrimento]] et [[wikt:en:quot#Latin|quot]] [[wikt:en:vir#Latin|virorum]] [[wikt:en:fortis#Latin|fortium]] [[wikt:en:mors#Latin|morte]] [[wikt:en:necesse#Adverb|necesse]] sit [[wikt:en:constare#Latin|constare]] [[wikt:en:victoria#Latin|victoriam]];
**勝利を確実にすることが、どれほどの損害と、どれほど多くの勇敢な<ruby><rb>兵士</rb><rp>(</rp><rt>ウィル</rt><rp>)</rp></ruby>たちの死を必要とするか、を。
: <!-- [[wikt:en:| -->
; 多くのローマ兵が死に瀕すれば、カエサル自身が戦争犯罪で弾劾されるだろう
*<!--❺--><sup>(5)</sup> quos cum <u>sic</u> [[wikt:en:animus#Latin|animo]] [[wikt:en:paratus#Latin|paratos]] [[wikt:en:videat#Latin|videat]], <u>ut</u> [[wikt:en:nullus#Determiner|nullum]] pro sua [[wikt:en:laus#Latin|laude]] [[wikt:en:periculum#Latin|periculum]] [[wikt:en:recusent#Latin|recusent]],
**彼ら<small>〔兵士たち〕</small>が己の賞賛のためにいかなる危険をも辞さない心積もりであると<small>(カエサルは)</small>見て取ったので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:sic#Latin|sīc]] ~, [[wikt:en:ut#Latin|ut]] ・・・「…であるように~である」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:pro sua laude 「自らの賞賛のために」は、「カエサルの賞賛のために」と解することもできる。<br> しかし、共和制国家に忠誠を誓っているはずの兵士らが、カエサル個人のために命を投げ出そうとする記述は、<br> 野心家カエサルが軍隊を私兵化しようとしている野望をさらけ出すことになり、政敵たちを利することになる。)</span>
*[[wikt:en:summus#Latin|summae]] se [[wikt:en:iniquitas#Latin|iniquitatis]] [[wikt:en:condemnari#Latin|condemnari]] [[wikt:en:debere#Latin|debere]], [[wikt:en:nisi#Conjunction|nisi]] eorum [[wikt:en:vita#Latin|vitam]] sua [[wikt:en:salus#Latin|salute]] [[wikt:en:habeat#Latin|habeat]] [[wikt:en:carior#Latin|cariorem]].
**<small></small>彼ら<small>〔兵士〕</small>の生命を己<small>〔カエサル〕</small>の安全より貴重と思わない限り、自分<small>〔カエサル〕</small>は極度の不正のために告発されるに違いない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:すでにサビーヌスら多くのローマ市民が戦死しており、ここでさらに多くのローマ市民を死なせることは、<br> カエサルから軍隊を取り上げることを主張していた政敵たちから厳しく糾弾されることになったであろう。)</span>
: <!-- [[wikt:en:| -->
*<!--❻--><sup>(6)</sup> Sic [[wikt:en:miles#Latin|milites]] [[wikt:en:consolatus#Latin|consolatus]]
**<small>(カエサルは)</small>このように兵士たちを<ruby><rb>宥</rb><rp>(</rp><rt>なだ</rt><rp>)</rp></ruby>めて、
*eodem die [[wikt:en:reducit#Latin|reducit]] in castra
**同日に陣営の中に連れ戻して、
*[[wikt:en:reliquus#Latin|reliqua]]<nowiki>que</nowiki> quae ad [[wikt:en:oppugnatio#Latin|oppugnationem]] <u>[[wikt:en:pertinebant#Latin|pertinebant]] [[wikt:en:oppidum#Latin|oppidi]]</u> [[wikt:en:administrare#Latin|administrare]] [[wikt:en:instituit#Latin|instituit]].
**城塞都市<small>〔アウァーリクム〕</small>の攻略に関わっているほかのことに従事することを決めた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、χ系・B・M・S写本では pertinebant oppidi の語順だが、<br> L・N・β系写本では oppidi pertinebant の語順となっている。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===20節===
*<span style="background-color:#ffd;">[[/注解/20節]] {{進捗|00%|2026-05-04}}</span>
;ウェルキンゲトリークスが味方に弁明し、捕虜に問い質す
:
*<!--❶--><sup>(1)</sup> [[wikt:en:Vercingetorix#Latin|Vercingetorix]], cum ad suos [[wikt:en:redisset#Latin|redisset]], [[wikt:en:proditio#Latin|proditionis]] [[wikt:en:insimulatus#Latin|insimulatus]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、味方のもとに戻った際に、<small>(以下のことで)</small>裏切りだと非難されていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:以下、[[wikt:en:quod#Conjunction|quod]] ~ で箇条書き。)</span>
*quod [[wikt:en:castra#Latin|castra]] [[wikt:en:propius#Latin|propius]] [[wikt:en:Romani#Latin|Romanos]] [[wikt:en:movisset#Latin|movisset]],
**陣営をローマ人たちのより近くに移動させていたこと、
*quod cum omni [[wikt:en:equitatus#Noun|equitatu]] [[wikt:en:discessisset#Latin|discessisset]],
**全[[w:騎兵|騎兵隊]]とともに<small>(陣営を)</small>離れていたこと、
*quod sine [[wikt:en:imperium#Latin|imperio]] [[wikt:en:tantus#Latin|tantas]] [[wikt:en:copiae#Latin|copias]] [[wikt:en:reliquisset#Latin|reliquisset]],
**司令権<small>(を持つ者)</small>なしに、これほど多くの軍勢を置き去りにしていたこと、
*quod eius [[wikt:en:discessus#Noun|discessu]] [[wikt:en:Romani#Latin|Romani]] [[wikt:en:tantus#Latin|tanta]] [[wikt:en:opportunitas#Latin|opportunitate]] et [[wikt:en:celeritas#Latin|celeritate]] [[wikt:en:venissent#Latin|venissent]];
**彼<small>〔ウェルキンゲトリークス〕</small>の退去によりローマ人がこれほどの好機とこれほどの迅速さでやって来ていたこと、である。
:
*<!--❷--><sup>(2)</sup> non haec omnia [[wikt:en:fortuito#Latin|fortuito]] aut sine [[wikt:en:consilium#Latin|consilio]] [[wikt:en:accido#Etymology_1|accidere]] [[wikt:en:potuisse#Latin|potuisse]];
**──これらすべてが偶然に、あるいは謀りごとなしに起こることはあり得なかったのだ。
*[[wikt:en:regnum#Latin|regnum]] illum Galliae <u>malle</u> Caesaris [[wikt:en:concessus#Noun|concessu]] <u>quam</u> ipsorum habere [[wikt:en:beneficium#Latin|beneficio]]
**彼<small>〔ウェルキンゲトリークス〕</small>は<small>(ガッリア人)</small>自身の厚遇を得ることよりもむしろカエサルの許しにより[[w:ガリア|ガッリア]]の王権<small>(を持つこと)</small>を好んでいるのだ。──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:malle#Latin|malle]] ~ quam …「…よりも、むしろ~を好む(選ぶ)」)</span>
**:<span style="color:#009900;">(訳注:ウェルキンゲトリークスが王権を望むあまり、同盟部族の生命をカエサルに売り渡したということである。)</span>
[[画像:Vercingetorix_stater_n2_CdM_alternate.jpg|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の横顔が刻まれたガッリアの金貨(パリの[[w:ビブリオテーク・ナショナル|仏国立図書館]]貨幣部蔵)]]
:
; ━━ウェルキンゲトリークスの弁明が始まる━━
*<!--❸--><sup>(3)</sup> [[wikt:en:talis#Latin|tali]] [[wikt:en:modus#Latin|modo]] [[wikt:en:accusatus#Latin|accusatus]]
**こんな風に非難されて、
*ad haec [[wikt:en:respondit#Latin|respondit]]:
**<small>(ウェルキンゲトリークスは)</small>これらのことへ答えた。
*Quod [[wikt:en:castra#Latin|castra]] [[wikt:en:movisset#Latin|movisset]],
**陣営を移動させていたことは、
*[[wikt:en:factus#Latin|factum]] [[wikt:en:inopia#Latin|inopia]] [[wikt:en:pabulum#Latin|pabuli]],
**[[w:糧秣|糧秣]]の欠乏によりなされたのであり、
*etiam ipsis [[wikt:en:hortans#Latin|hortantibus]];
**<small>(ガッリア人たち)</small>自身が熱心に勧めることさえしているのだ。
*quod [[wikt:en:propius#Latin|propius]] [[wikt:en:Romani#Latin|Romanos]] [[wikt:en:accessisset#Latin|accessisset]],
**ローマ人たちのより近くに近寄っていたことは、
*[[wikt:en:persuasus#Latin|persuasum]] loci [[wikt:en:opportunitas#Latin|opportunitate]], qui se <u>ipsum</u> [[wikt:en:munitio#Latin|munitione]] [[wikt:en:defenderet#Latin|defenderet]];
**<small>(移動先の丘陵が)</small>それ自体を<small>(沼地という天然の)</small>要害により守っているという地の利に納得させられたのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:上記の se <u>ipsum</u> munitione defenderet 「そのものを防御物によって守る」は主要写本 ω の記述で、<br>''[[ガリア戦記/注解編/写本と校訂版#Bentley,_Thomas|Th. Bentley]]'' は se <u>ipse sine</u> munitione defenderet 「そのものが防御物なしで守る」と修正提案している。)</span>
:
; 騎兵は、湿地帯での任務に適していない
*<!--❹--><sup>(4)</sup> [[wikt:en:eques#Latin|equitum]] vero [[wikt:en:opera#Latin|operam]]
**騎兵たちの働きはまさに、
*neque in loco [[wikt:en:paluster#Latin|palustri]] [[wikt:en:desiderari#Latin|desiderari]] [[wikt:en:debuisse#Latin|debuisse]]
**沼沢地において望まれるべきものではなかったし、
**:<span style="color:#009900;">(訳注:湿地・沼地では、ぬかるみに馬の足が取られるため、<br> 騎兵の長所である機動力が著しく低下し、<br> 速さを活かした偵察・突撃・迂回・追撃などがし難くなる。)</span>
*et [[wikt:en:illic#Adverb|illic]] fuisse [[wikt:en:utilis#Latin|utilem]], quo sint [[wikt:en:profectus#Participle_2|profecti]].
**<small>(騎兵たちが)</small>発って行ったところにおいては有効だったのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#16節|16節]]冒頭の説明によれば、<br> ウェルキンゲトリークスが最初に宿営した場所は、<br> アウァーリクムから16マイル離れ、沼地や森林に守られていた。<br> [[#19節|19節]]では、より近い、沼地に囲まれたゆるやかな丘陵に移動したという。<br> この移動前後の地勢の優劣を、カエサルは必ずしも明瞭に説明していない。)</span>
:
; 兵は拙速を尊ぶ
*<!--❺--><sup>(5)</sup> [[wikt:en:summa#Latin|Summam]] [[wikt:en:imperium#Latin|imperii]]
**<small>(軍勢の)</small>最高司令権は、
*se [[wikt:en:consulto#Adverb|consulto]] [[wikt:en:nullus#Latin|nulli]] [[wikt:en:discedens#Latin|discedentem]] [[wikt:en:tradidisse#Latin|tradidisse]],
**<small>(ウェルキンゲトリークス)</small>自らが意図的に、立ち去るに当たって、誰にも委託しなかった。
*[[wikt:en:ne#Latin|ne]] is [[wikt:en:multitudo#Latin|multitudinis]] [[wikt:en:studium#Latin|studio]] ad [[wikt:en:dimicandus#Latin|dimicandum]] [[wikt:en:impelleretur#Latin|impelleretur]];
**その者が大勢の熱意によって<small>(ローマ人と)</small>闘うことに駆り立てられないように、である。
*cui rei <u>propter animi [[wikt:en:mollities#Latin|mollitiem]]</u> [[wikt:en:studere#Latin|studere]] omnes [[wikt:en:videret#Latin|videret]],
**その事<small>〔闘って決着を付けること〕</small>を、<u>心の柔弱さのゆえに</u>、皆が求めたがっている。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:「心の柔弱さのゆえに、闘いがしたくなる」というのは、<br> 一見すると奇妙に感じられるが、ここでの柔弱さ([[wikt:en:mollities#Latin|mollities]])とは、<br> 長期の攻囲戦の労苦や疲弊に持ちこたえる忍耐力のなさを指し、<br> 長い苦難から逃避するために早期決戦を志向する心理を意味すると考えられる。)</span>
*quod [[wikt:en:diutius#Latin|diutius]] [[wikt:en:labor#Latin|laborem]] ferre non [[wikt:en:possent#Latin|possent]].
**──というのは、<small>(兵は)</small>より長く<small>(攻囲戦の)</small>労苦に耐えることができないからだ──。
**:<span style="color:#009900;"> (訳注:[[w:孫子 (書物)|孫子]]に曰く「兵は拙速を聞くも、未だ巧の久しきを<ruby><rb>睹</rb><rp>(</rp><rt>み</rt><rp>)</rp></ruby>ざるなり」<ref>[[wikt:en:故に兵は拙速を聞くも、未だ巧の久しきを睹ざるなり|故に兵は拙速を聞くも、未だ巧の久しきを睹ざるなり]]
「戦争というものは、拙劣に短期決戦を挑んだ事例は聞くが、巧妙に長期戦を続けた事例は聞かない」の意。長い戦争は人々を消耗させ、疲弊させてしまう。</ref>)</span>
:
; ローマ人は、闘わずに退却したではないか
*<!--❻--><sup>(6)</sup> Romani si [[wikt:en:casu#Latin|casu]] [[wikt:en:intervenerint#Latin|intervenerint]], [[wikt:en:fortuna#Latin|fortunae]],
**もしローマ人たちが偶然に現われたのならば、命運に<small>(感謝するべきであり)</small>、
*si [[wikt:en:alicuius#Latin|alicuius]] [[wikt:en:indicium#Latin|indicio]] [[wikt:en:vocatus#Latin|vocati]], huic [[wikt:en:habendus#Latin|habendam]] [[wikt:en:gratia#Latin|gratiam]],
**もし<small>(ローマ人たちが)</small>何者かの申し立てに呼ばれて来たのならば、その者に感謝するべきだ。
*quod <u>et</u> [[wikt:en:paucitas#Latin|paucitatem]] eorum ex loco [[wikt:en:superior#Latin|superiore]] [[wikt:en:cognosco#Latin|cognoscere]]
**──というのは、より高い位置から彼ら<small>〔ローマ人〕</small>の少なさを知ることも、
*<u>et</u> [[wikt:en:virtus#Latin|virtutem]] [[wikt:en:despicio#Latin|despicere]] [[wikt:en:potuerint#Latin|potuerint]],
**<small>(ローマ人の)</small>武勇とやらを見下すこともできたのだから。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et ~ et …「~も…も」)</span>
*qui [[wikt:en:dimico#Latin|dimicare]] non [[wikt:en:ausus#Participle|ausi]]
**彼ら<small>〔ローマ人〕</small>は闘うことをあえてせずに、
*[[wikt:en:turpiter#Latin|turpiter]] se in castra [[wikt:en:receperint#Latin|receperint]].
**見苦しくも陣営に退却したのだ──。
:
; ガッリア人が勝つのだから、カエサルに寝返るはずがない
*<!--❼--><sup>(7)</sup> [[wikt:en:imperium#Latin|Imperium]] se <u>ab</u> Caesare per [[wikt:en:proditio#Latin|proditionem]] [[wikt:en:nullus#Latin|nullum]] [[wikt:en:desidero#Latin|desiderare]],
**自分<small>〔ウェルキンゲトリークス〕</small>は、カエサルから裏切りを通じて、どのような司令権も望んではいない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:上の (2) 項では、味方のガッリア人たちは、ウェルキンゲトリークスが<br> カエサルにより [[wikt:en:regnum#Latin|regnum]](王権、支配権)を得ようとしていると非難したのに対し、<br> 彼は [[wikt:en:imperium#Latin|imperium]](軍隊司令権、または支配権)という言葉を巧妙に引きずって答えている。<br> もちろん、言葉を変えたのは、筆者カエサル自身であろう。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ab はα系写本の記述で、β系写本では a となっている。)</span>
*quod habere [[wikt:en:victoria#Latin|victoria]] [[wikt:en:posset#Latin|posset]],
**<small>(支配権は、ローマ人に対する)</small>勝利によって得られるものであり、
*quae iam esset sibi atque omnibus [[wikt:en:Galli#Latin|Gallis]] [[wikt:en:exploratus#Latin|explorata]];
**<small>(勝利は)</small>もはや自分とすべてのガッリア人にとって確実なものとされているのだ。
*quin etiam ipsis <u>remittere</u>,
**いやそればかりか<small>(以下の様であれば、ガッリア人たち)</small>自身に<small>(司令官職を)</small>返還しているだろう。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:remitto#Latin|remittere]] は、写本Sの記述および ''[[ガリア戦記/注解編/写本と校訂版#Stephanus_(Estienne)|Stephanus]]'' や ''[[ガリア戦記/注解編/写本と校訂版#Vascosanus|Vascosanus]]'' による修正提案で、<br> β系・χ系写本・写本B・M・L・N では [[wikt:en:remitteret#Latin|remitteret]] となっている。)</span>
*si sibi <u>magis</u> [[wikt:en:honor#Latin|honorem]] [[wikt:en:tribuo#Latin|tribuere]], <u>quam</u> ab se [[wikt:en:salus#Latin|salutem]] [[wikt:en:accipio#Latin|accipere]] [[wikt:en:videantur#Latin|videantur]].
**もし<small>(ガッリア人が)</small>自分から安全を受け取っているよりも、むしろ顕職を自分に授けていると思っているのならば、だが。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:magis#Latin|magis]] ~, quam …「…というよりは、むしろ~」)</span>
:
; 捕虜のローマ人たちに訊いてみなさい
*<!--❽--><sup>(8)</sup> <!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> Haec ut [[wikt:en:intellegatis#Latin|intellegatis]], <span style="color:#009900;">»</span> </span> [[wikt:en:inquit#Latin|inquit]], <!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> a me [[wikt:en:sincere#Latin|sincere]] [[wikt:en:pronuntiari#Latin|pronuntiari]], [[wikt:en:audite#Latin|audite]] [[wikt:en:Romanus#Adjective|Romanos]] [[wikt:en:miles#Latin|milites]]. <span style="color:#009900;">»</span> </span>
**「これらは諸君が理解しているように、私により率直に示された。ローマ兵たちに聞いてみよ」と言った。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:<!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> ~ <span style="color:#009900;">»</span> </span> の箇所は、直接話法で記されている。)</span>
:
*<!--❾--><sup>(9)</sup> [[wikt:en:producit#Latin|Producit]] [[wikt:en:servus#Latin|servos]], quos in [[wikt:en:pabulatio#Latin|pabulatione]] paucis ante diebus [[wikt:en:exceperat#Latin|exceperat]] et [[wikt:en:fames#Latin|fame]] [[wikt:en:vinculum#Latin|vinculis]]<nowiki>que</nowiki> [[wikt:en:excruciaverat#Latin|excruciaverat]].
**数日前に糧秣徴発しているのを<small>(彼が)</small>ひっ捕らえて、飢えと鎖で拷問していたところの奴隷たちを引き出す。
**:<span style="color:#009900;">(訳注:[[wikt:en:calo#Noun_5|cālō]] カーロー(軍属奴隷)と呼ばれる輜重や陣営を管理する奴隷たちのことであろう。)</span>
:
*<!--❿--><sup>(10)</sup> Hi iam ante [[wikt:en:edoctus#Latin|edocti]], quae [[wikt:en:interrogatus#Latin|interrogati]] [[wikt:en:pronuntiarent#Latin|pronuntiarent]],
**彼ら<small>〔奴隷〕</small>は、すでに前もって<small>(ガッリア勢から)</small>訊問された際に語ることを<small>(ローマ人から)</small>教え込まれており、
**:<span style="color:#009900;">(訳注:カエサルは奴隷たちが誰に教え込まれたのか明記していないため、<br> ウェルキンゲトリークスに教え込まれたと訳している場合もある。)</span>
*[[wikt:en:miles#Latin|milites]] se esse [[wikt:en:legionarius#Latin|legionarios]] [[wikt:en:dicunt#Latin|dicunt]];
**自分たちは[[w:軍団兵|軍団兵]]であると言った。
**:<span style="color:#009900;">(訳注:糧秣徴発に出かけていた者は、たとえ軍団兵でも軽装であったであろうが、<br> 奴隷たちは、もともと戦争で捕虜になったガッリア人たち等であったと考えられるので、<br> 地中海人種のローマ人とは容易に見分けが付きそうなものではある。)</span>
*[[wikt:en:fames#Latin|fame]] <u>et</u> [[wikt:en:inopia#Noun_2|inopia]] [[wikt:en:adductus#Latin|adductos]] [[wikt:en:clam#Latin|clam]] ex castris [[wikt:en:exisse#Latin|exisse]], si [[wikt:en:aliquis#Latin|quid]] [[wikt:en:frumentum#Latin|frumenti]] aut [[wikt:en:pecus#Latin|pecoris]] in agris [[wikt:en:reperio#Latin|reperire]] [[wikt:en:possent#Latin|possent]];
**<small>(奴隷たち曰く)</small>飢えと欠乏に動かされて、何か穀物または家畜が野に見出せないかと、ひそかに陣営から抜け出した。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et はα系写本の記述で、β系写本では atque となっている。)</span>
:
*<!--⓫--><sup>(11)</sup> [[wikt:en:similis#Latin|simili]] omnem [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:inopia#Noun_2|inopia]] [[wikt:en:premi#Latin|premi]],
**<small>(ローマ人の)</small>全軍隊が同様の欠乏に悩まされて、
*<u>nec</u> iam [[wikt:en:vis#Latin|vires]] [[wikt:en:sufficio#Latin|sufficere]] [[wikt:en:quisquam#Latin|cuiusquam]] <u>nec</u> ferre [[wikt:en:opus#Latin|operis]] [[wikt:en:labor#Latin|laborem]] posse;
**もはや<small>(兵士の)</small>誰もが十分な能力がなく、<small>(城攻めの)</small>作業の労苦に耐えることができない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:nec ~ nec …「~でもなく、…でもない」)</span>
*itaque [[wikt:en:statuisse#Latin|statuisse]] [[wikt:en:imperator#Latin|imperatorem]], si [[wikt:en:nihil#Latin|nihil]] in [[wikt:en:oppugnatio#Latin|oppugnatione]] oppidi <u>profecissent</u>, [[wikt:en:triduum#Latin|triduo]] [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:deduco#Latin|deducere]].
**こうして将軍<small>〔カエサル〕</small>は、もし城塞都市の攻略において何ら得られないならば、3日間で軍隊を連れ帰ると決めた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、写本S・L・Nでは [[wikt:en:profecissent#Latin|profecissent]]<sub> (3人称・<u>複数</u>・過去完了・接続法)</sub> だが、<br> β系写本では [[wikt:en:profecisset#Latin|profecisset]]<sub> (3人称・<u>単数</u>・過去完了・接続法)</sub> となっており、<br> χ系および写本B・Mでは proficissent という綴りになっている。)</span>
: <!-- [[wikt:en:| -->
*<!--⓬--><sup>(12)</sup> <!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> Haec, <span style="color:#009900;">»</span> </span> [[wikt:en:inquit#Latin|inquit]], <!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> a me, <span style="color:#009900;">»</span> </span> [[wikt:en:Vercingetorix#Latin|Vercingetorix]],
**「これぞ」「私によって」とウェルキンゲトリークスは言った。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:以下、<!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> ~ <span style="color:#009900;">»</span> </span> の箇所は、直接話法で記されている。)</span>
*<!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> [[wikt:en:beneficium#Latin|beneficia]] [[wikt:en:habetis#Latin|habetis]], quem [[wikt:en:proditio#Latin|proditionis]] [[wikt:en:insimulatis#Verb|insimulatis]];
**「裏切りだと諸君が糾弾している<small>(私という)</small>者のおかげで得ているのだ。
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> cuius [[wikt:en:opera#Latin|opera]] sine [[wikt:en:vester#Latin|vestro]] [[wikt:en:sanguis#Latin|sanguine]]
**その<small>(私という)</small>者の尽力により、諸君らの流血なしに、
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> tantum [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:victor#Latin|victorem]] [[wikt:en:fames#Latin|fame]] <u>paene</u> [[wikt:en:consumptus#Latin|consumptum]] [[wikt:en:videtis#Latin|videtis]];
**これほどの軍隊の勝利者<small>〔ローマ人〕</small>を飢えにより、ほとんど滅ぼしたのを諸君は見ているのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:paene は β系写本の記述で、α系写本にはない。)</span>
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> quem [[wikt:en:turpiter#Latin|turpiter]] se ex <u>hac</u> fuga [[wikt:en:recipiens#Latin|recipientem]]
**彼ら<small>〔ローマ人〕</small>が見苦しくもこのような逃亡から退却したところを、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:hac は β系写本の記述で、α系写本にはない。)</span>
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> ne [[wikt:en:aliqua#Pronoun|qua]] [[wikt:en:civitas#Latin|civitas]] suis finibus [[wikt:en:recipiat#Latin|recipiat]],
**<small>(それらの退却したローマ人を)</small>どの部族も自らの領土に受け入れないように、
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> a me [[wikt:en:provisus#Latin|provisum]] est. <span style="color:#009900;">»</span> </span>
**私<small>〔ウェルキンゲトリークス〕</small>により、手配された。」
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===21節===
*<span style="background-color:#ffd;">[[/注解/21節]] {{進捗|00%|2026-05-10}}</span>
;ウェルキンゲトリークスの誠心とアウァーリクムの重要性を確認
:
*<!--❶--><sup>(1)</sup> [[wikt:en:conclamat#Latin|Conclamat]] omnis [[wikt:en:multitudo#Latin|multitudo]]
**群集すべてが雄叫びを上げて、
*et suo [[wikt:en:mos#Latin|more]] [[wikt:en:arma#Latin|armis]] [[wikt:en:concrepat#Latin|concrepat]],
**自分たちの慣習で武具を打ち鳴らす。
*quod facere in eo [[wikt:en:consuerunt#Verb_2|consuerunt]], cuius [[wikt:en:oratio#Latin|orationem]] [[wikt:en:adprobant#Latin|adprobant]];
**<small>(演説した)</small>その者の雄弁に賛同したら、その者に対してそれをすることが常であったのだ。
*summum esse [[wikt:en:Vercingetorix#Latin|Vercingetorigem]] [[wikt:en:dux#Latin|ducem]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は最高の将帥であり、
*<u>nec</u> de eius [[wikt:en:fides#Latin|fide]] [[wikt:en:dubitandus#Latin|dubitandum]],
**彼の信義については疑念を抱くべきではなく、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:nec#Latin|nec]] ~, nec …「~でもないし、…でもない」)</span>
*<u>nec</u> [[wikt:en:maior#Latin|maiore]] [[wikt:en:ratio#Latin|ratione]] bellum [[wikt:en:administrari#Latin|administrari]] posse.
**これ以上の作戦で戦争を指導することはできない<small>(と、叫んで武具を打ち鳴らす)</small>。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:statuunt#Latin|Statuunt]], ut decem<sub> (X)</sub> milia hominum [[wikt:en:delectus#Latin|delecta]] ex omnibus [[wikt:en:copiae#Latin|copiis]] in oppidum <u>mittantur</u>,
**<small>(彼らは)</small>すべての軍勢から選り抜かれた兵員1万を<small>(アウァーリクムの)</small>[[w:オッピドゥム|城塞都市]]の中に派遣すると決定する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:mittantur#Latin|mittantur]] だが、<br> β系写本では [[wikt:en:submittantur#Latin|submittantur]] となっている。)</span>
:
*<!--❸--><sup>(3)</sup> nec [[wikt:en:solus#Latin|solis]] [[wikt:en:Bituriges#Latin|Biturigibus]] [[wikt:en:communis#Latin|communem]] [[wikt:en:salus#Latin|salutem]] [[wikt:en:committendus#Latin|committendam]] [[wikt:en:censent#Latin|censent]],
**<small>(ガッリア)</small>共通の安全をビトゥリゲース族だけに託すべきではないと考える。
*quod <u>penes eos</u>, si id oppidum [[wikt:en:retinuissent#Latin|retinuissent]],
**というのは、<u>彼らのもとで</u>、その城塞都市を維持したか否かが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> 主要写本ω では [[wikt:en:penes#Latin|penes]] eos 「彼らのもとで」だが、<br> オックスフォード写本 ''[[ガリア戦記/注解編/写本と校訂版#Codex_Oxoniensis_Andino|codd. Andino. Oxon.]]'' や ''[[ガリア戦記/注解編/写本と校訂版#Aldus|Aldus]]'' は paene in eo 「ほぼそのことにおいて」としている。)</span>
*[[wikt:en:summa#Latin|summam]] victoriae [[wikt:en:consto#Latin|constare]] [[wikt:en:intellegebant#Latin|intellegebant]].
**勝利の天王山を確かなものにすること、を理解していたからである。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===22節===
*<span style="background-color:#ffd;">[[/注解/22節]] {{進捗|00%|2026-06-01}}</span>
;アウァーリクムの籠城ガッリア勢が坑道戦で攻防に努める
:
*<!--❶--><sup>(1)</sup> [[wikt:en:singularis#Latin|Singulari]] [[wikt:en:miles#Latin|militum]] nostrorum [[wikt:en:virtus#Latin|virtuti]]
**我が方<small>〔ローマ勢〕</small>の兵士の卓越した武勇に、
*[[wikt:en:consilium#Latin|consilia]] [[wikt:en:quisque#Latin|cuiusque]] [[wikt:en:modus#Latin|modi]] [[wikt:en:Galli#Latin|Gallorum]] [[wikt:en:occurrebant#Latin|occurrebant]],
**<small>(敵勢は)</small>ガッリア人のあらゆる流儀の方策で抗戦していた。
*ut est summae [[wikt:en:genus#Latin|genus]] [[wikt:en:sollertia#Latin|sollertiae]]
**確かに<small>(ガッリア人は)</small>このうえなく器用な種族であり、
*atque ad [[wikt:en:omnia#Noun|omnia]] [[wikt:en:imitandus#Latin|imitanda]] et [[wikt:en:efficiendus#Latin|efficienda]], quae ab [[wikt:en:quisque#Latin|quoque]] [[wikt:en:traduntur#Latin|traduntur]], [[wikt:en:aptissimus#Latin|aptissimum]].
**誰かによって教えられることすべてを模倣すること、造り出すことにとても適しているのだ。
:
; 鉄鉱山の土地柄で、坑道戦を展開する
*<!--❷--><sup>(2)</sup> Nam <u>et</u> [[wikt:en:laqueus#Latin|laqueis]] [[wikt:en:falx#Latin|falces]] [[wikt:en:avertebant#Latin|avertebant]],
**すなわち、輪縄で<small>(ローマ勢の)</small>破城鎌をそらし、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et ~, et …「~でもあり、…でもある」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:破城鎌([[w:en:Falx|falx]])については、右図や[[ガリア戦記 第5巻#42節|第5巻42節]]を参照)</span>
[[画像:Falx_bgiu.png|thumb|right|250px|破城鎌([[w:en:Falx|falx]])の想像画(再掲)]]
[[画像:Doura_Europos_tunnel.jpg|thumb|right|250px|ローマ支配下の城砦跡に残る[[w:坑道|坑道]]の例(シリアの[[w:ドゥラ・エウロポス|ドゥラ・エウロポス]]遺跡)。[[w:サーサーン朝|サーサーン朝]]軍が[[w:坑道戦|坑道戦]]のために掘削したと考えられている。]]
*quas, cum [[wikt:en:destinaverant#Latin|destinaverant]],
**それを縛り付けておいてから、
*[[wikt:en:tormentum#Latin|tormentis]] [[wikt:en:introrsus#Latin|introrsus]] [[wikt:en:reducebant#Latin|reducebant]],
**巻揚げ機で<small>(城塞都市の)</small>内部に引き込んでいたし、
*<u>et</u> [[wikt:en:agger#Latin|aggerem]] [[wikt:en:cuniculus#Latin|cuniculis]] [[wikt:en:subtrahebant#Latin|subtrahebant]],
**<small>(ローマ勢の)</small><ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby> を[[w:坑道|坑道]]によって陥没させたりもした。
*<u>eo</u> [[wikt:en:scienter#Latin|scientius]]
**<small>(以下の理由により、彼らはそのことに)</small>より習熟しているのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:eo#Pronoun_5|eō]] ~ [[wikt:en:quod#Conjunction|quod]] …「…という理由で~」)</span>
*<u>quod</u> apud eos magnae sunt [[wikt:en:ferraria#Latin|ferrariae]]
**──というのも、彼らのもとには多くの[[w:鉄鉱石|鉄鉱]]山があり、
*atque [[wikt:en:omnis#Latin|omne]] [[wikt:en:genus#Latin|genus]] [[wikt:en:cuniculus#Latin|cuniculorum]] [[wikt:en:notus#Latin|notum]]
**坑道のあらゆる類いが知られていて
*atque [[wikt:en:usitatus#Latin|usitatum]] est.
**慣れていただけに<small>(習熟しているのだ)</small>。──
:
; アウァーリクムの全周に防御のための櫓を建てる
*<!--❸--><sup>(3)</sup> [[wikt:en:totus#Latin|Totum]] autem [[wikt:en:murus#Latin|murum]] ex omni parte
**他方で、城壁の全体をあらゆる方向から、
*[[wikt:en:turris#Latin|turribus]] [[wikt:en:contabulaverant#Latin|contabulaverant]]
**<ruby><rb>[[w:攻城塔|攻城櫓]]</rb><rp>(</rp><rt>トゥッリス</rt><rp>)</rp></ruby>を<small>(何層にも)</small>構築しておいて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:動詞 [[wikt:en:contabulo#Latin|contabulare]] は「板張りする」。[[内乱記_第2巻#9節|『内乱記』第2巻9節]]には [[wikt:en:contabulatio#Latin|contabulatio]]「床板張り」という単語が出て来る。)</span>
*atque has [[wikt:en:corium#Latin|coriis]] [[wikt:en:intexerant#Latin|intexerant]].
**これらを皮革で覆っていた。
:
*<!--❹--><sup>(4)</sup> Tum [[wikt:en:creber#Latin|crebris]] [[wikt:en:diurnus#Latin|diurnis]] [[wikt:en:nocturnus#Latin|nocturnis]]<nowiki>que</nowiki> [[wikt:en:eruptio#Latin|eruptionibus]]
**それから、たびたび昼間も夜間も出撃して、
*aut [[wikt:en:agger#Latin|aggeri]] [[wikt:en:ignis#Latin|ignem]] [[wikt:en:inferebant#Latin|inferebant]]
**あるいは土塁に火災を引き起こしたり、
*aut [[wikt:en:miles#Latin|milites]] [[wikt:en:occupatus#Latin|occupatos]] in [[wikt:en:opus#Latin|opere]] [[wikt:en:adoriebantur#Latin|adoriebantur]],
**あるいは工事に従事している<small>(ローマ人)</small>兵士たちを襲撃したりした。
[[画像:University_of_Queensland_Pitch_drop_experiment-white_bg.jpg|thumb|right|200px|<ruby><rb>[[w:ピッチ (樹脂)|樹脂]]</rb><rp>(</rp><rt>ピッチ</rt><rp>)</rp></ruby>の滴下実験の様子(豪州[[w:クイーンズランド大学|クイーンズランド大学]])。[[w:木材|木材]]を密閉加熱すると[[w:木炭|木炭]]が得られるが、その残り物から[[w:乾留液#木タール|木タール]]を[[w:蒸留|蒸留]]させた残り<ruby><rb>滓</rb><rp>(</rp><rt>かす</rt><rp>)</rp></ruby>がピッチである。樹木から得られるピッチは、黒色で[[w:粘度|粘っこく]]、高温で燃焼する。中世ヨーロッパでは城砦の防衛に使用され、城壁に近づく敵の上から熱したピッチを注いで焼死させたりしたという([[w:fr:Poix (matière)|fr:poix]])。]]
*et nostrarum [[wikt:en:turris#Latin|turrium]] [[wikt:en:altitudo#Latin|altitudinem]],
**我が方<small>〔ローマ勢〕</small>の[[w:攻城塔|攻城櫓]]の高さを、
*[[wikt:en:quantum#Latin|quantum]] has [[wikt:en:cotidianus#Latin|cotidianus]] agger [[wikt:en:expresserat#Latin|expresserat]],
**毎日のようにこれらを<small>(ローマ側の)</small>土塁が押し出した分だけ、
*[[wikt:en:commissus#Latin|commissis]] suarum [[wikt:en:turris#Latin|turrium]] [[wikt:en:malus#Noun_5|malis]] [[wikt:en:adaequabant#Latin|adaequabant]],
**自分たち<small>〔ガッリア勢〕</small>の櫓を、柱を組み立てることにより、<small>(ローマ側の櫓の高さと)</small>等しくしようとした。
:
*<!--❺--><sup>(5)</sup> et [[wikt:en:apertus#Latin|apertos]] [[wikt:en:cuniculus#Latin|cuniculos]]
**<small>(ローマ勢が掘削した)</small>坑道の露出したところを
*[[wikt:en:praeustus#Latin|praeusta]] et [[wikt:en:praeacutus#Latin|praeacuta]] [[wikt:en:materia#Latin|materia]]
**先端を焼いて尖らせた木材や、
*et [[wikt:en:pix#Latin|pice]] [[wikt:en:fervefactus#Latin|fervefacta]]
**熱した<ruby><rb>[[w:ピッチ (樹脂)|樹脂]]</rb><rp>(</rp><rt>ピッチ</rt><rp>)</rp></ruby>や、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:pix は<ruby><rb>[[w:歴青|瀝青]]</rb><rp>(</rp><rt>れきせい</rt><rp>)</rp></ruby>と訳されることもあるが、とくに[[w:ピッチ (樹脂)|ピッチ]]を指す<ref>[https://kotobank.jp/word/%E6%9C%A8%E3%81%9F%E3%83%BC%E3%82%8B-3173189 木タール] などを蒸留したあとに残る黒色の物質。</ref>。<br> [[w:歴青|瀝青]]は「ビチューメン」ともいい、ラテン語の [[wikt:en:bitumen#Latin|bitūmen]] に由来する。<br> [[w:ピッチ (樹脂)|ピッチ]]([[w:en:Pitch (resin)|Pitch]])は、ラテン語の [[wikt:en:pix#Latin|pix]] に由来する。)</span>
*et [[wikt:en:maximus#Latin|maximi]] [[wikt:en:pondus#Latin|ponderis]] [[wikt:en:saxum#Latin|saxis]] [[wikt:en:morabantur#Etymology_1|morabantur]]
**たいへんな重さの岩石で、<small>(ローマ勢の掘削を)</small>滞らせたり、
*[[wikt:en:moenia#Latin|moenibus]]<nowiki>que</nowiki> [[wikt:en:adpropinquo#Latin|adpropinquare]] [[wikt:en:prohibebant#Latin|prohibebant]].
**<small>(ローマ勢が)</small>城壁に接近することを<small>(ガッリア勢が)</small>妨げたりしていた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===23節===
{{Commons|Category:Murus gallicus|Murus gallicus}}
*<span style="background-color:#ffd;">[[/注解/23節]] {{進捗|00%|2026-06-14}}</span>
;ガッリア式城壁の構造
:
*<!--❶--><sup>(1)</sup> [[wikt:en:murus#Latin|Muri]] autem omnes [[wikt:en:Gallicus#Latin|Gallici]] hac fere [[wikt:en:forma#Latin|forma]] sunt.
**ところで、ガッリアの<ruby><rb>城壁</rb><rp>(</rp><rt>ムルス</rt><rp>)</rp></ruby>のすべては、ほぼ以下のような形態である。
:
; 木材を2ペースずつ等間隔で離して、ずっと並べていく
*<u>Trabes</u> [[wikt:en:derectus#Latin|derectae]] [[wikt:en:perpetuus#Latin|perpetuae]] <u>in longitudinem</u>
**<u><ruby><rb>木材</rb><rp>(</rp><rt>トラプス</rt><rp>)</rp></ruby></u>が<small>(城壁の)</small><u><ruby><rb>長手方向</rb><rp>(</rp><rt>ロンギトゥードー</rt><rp>)</rp></ruby></u>に、<small>(垂直に)</small>真っ直ぐに、ずっと続いて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:trabs#Latin|trabes]] は、とくに梁のような水平材を指していると思われる。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:in [[wikt:en:longitudo#Latin|longitudinem]] は、ここでは、城壁に沿った長手方向を指す。)</span>
[[画像:Murus gallicus de Lyon Fourvière - Maquette de Nicolas Hirsch - Service Archéologique de la Ville de Lyon - Détail structure.jpg|thumb|right|300px|ガッリア式城壁の[[w:ジオラマ|ジオラマ]](仏[[w:リヨン|リヨン市]]考古学局)。木材を約60cmの間隔で並べる。]]
*[[wikt:en:par#Latin|paribus]] [[wikt:en:intervallum#Latin|intervallis]], [[wikt:en:distans#Latin|distantes]] inter se [[wikt:en:binus#Latin|binos]] [[wikt:en:pes#Latin|pedes]],
**等間隔で、互いに2<u>ペース</u>ずつ離れて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、2ペースは約60 cm弱。)</span>
*in [[wikt:en:solum#Latin|solo]] [[wikt:en:conlocantur#Latin|conlocantur]].
**<ruby><rb>地面</rb><rp>(</rp><rt>ソルム</rt><rp>)</rp></ruby>に配置される。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:右の画像を参照。)</span>
:
; 木材をつなぎ合わせ、土砂を埋めて、石材をかぶせる
[[画像:2018 Rheinisches Landesmuseum Trier, Keltischer Wehrmauer.jpg|thumb|right|300px|同じく城壁のジオラマ(独[[w:トリーア|トリーア市]])。]]
*<!--❷--><sup>(2)</sup> [[wikt:en:hae#Latin|Hae]] [[wikt:en:revinciuntur#Latin|revinciuntur]] [[wikt:en:introrsus#Latin|introrsus]]
**これら<small>〔木材〕</small>は、内側で緊結されて、
**:<span style="color:#009900;">(訳注:明瞭な説明ではなく、肝心な記述が欠落している。<br> 上記の2ペースずつ等間隔で並べられた平行な木材は、<br> 節末で述べられるような40ペースの長い木材によって<br> 井桁状に組み合わされて、鉄の釘で固定されたようである。<br> 右上と右のジオラマの画像を参照。)</span>
*et [[wikt:en:multus#Latin|multo]] [[wikt:en:agger#Latin|aggere]] [[wikt:en:vestiuntur#Latin|vestiuntur]];
**多くの<ruby><rb>土砂</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>で覆われる。
*ea autem, quae [[wikt:en:diximus#Verb|diximus]], [[wikt:en:intervallum#Latin|intervalla]]
**さらに、前述した<small>(2ペースの)</small>間隔には、
*[[wikt:en:grandis#Latin|grandibus]] in [[wikt:en:frons#Latin:_forehead|fronte]] [[wikt:en:saxum#Latin|saxis]] <u>efferciuntur</u>.
**前面に大きな<ruby><rb>石塊</rb><rp>(</rp><rt>サクスム</rt><rp>)</rp></ruby>が詰め込まれる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、ρ系写本・写本V では [[wikt:en:efferciuntur#Latin|efferciuntur]] と表記され、<br> α系写本・写本T では [[wikt:en:effarciuntur#Latin|effarciuntur]] と表記されるが、<br> [[w:母音弱化|母音弱化]]の語形である前者の方が、共和制末期のカエサルが用いたと考えられる。)</span>
[[画像:Keltenmauer.gif|thumb|right|280px|ガッリア式城壁の構成図(上が側面、中が上面、下が前面)。木材を水平な井桁状に並べて[[w:釘|釘]]で緊結し、土砂で覆って何層にも重ね、前面には石をはめ込む。井桁状の骨組によって[[w:破城槌|破城槌]]など横からの力(水平荷重)に耐えられるように工夫されている。]]
:
*<!--❸--><sup>(3)</sup> His [[wikt:en:conlocatus#Latin|conlocatis]] et [[wikt:en:coagmentatus#Latin|coagmentatis]]
**<u>これら</u>が配置されて結び合わされると、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:<u>これら</u> とは、上述の木材や石材のこと。)</span>
*alius [[wikt:en:insuper#Latin|insuper]] [[wikt:en:ordo#Latin|ordo]] [[wikt:en:additur#Latin|additur]],
**上に別の<ruby><rb>階層</rb><rp>(</rp><rt>オルドー</rt><rp>)</rp></ruby>が付け加えられる。
*ut idem illud [[wikt:en:intervallum#Latin|intervallum]] [[wikt:en:servetur#Latin|servetur]],
**その同じ<small>(2ペースの)</small>間隔が保たれて、
*neque inter se [[wikt:en:contingant#Latin|contingant]] [[wikt:en:trabs#Latin|trabes]],
**かつ<ruby><rb>木材</rb><rp>(</rp><rt>トラプス</rt><rp>)</rp></ruby>が互いに接触しないように、
**:<span style="color:#009900;">(訳注:上下の層の水平材どうしが接触しないように、<br> 互い違いに並べているようである。)</span>
*sed [[wikt:en:par#Latin|paribus]] [[wikt:en:intermissus#Latin|intermissae]] [[wikt:en:spatium#Latin|spatiis]] [[wikt:en:singulus#Latin|singulae]]
**けれども、等間隔で間をあけられたそれぞれ<small>(の木材)</small>は、
*[[wikt:en:singulus#Latin|singulis]] [[wikt:en:saxum#Latin|saxis]] [[wikt:en:interiectus#Latin|interiectis]]
**それぞれの<ruby><rb>石塊</rb><rp>(</rp><rt>サクスム</rt><rp>)</rp></ruby>が間に挟まれることによって、
*[[wikt:en:arte#Adverb|arte]] [[wikt:en:contineantur#Latin|contineantur]].
**緊密に連結される。
:
*<!--❹--><sup>(4)</sup> Sic [[wikt:en:deinceps#Latin|deinceps]] omne [[wikt:en:opus#Latin|opus]] [[wikt:en:contexitur#Latin|contexitur]], [[wikt:en:dum#Latin|dum]] [[wikt:en:iustus#Latin|iusta]] [[wikt:en:murus#Latin|muri]] [[wikt:en:altitudo#Latin|altitudo]] [[wikt:en:expleatur#Latin|expleatur]].
**このように、<ruby><rb>城壁</rb><rp>(</rp><rt>ムルス</rt><rp>)</rp></ruby>の十分な高さが満たされるまで、すべての<ruby><rb>工作物</rb><rp>(</rp><rt>オプス</rt><rp>)</rp></ruby>が続けて組み立てられる。
[[画像:Bibracte_murus_gallicus1.jpg|thumb|right|300px|ガッリア式城壁の[[w:ジオラマ|ジオラマ]](仏[[w:ビブラクテ|ビブラクテ]]遺跡のケルト文明博物館)。この構造形式はカエサルの記述から「[[w:ムルス・ガリクス|ムルス・ガリクス]](ガッリア壁)」と呼ばれるが、ガッリアに限らず、[[w:鉄器時代|鉄器時代]]末期すなわちBC1世紀頃の後期[[w:ラ・テーヌ文化|ラ・テーヌ文化]]が及んだ各地に遺構として残る。木材どうしを緊結するために数百トンもの[[w:鉄|鉄]]の[[w:釘|釘]]を用いているのが大きな特徴で、[[w:鉄#製錬|製鉄]]・[[w:鋳造|鋳造]]技術の発達を示す。]]
:
; ガッリア式城壁は、外観が見事で、城塞都市の防御にも有益
:<span style="color:#009900;font-family:Times New Roman;">(訳注:以下、cum ~ tum … の構文「~だけでなく、また…でもある」。)</span>
*<!--❺--><sup>(5)</sup> Hoc <u>cum</u> in [[wikt:en:species#Latin|speciem]] [[wikt:en:varietas#Latin|varietatem]]<nowiki>que</nowiki> [[wikt:en:opus#Latin|opus]] [[wikt:en:deformis#Latin|deforme]] non est [[wikt:en:alternus#Latin|alternis]] [[wikt:en:trabs#Latin|trabibus]] ac [[wikt:en:saxum#Latin|saxis]],
**<ruby><rb>この</rb><rp>(</rp><rt>ホク</rt><rp>)</rp></ruby><ruby><rb>工作物</rb><rp>(</rp><rt>オプス</rt><rp>)</rp></ruby>は、互い違いの<ruby><rb>木材</rb><rp>(</rp><rt>トラプス</rt><rp>)</rp></ruby>と<ruby><rb>石塊</rb><rp>(</rp><rt>サクスム</rt><rp>)</rp></ruby>により、変化に富む外観において不格好でなく、
*quae [[wikt:en:rectus#Latin|rectis]] [[wikt:en:linea#Latin|lineis]] suos [[wikt:en:ordo#Latin|ordines]] [[wikt:en:servant#Latin|servant]],
**──それら<small>〔木材と石〕</small>は真っ直ぐな線により、その<ruby><rb>階層</rb><rp>(</rp><rt>オルドー</rt><rp>)</rp></ruby>を保っているのだが──
*<u>tum</u> ad [[wikt:en:utilitas#Latin|utilitatem]] et [[wikt:en:defensio#Latin|defensionem]] [[wikt:en:urbs#Latin|urbium]]
**同様に、都市の防御の有益性のためにも、
*summam [[wikt:en:habet#Latin|habet]] [[wikt:en:opportunitas#Latin|opportunitatem]],
**きわめて好都合となっている。
*quod et ab [[wikt:en:incendio#Latin|incendio]] [[wikt:en:lapis#Latin|lapis]] et ab [[wikt:en:aries#Latin|ariete]] [[wikt:en:materia#Latin|materia]] [[wikt:en:defendit#Latin|defendit]],
**──というのは、<ruby><rb>石材</rb><rp>(</rp><rt>ラピス</rt><rp>)</rp></ruby>が火災からも、<ruby><rb>材木</rb><rp>(</rp><rt>マーテリア</rt><rp>)</rp></ruby>が<ruby><rb>[[w:破城槌|破城槌]]</rb><rp>(</rp><rt>はじょうつい</rt><rp>)</rp></ruby>からも、防護しており、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et ~ et …「~でもあり、…でもある」)</span>
*quae [[wikt:en:perpetuus#Latin|perpetuis]] [[wikt:en:trabs#Latin|trabibus]] [[wikt:en:pes#Latin|pedes]] [[wikt:en:quadragenus#Latin|quadragenos]] [[wikt:en:plerumque#Adverb|plerumque]] [[wikt:en:introrsus#Latin|introrsus]] [[wikt:en:revinctus#Latin|revincta]]
**それ<small>〔短手方向の材木〕</small>は、たいてい40<u>ペース</u>にわたって<small>(長手方向に)</small>続く<ruby><rb>木材</rb><rp>(</rp><rt>トラプス</rt><rp>)</rp></ruby>により内部で緊結されており、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、40ペースは約12メートル。)</span>
*neque [[wikt:en:perrumpi#Latin|perrumpi]] neque [[wikt:en:distrahi#Latin|distrahi]] potest.
**突破されることも、引きはがされることもできないからである。──
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===24節===
[[画像:Avaricum_westpoint_july_2006.jpg|thumb|right|350px|[[w:アウァリクム包囲戦|アウァーリクム攻略戦]]の[[w:ジオラマ|ジオラマ]]<small>([[w:陸軍士官学校 (アメリカ合衆国)|米国陸軍士官学校]]博物館)</small>。ローマ軍の<ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>は、城壁(奥)の手前に材木と土砂を積み重ねた構築物が築き上げられ、左右の土手道をそれぞれ4層の[[w:攻城塔|攻城櫓]]が城壁に迫る。土塁の周辺には<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby>(vinea)を多数つないだ通路(坑道)が延びている。手前には2台の<ruby><rb>投射機</rb><rp>(</rp><rt>スコルピオ</rt><rp>)</rp></ruby>が見える。]]
*<span style="background-color:#ffd;">[[/注解/24節]] {{進捗|00%|2026-06-15}}</span>
;ローマ勢が徹夜の土塁工事、籠城ガッリア勢の攻勢
:
; ローマ勢が、25日間で大がかりな攻城設備を構築する
*<!--❶--><sup>(1)</sup> His [[wikt:en:tot#Latin|tot]] rebus [[wikt:en:impeditus#Latin|impedita]] [[wikt:en:oppugnatio#Latin|oppugnatione]]
**これら多くの事情により攻囲が妨げられて、
*[[wikt:en:miles#Latin|milites]],
**兵士たちは、
*cum [[wikt:en:totus#Etymology_1|toto]] tempore <u>luto</u> [[wikt:en:frigus#Latin|frigore]] et [[wikt:en:adsiduus#Latin|adsiduis]] [[wikt:en:imber#Latin|imbribus]] <u>tardarentur</u>,
**常時、<ruby><rb><u>泥土</u></rb><rp>(</rp><rt>ルトゥム</rt><rp>)</rp></ruby>、寒さと絶え間ない<ruby><rb>雨嵐</rb><rp>(</rp><rt>イムベル</rt><rp>)</rp></ruby>によって遅らせられていたが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:lutum#Latin|luto]] は、β系写本の記述で、<br> α系写本にはない。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の二つ目は、<br> χ系・β系写本では [[wikt:en:tardarentur#Latin|tardarentur]] だが、<br> 写本B・M・Sでは traderentur、<br> 写本L・Nでは terrerentur などとなっている。)</span>
*tamen [[wikt:en:continens#Adjective|continenti]] [[wikt:en:labor#Latin|labore]] omnia haec [[wikt:en:superaverunt#Latin|superaverunt]]
**しかしながら、絶え間ない労働によってこれらすべてに打ち克って、
*et diebus XXV<small> ([[wikt:en:quinque#Latin|quinque]] et [[wikt:en:viginti#Latin|viginti]])</small>
**25日間で、
*[[wikt:en:agger#Latin|aggerem]] [[wikt:en:latus#Latin:_wide|latum]] [[wikt:en:pes#Latin|pedes]] CCCXXX<small> ([[wikt:en:trecenti#Latin|trecenti]] [[wikt:en:triginta#Latin|triginta]])</small>, [[wikt:en:altus#Latin|altum]] pedes LXXX<small> ([[wikt:en:octoginta#Latin|octoginta]])</small> [[wikt:en:exstruxerunt#Latin|exstruxerunt]].
**幅330<u>ペース</u>、高さ80<u>ペース</u>の<ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>を築き上げた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、幅330ペースは約98メートル。高さ80ペースは約24メートル。)</span>
:
; アウァーリクムに籠城するガッリア勢が、攻囲するローマ勢の土塁に夜襲をしかける
*<!--❷--><sup>(2)</sup> Cum is [[wikt:en:murus#Latin|murum]] hostium paene [[wikt:en:contingeret#Latin|contingeret]],
**それ<small>〔ローマ側の土塁〕</small>が敵の城壁にほとんど接しようとしていたとき、
*et Caesar ad [[wikt:en:opus#Latin|opus]] [[wikt:en:consuetudo#Latin|consuetudine]] [[wikt:en:excubaret#Latin|excubaret]]
**かつ、カエサルが習慣により作業のそばで寝ずの番をしていて、
*[[wikt:en:miles#Latin|milites]]<nowiki>que</nowiki> [[wikt:en:hortaretur#Latin|hortaretur]], ne [[wikt:en:aliquod#Latin|quod]] [[wikt:en:omnino#Latin|omnino]] [[wikt:en:tempus#Latin|tempus]] ab [[wikt:en:opus#Latin|opere]] [[wikt:en:intermitteretur#Latin|intermitteretur]],
**いかなる時も作業がまったく中断されないように、と兵士たちを励ましていたときに、
*paulo ante tertiam [[wikt:en:vigilia#Latin|vigiliam]]
**第三夜警時の少し前に、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:第三夜警時は、真夜中から日の出までの時間帯の前半。「未明」<br> [[古代ローマの不定時法#夜警時|#夜警時]] を参照。)</span>
*est [[wikt:en:animadversus#Participle|animadversum]] [[wikt:en:fumo#Latin|fumare]] [[wikt:en:agger#Latin|aggerem]],
**土塁に煙が上がっていることが気付かれた。
*quem [[wikt:en:cuniculus#Latin|cuniculo]] hostes [[wikt:en:succenderant#Latin|succenderant]];
**<small>(その土塁を)</small>[[w:坑道|坑道]]によって敵たちが焼き討ちしていたものである。
:
*<!--❸--><sup>(3)</sup> [[wikt:en:idem#Latin|eodem]]<nowiki>que</nowiki> [[wikt:en:tempus#Latin|tempore]]
**そして同時に、
*[[wikt:en:totus#Latin|toto]] [[wikt:en:murus#Latin|muro]] [[wikt:en:clamor#Latin|clamore]] [[wikt:en:sublatus#Latin:_raised|sublato]],
**<small>(アウァーリクムの)</small>城壁全体で雄叫びが上がって、
*duabus portis ab [[wikt:en:uterque#Latin|utroque]] [[wikt:en:latus#Latin:_side|latere]] [[wikt:en:turris#Latin|turrium]]
**二つの城門より、<small>(ローマ勢の)</small>[[w:攻城塔|攻城櫓]]の両方の側面から
*[[wikt:en:eruptio#Latin|eruptio]] [[wikt:en:fiebat#Latin|fiebat]].
**<small>(ガッリア勢による)</small>突撃がなされていた。
:
*<!--❹--><sup>(4)</sup> Alii [[wikt:en:fax#Latin|faces]] atque [[wikt:en:aridus#Latin|aridam]] <u>materiam</u> de [[wikt:en:murus#Latin|muro]] in [[wikt:en:agger#Latin|aggerem]] [[wikt:en:eminus#Latin|eminus]] [[wikt:en:iaciebant#Latin|iaciebant]],
**<small>(ガッリア勢の)</small>他の者たちは、<ruby><rb>[[w:たいまつ|松明]]</rb><rp>(</rp><rt>たいまつ</rt><rp>)</rp></ruby>および乾いた材木を、城壁から<small>(ローマ側の)</small>土塁に、遠くから投げ込んで、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系写本では [[wikt:en:materiam#Latin|materiam]] だが、<br> α系写本では [[wikt:en:materiem#Latin|materiem]] となっている。<br> 文法学者[[w:カエサレアのプリスキアヌス|プリスキアーヌス]]は、カエサルの文法書 "De Analogia" について materiam と引用している。)</span>
*[[wikt:en:pix#Latin|picem]] [[wikt:en:reliquus#Latin|reliquas]]<nowiki>que</nowiki> res, quibus [[wikt:en:ignis#Latin|ignis]] [[wikt:en:excitari#Latin|excitari]] potest, [[wikt:en:fundebant#Latin|fundebant]],
**<ruby><rb>[[w:ピッチ (樹脂)|樹脂]]</rb><rp>(</rp><rt>ピッチ</rt><rp>)</rp></ruby>や、火を燃え立たせられるほかのもの<small>〔可燃物〕</small>を注ぎ込んだ。
*ut, [[wikt:en:quo#Latin:_where|quo]] primum <u>curreretur</u> aut cui rei [[wikt:en:ferretur#Latin|ferretur]] [[wikt:en:auxilium#Latin|auxilium]],
**それで、まずどこに駆け付けるのか、あるいはどの事態に支援がなされるのか、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:curreretur#Latin|curreretur]] だが、<br> β系写本では [[wikt:en:occurreretur#Latin|occurreretur]] となっている。)</span>
*vix [[wikt:en:ratio#Latin|ratio]] [[wikt:en:iniri#Latin|iniri]] posset.
**<small>(ローマ兵には)</small>ほとんど分別され得なかった。
:
*<!--❺--><sup>(5)</sup> Tamen, quod [[wikt:en:institutum#Latin|instituto]] Caesaris <u>semper duae</u> [[wikt:en:legio#Latin|legiones]] pro [[wikt:en:castra#Latin|castris]] [[wikt:en:excubabant#Latin|excubabant]]
**しかしながら、カエサルの定めにより常に2個[[w:ローマ軍団|軍団]]が陣営の前に寝ずの番をしていたので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本の語順では semper duae だが、<br> β系写本の語順では duae semper となっている。)</span>
*[[wikt:en:plus#Latin|plures]]<nowiki>que</nowiki> [[wikt:en:partitus#Latin|partitis]] [[wikt:en:tempus#Latin|temporibus]] erant in [[wikt:en:opus#Latin|opere]],
**かつ、より多くの者たちが時間を割り当てられて作業していたので、
*celeriter [[wikt:en:factus#Latin|factum]] est,
**<small>(防戦は)</small>速やかになされた。
*ut <u>alii</u> [[wikt:en:eruptio#Latin|eruptionibus]] [[wikt:en:resisterent#Latin|resisterent]],
**ある者たちは<small>(ガッリア勢の)</small>突撃に抵抗しており、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:alii ~ alii …「~する者もいれば、…する者もいる。」)</span>
*<u>alii</u> [[wikt:en:turris#Latin|turres]] [[wikt:en:reducerent#Latin|reducerent]]
**別のある者たちは[[w:攻城塔|攻城櫓]]を引き戻して、
*[[wikt:en:agger#Latin|aggerem]]<nowiki>que</nowiki> [[wikt:en:interscinderent#Latin|interscinderent]],
**土塁を<small>(城壁側から)</small>切り離していた。
*omnis vero ex [[wikt:en:castra#Latin|castris]] [[wikt:en:multitudo#Latin|multitudo]] ad [[wikt:en:restinguendum#Verb|restinguendum]] [[wikt:en:concurreret#Latin|concurreret]].
**さらに陣営から大勢の皆が、消火するために急ぎ集まっていた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===25節===
*<span style="background-color:#ffd;">[[/注解/25節]] {{進捗|00%|2026-06-29}}</span>
;籠城ガッリア勢が必死の防戦
:
*<!--❶--><sup>(1)</sup> Cum in omnibus locis, <u>[[wikt:en:consumptus#Latin|consumpta]] iam reliqua parte noctis</u>, [[wikt:en:pugnaretur#Latin|pugnaretur]],
**<u>すでに夜も明けて</u>、至る所で戦われていたときに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の直訳は「すでに夜の残りの部分も費やされて」。)</span>
*[[wikt:en:semper#Latin|semper]]<nowiki>que</nowiki> hostibus [[wikt:en:spes#Latin|spes]] [[wikt:en:victoria#Latin|victoriae]] [[wikt:en:redintegraretur#Latin|redintegraretur]],
**かつ、常に敵たちにとって勝利の希望が蘇っており、
*<u>eo magis, quod</u> [[wikt:en:deustus#Latin|deustos]] [[wikt:en:pluteus#Latin|pluteos]] [[wikt:en:turris#Latin|turrium]] [[wikt:en:videbant#Latin|videbant]] nec facile [[wikt:en:adire#Latin|adire]] [[wikt:en:apertus#Latin|apertos]] ad [[wikt:en:auxiliandum#Verb|auxiliandum]] [[wikt:en:animadvertebant#Latin|animadvertebant]],
**<span style="font-family:Times New Roman;font-size:11pt;">[[w:攻城塔|攻城櫓]]の<ruby><rb>障壁</rb><rp>(</rp><rt>プルテウス</rt><rp>)</rp></ruby>が<ruby><rb>焼き落された</rb><rp>(</rp><rt>デウストゥス</rt><rp>)</rp></ruby>のを見ていて、<ruby><rb>身を曝した者</rb><rp>(</rp><rt>アペルトゥス</rt><rp>)</rp></ruby>たちが救援のために容易に近づけないのに気付いていた<u>のでなおさらだったが</u>、</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:eo magis quod|eo magis quod]] ~ 「~なので、その分だけ、より一層」。[[ガリア戦記 第3巻#14節|第3巻14節]]も参照。)</span>
*[[wikt:en:semper#Latin|semper]]<nowiki>que</nowiki> ipsi [[wikt:en:recens#Adjective|recentes]] [[wikt:en:defessus#Latin|defessis]] [[wikt:en:succederent#Latin|succederent]]
**常に彼ら自身<small>〔籠城ガッリア勢〕</small>は新たな者たちが疲れ果てた者たちに交代しており、
*[[wikt:en:omnis#Latin|omnem]]<nowiki>que</nowiki> Galliae [[wikt:en:salus#Latin|salutem]] <u>in illo [[wikt:en:vestigium#Latin|vestigio]] temporis [[wikt:en:positus#Participle|positam]] <span style="color:#009900;"><small>(esse)</small></span></u> [[wikt:en:arbitrarentur#Latin|arbitrarentur]],
**ガッリアのすべての安全が、<u>その瞬間にかかっている</u>と思われていたので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の直訳は「その時の足跡(瞬間)に置かれている」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:以上の cum ~ arbitrarentur, が状況や理由を説明する副文で、以下が主文となっている。)</span>
*[[wikt:en:accidit#Etymology_1|accidit]] [[wikt:en:inspectans#Latin|inspectantibus]] nobis,
**我が方<small>〔ローマ勢〕</small>が見ているなかで起こったのは、
*[[wikt:en:quod#Pronoun|quod]] [[wikt:en:dignus#Latin|dignum]] [[wikt:en:memoria#Latin|memoria]] [[wikt:en:visus#Participle|visum]] [[wikt:en:praetereundus#Latin|praetereundum]] non [[wikt:en:existimavimus#Latin|existimavimus]].
**記憶に値すると思われたことを<small>(我がローマ勢が)</small>見過ごすべきではないと考えていたことである。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:この主文の主語を省略せずに記せば、以下のようになる。<br> [id], quod dignum memoria visum [esse] praetereundum [esse] non existimavimus.)</span>
[[画像:048_Conrad_Cichorius,_Die_Reliefs_der_Traianssäule,_Tafel_XLVIII_(Ausschnitt 01).jpg|thumb|right|250px|<ruby><rb>[[w:スコルピオ|投射機]]</rb><rp>(</rp><rt>スコルピオー</rt><rp>)</rp></ruby>を操作する[[w:ダキア人|ダキア人]]の彫刻([[w:トラヤヌスの記念柱|トラヤヌス帝の記念柱]]に刻まれた[[w:レリーフ|レリーフ]])。]]
[[画像:Balliste_fireing.jpg|thumb|right|250px|<ruby><rb>[[w:スコルピオ|投射機]]</rb><rp>(</rp><rt>スコルピオー</rt><rp>)</rp></ruby>([[w:en:Scorpio (dart-thrower)|Scorpio]])の現代における復元。]]
:
*<!--❷--><sup>(2)</sup> [[wikt:en:quidam#Determiner|Quidam]] ante portam oppidi [[wikt:en:Gallus#Noun|Gallus]], <u>qui</u>
**城塞都市の城門の前にいた、ある<small>(1人の)</small>ガッリア人が、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の qui は、β系写本の記述で、α系写本にはない。)</span>
*per [[wikt:en:manus#Latin:_hand|manus]] [[wikt:en:sebum#Latin|sebi]] ac [[wikt:en:pix#Latin|picis]] [[wikt:en:traditus#Participle|traditas]] [[wikt:en:glaeba#Latin|glaebas]]
**手から手へと渡された<ruby><rb>獣脂</rb><rp>(</rp><rt>セーブム</rt><rp>)</rp></ruby>や<ruby><rb>[[w:ピッチ (樹脂)|樹脂]]</rb><rp>(</rp><rt>ピッチ</rt><rp>)</rp></ruby>の塊を、
*in [[wikt:en:ignis#Latin|ignem]] <u>e regione</u> turris [[wikt:en:proiciebat#Latin|proiciebat]]:
**攻城櫓の正面にある火炎の中に投げ込んでいたが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:e_regione#Latin|ē regiōne]]「まっすぐに」「~の真向かいに」。)</span>
*[[wikt:en:scorpio#Latin|scorpione]] ab [[wikt:en:latus#Latin:_side|latere]] [[wikt:en:dexter#Latin|dextro]] [[wikt:en:traiectus#Participle|traiectus]]
**<ruby><rb>[[w:スコルピオ|投射機]]</rb><rp>(</rp><rt>スコルピオー</rt><rp>)</rp></ruby>で右の横腹を射られて、
*[[wikt:en:exanimatus#Latin|exanimatus]]<nowiki>que</nowiki> [[wikt:en:concidit#Verb|concidit]].
**息絶えて倒れた。
:
*<!--❸--><sup>(3)</sup> Hunc ex [[wikt:en:proximus#Noun|proximis]] unus [[wikt:en:iacens#Latin|iacentem]] [[wikt:en:transgressus#Latin|transgressus]]
**彼が倒れているのを、すぐ近くの者たちのうちの1人が乗り越えて、
*[[wikt:en:idem#Latin|eodem]] illo [[wikt:en:munus#Latin|munere]] [[wikt:en:fungebatur#Latin|fungebatur]];
**その同じ<ruby><rb>任務</rb><rp>(</rp><rt>ムーヌス</rt><rp>)</rp></ruby>を果たしていた。
*[[wikt:en:idem#Latin|Eadem]] [[wikt:en:ratio#Latin|ratione]] [[wikt:en:ictus#Noun_4|ictu]] [[wikt:en:scorpio#Latin|scorpionis]] [[wikt:en:exanimatus#Latin|exanimato]]
**<small>(その第2の者が)</small>同様に<ruby><rb>[[w:スコルピオ|投射機]]</rb><rp>(</rp><rt>スコルピオー</rt><rp>)</rp></ruby>の射撃で息絶えさせられると
*alteri [[wikt:en:successit#Latin|successit]] tertius
**<small>(息絶えた)</small>第2の者に第3の者が代わって、
*et tertio quartus,
**<small>(さらに)</small>第3の者に第4の者が<small>(代わった)</small>。
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> <u>nec prius</u> ille est a [[wikt:en:propugnator#Latin|propugnatoribus]] [[wikt:en:vacuus#Latin|vacuus]] [[wikt:en:relictus#Participle|relictus]] locus
**防戦者たちは、持ち場を放棄することがなかった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:直訳は「その場(ille locus)は、防戦者たちによって空<small>〔無人〕</small>にして置かれることがなかった。」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:nec [[wikt:en:prius#Adverb|prius]] ~ [[wikt:en:quam#Conjunction|quam]] …「…するまでは~しなかった」)</span>
*<u>quam</u> [[wikt:en:restinctus#Latin|restincto]] [[wikt:en:agger#Latin|aggere]] atque <u>omni ex parte</u> [[wikt:en:submotus#Latin|submotis]] hostibus [[wikt:en:finis#Latin:_end|finis]] est [[wikt:en:pugnandi#Verb|pugnandi]] [[wikt:en:factus#Latin:_done|factus]].
**<ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>が鎮火されて、そのすべての方面から敵たちが追い払われて、戦いに終止符が打たれる<u>までは</u>。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、omni <u>ex</u> parte は ''[[ガリア戦記/注解編/写本と校訂版#Ciacconius|Ciacconius]]'' による修正で、<br> α系写本では omni <u>ea</u> parte <br> β系写本では omni parte となっている。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===26節===
*<span style="background-color:#ffd;">[[/注解/26節]] {{進捗|00%|2026-07-13}}</span>
;アウァーリクム脱出の企て、女たちの絶叫
:
; 万策尽きたガッリア勢が、アウァーリクム脱出を企てる
*<!--❶--><sup>(1)</sup> [[wikt:en:omnia#Noun|Omnia]] [[wikt:en:expertus#Participle|experti]] [[wikt:en:Galli#Latin|Galli]],
**ガッリア人たちはあらゆることを試みたが、
*quod res [[wikt:en:nullus#Determiner|nulla]] [[wikt:en:successerat#Latin|successerat]],
**何ら事が成功しなかったので、
*[[wikt:en:posterus#Latin|postero]] die [[wikt:en:consilium#Latin|consilium]] [[wikt:en:ceperunt#Latin|ceperunt]] ex [[wikt:en:oppidum#Latin|oppido]] [[wikt:en:profugio#Latin|profugere]],
**<small>(戦いの夜が明けて)</small>翌日には、<small>(アウァーリクムの)</small><ruby><rb>城塞都市</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>から退避する計画を立てた。
*[[wikt:en:hortans#Latin|hortante]] et [[wikt:en:iubens#Latin|iubente]] [[wikt:en:Vercingetorix#Latin|Vercingetorige]].
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]によって促され、命じられたものであった。
:
; 脱出をはかるガッリア勢の期待とその理由
*<!--❷--><sup>(2)</sup> Id [[wikt:en:silentium#Latin|silentio]] noctis [[wikt:en:conatus#Participle|conati]]
**そのこと<small>〔アウァーリクムからの退避〕</small>を夜の静けさのうちに試みても、
*non magna <u>iactura</u> suorum
**味方の大きな<ruby><rb>犠牲</rb><rp>(</rp><rt>ヤクトゥーラ</rt><rp>)</rp></ruby>もなしに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:iactura#Noun|iactura]] は「投げ捨てること」、比喩的に「損害、犠牲」。)</span>
*sese [[wikt:en:effecturus#Latin|effecturos]] <span style="color:#009900;"><small>(esse)</small></span> [[wikt:en:sperabant#Latin|sperabant]],
**自分たちは成し遂げるだろうと期待していた。
*<u>propterea quod</u> <u>neque</u> longe ab oppido [[wikt:en:castra#Latin|castra]] [[wikt:en:Vercingetorix#Latin|Vercingetorigis]] [[wikt:en:aberant#Latin|aberant]],
**──というのも、ウェルキンゲトリークスの陣営は<small>(アウァーリクムの)</small></small><ruby><rb>城塞都市</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>からあまり離れていなかったし、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:propterea_quod#Latin|propterea quod]] ~「なぜなら~からである」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:neque ~ et …「~ではなく、…である」)</span>
*<u>et</u> [[wikt:en:palus#Latin|palus]], <u>quae [[wikt:en:perpetuus#Latin|perpetua]]</u> [[wikt:en:intercedebat#Latin|intercedebat]], [[wikt:en:Romani#Latin|Romanos]] ad [[wikt:en:insequendum#Verb|insequendum]] [[wikt:en:tardabat#Latin|tardabat]].
**沼地も絶え間なく介在していて、ローマ人たちの追跡を遅らせていたからだ。──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:二つ目の下線部は、α系写本の語順は quae perpetua だが、<br> β系写本の語順は perpetua quae となっている。)</span>
:
; 母親たちが男たちに、女子供を置き去りにして敵のいけにえにするな、と哀願する
*<!--❸--><sup>(3)</sup> [[wikt:en:iam#Latin|Iam]]<nowiki>que</nowiki> <u>hoc</u> facere [[wikt:en:noctu#Latin|noctu]] [[wikt:en:apparabant#Latin|apparabant]],
**すでに、<u>このことを</u>実行することを夜間に準備していた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、主要写本ω では [[wikt:en:haec#Latin|haec]]<sub> (中性・複数・対格)</sub> だが、<br> 最初の印刷本 [[ガリア戦記/注解編/写本と校訂版#Editio_princeps|ed.pr]] では [[wikt:en:hoc#Latin:_this|hoc]]<sub> (中性・単数・対格)</sub> としている。)</span>
*<u>cum</u> [[wikt:en:mater#Latin|matres]] [[wikt:en:familia#Latin|familiae]] [[wikt:en:repente#Adverb_2|repente]] in [[wikt:en:publicum#Noun|publicum]] [[wikt:en:procurrerunt#Latin|procurrerunt]],
**そのときに家族の母親たちが不意に公の場に走り出て来て、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の cum は、「倒逆のcum」([[wikt:en:cum inversum|cum inversum]])と呼ばれ、<br> cum 以下 ~ impediret までの副文が、上記の主文よりも重要な構文の中心になる。)</span>
*[[wikt:en:flens#Latin|flentes]]<nowiki>que</nowiki> [[wikt:en:proiectus#Latin|proiectae]] ad [[wikt:en:pes#Latin|pedes]] suorum
**泣きながら、味方<small>(の男たち)</small>の足元に<small>(身を)</small>投げ出して、
*omnibus [[wikt:en:prex#Latin|precibus]] [[wikt:en:petierunt#Latin|petierunt]],
**あらゆる懇願でもって頼んだ。
*ne se et [[wikt:en:communis#Latin|communes]] [[wikt:en:liberi#Noun_2|liberos]] hostibus ad [[wikt:en:supplicium#Latin|supplicium]] [[wikt:en:dederent#Latin|dederent]],
**自分たち<small>〔女たち〕</small>と<small>(男たちとの)</small>共通の子供たちを、処刑されることのために敵方に引き渡さないで、
*<u>quos</u> ad [[wikt:en:capiendus#Latin|capiendam]] [[wikt:en:fuga#Latin|fugam]] [[wikt:en:natura#Latin|naturae]] et [[wikt:en:vis#Latin|virium]] [[wikt:en:infirmitas#Latin|infirmitas]] [[wikt:en:impediret#Latin|impediret]].
**それらの者<small>〔女子供たち〕</small>が逃亡をとるためには、性質や体力の弱さが、妨げるのだ、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:quos#Latin|quos]]<sub> (男性・複数・対格)</sub> だが、<br> β系写本では [[wikt:en:quas#Latin|quas]]<sub> (女性・複数・対格)</sub> となっている。)</span>
:
; 窮した母親たちが、男たちの脱出の兆候をローマ人に伝えようとする
*<!--❹--><sup>(4)</sup> [[wikt:en:ubi#Latin|Ubi]] eos in [[wikt:en:sententia#Latin|sententia]] [[wikt:en:perstare#Latin|perstare]] [[wikt:en:viderunt#Latin|viderunt]],
**彼ら<small>〔男たち〕</small>が<small>(女・子供を置き去りで脱出するという)</small>意思を固持していると<small>〔女たちが〕</small>見て取るや、
*[[wikt:en:quod#Conjunction|quod]] [[wikt:en:plerumque#Adverb|plerumque]] in [[wikt:en:summus#Latin|summo]] [[wikt:en:periculum#Latin|periculo]] [[wikt:en:timor#Latin|timor]] [[wikt:en:misericordia#Latin|misericordiam]] non [[wikt:en:recipit#Latin|recipit]],
**──というのは、たいてい最大級の危険においては、恐怖が<ruby><rb>憐憫</rb><rp>(</rp><rt>れんびん</rt><rp>)</rp></ruby>の<ruby><rb>情</rb><rp>(</rp><rt>じょう</rt><rp>)</rp></ruby>を受け入れないものであるからだが、──
*[[wikt:en:conclamo#Latin|conclamare]] et [[wikt:en:significo#Latin|significare]] de [[wikt:en:fuga#Latin|fuga]] [[wikt:en:Romani#Latin|Romanis]] [[wikt:en:coeperunt#Latin|coeperunt]].
**<small>(女たちは)</small>叫び声を上げて、ローマ人たちに<small>(男たちの)</small>逃亡について知らしめ始めた。
:
; ガッリア勢の男たちが、ローマ側の騎兵隊を恐れて、アウァーリクム脱出を断念する
*<!--❺--><sup>(5)</sup> [[wikt:en:qui#Determiner|Quo]] [[wikt:en:timor#Latin|timore]] [[wikt:en:perterritus#Latin|perterriti]] [[wikt:en:Galli#Latin|Galli]],
**<small>(女たちがローマ側へ男たちの脱出について報知したことで)</small>その恐怖によって脅かされたガッリア人<small>(の男)</small>たちは、
*[[wikt:en:ne#Latin:_no|ne]] ab [[wikt:en:equitatus#Latin|equitatu]] Romanorum [[wikt:en:via#Latin|viae]] [[wikt:en:praeoccuparentur#Latin|praeoccuparentur]],
**ローマ方の[[w:騎兵|騎兵隊]]によって道があらかじめ占拠されないように、
*[[wikt:en:consilium#Latin|consilio]] [[wikt:en:destiterunt#Latin|destiterunt]].
**<small>(アウァーリクムからの脱出の)</small>計画を取り止めた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===27節===
[[画像:Avaricum_westpoint_july_2006.jpg|thumb|right|300px|[[w:アウァリクム包囲戦|アウァーリクム攻略戦]]の[[w:ジオラマ|ジオラマ]](再掲;[[w:陸軍士官学校 (アメリカ合衆国)|米国陸軍士官学校]]博物館)。ローマ軍の<ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>の周辺には、<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby>(vinea)の両端を開いて多数つないだ廊下状の通路(坑道)が延びている。]]
*<span style="background-color:#ffd;">[[/注解/27節]] {{進捗|00%|2026-08-01}}</span>
;ローマ軍が大雨の中でアウァーリクムの城壁を占拠
:
*<!--❶--><sup>(1)</sup> Postero die Caesar,
**翌日にカエサルは、
*[[wikt:en:promotus#Latin|promota]] [[wikt:en:turris#Latin|turri]]
**<small>(後退していた)</small>[[w:攻城塔|攻城櫓]]<small>(の1基)</small>が前進させられて、
*<u>perfectis</u><nowiki>que</nowiki> [[wikt:en:opus#Latin|operibus]], quae facere [[wikt:en:instituerat#Latin|instituerat]],
**実施を定めていた作業が<u>成し遂げられると</u>、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> π系写本では [[wikt:en:perfectis#Latin|perfectīs]] 「完成されると」だが、<br> α系・ρ系写本では [[wikt:en:derectis#Latin|dērēctīs]] 「整えられると」<br> となっている。)</span>
*magno [[wikt:en:coortus#Latin|coorto]] <u>imbre</u>
**激しい嵐が起こったが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:imbre#Latin|imbre]] だが、β系写本では [[wikt:en:imbri#Latin|imbri]] となっている。)</span>
*non [[wikt:en:inutilis#Latin|inutilem]] hanc ad [[wikt:en:capiendus#Latin|capiendum]] [[wikt:en:consilium#Latin|consilium]] [[wikt:en:tempestas#Latin|tempestatem]] <u>arbitratus est</u>,
**作戦計画を立てるために、この天候は不利ではないと思われた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:arbitratus#Participle|arbitratus]] est だが、β系写本では単に arbitratus となっている。)</span>
*[[wikt:en:quod#Conjunction|quod]] paulo [[wikt:en:incautius#Adverb|incautius]] [[wikt:en:custodia#Latin|custodias]] in [[wikt:en:murus#Latin|muro]] [[wikt:en:dispositus#Latin|dispositas]] [[wikt:en:videbat#Latin|videbat]],
**──というのは、城壁に配置された番兵たちが少しより油断していると見ていたからだが、──
*<u>suosque</u> [[wikt:en:languide#Adverb|languidius]] in [[wikt:en:opus#Latin|opere]] [[wikt:en:versor#Latin|versari]] [[wikt:en:iussit#Verb|iussit]]
**配下の者たちには<small>(わざと)</small>より緩慢に作業に従事することを命じて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:suos#Latin|suōs]]<nowiki>que</nowiki> だが、β系写本では [[wikt:en:suos#Latin|suōs]] [[wikt:en:quoque#Adverb|quoque]] となっている。)</span>
*et, [[wikt:en:quid#Pronoun_2|quid]] [[wikt:en:fieri#Latin|fieri]] [[wikt:en:vellet#Latin|vellet]], [[wikt:en:ostendit#Latin|ostendit]].
**何がなされることを<small>(カエサルが)</small>欲しているか、を示した。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:legio#Latin|Legionibus]]<nowiki>que</nowiki> <u>extra castra intra [[wikt:en:vinea#Latin|vineas]]</u> in occulto [[wikt:en:expeditus#Participle|expeditis]],
**[[w:ローマ軍団|諸軍団]]が<u>陣営の外の<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby>の内側で</u>ひそかに準備を整えており、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、写本や校訂版によって異同がある。[[ガリア戦記_第7巻/注解/27節#注記|注記]]を参照。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:in_occulto#Latin|in occulto]]「ひそかに」「隠れた所で」)</span>
*[[wikt:en:cohortatus#Latin|cohortatus]], ut [[wikt:en:aliquando#Latin|aliquando]] pro [[wikt:en:tantus#Latin|tantis]] [[wikt:en:labor#Latin|laboribus]] [[wikt:en:fructus#Latin:_noun|fructum]] victoriae [[wikt:en:perciperent#Latin|perciperent]],
**<small>(カエサルは)</small>やっと、これほどの労苦の見合う勝利の報酬を我がものとするように激励し、
*iis, qui [[wikt:en:primus#Latin|primi]] [[wikt:en:murus#Latin|murum]] [[wikt:en:adscendissent#Latin|adscendissent]], [[wikt:en:praemium#Latin|praemia]] [[wikt:en:proposuit#Latin|proposuit]]
**一番乗りとして城壁に登った者たちには、恩賞を約束して、
*[[wikt:en:miles#Latin|militibus]]<nowiki>que</nowiki> [[wikt:en:signum#Latin|signum]] [[wikt:en:dedit#Latin|dedit]].
**兵士たちに号令を発した。
:
*<!--❸--><sup>(3)</sup> Illi [[wikt:en:subito#Adverb_8|subito]] ex omnibus partibus [[wikt:en:evolaverunt#Latin|evolaverunt]]
**彼ら<small>〔ローマ軍団兵〕</small>は不意にあらゆる方角から飛び出して、
*[[wikt:en:murus#Latin|murum]]<nowiki>que</nowiki> celeriter [[wikt:en:compleverunt#Latin|compleverunt]].
**速やかに<small>(アウァーリクムの)</small>城壁を埋め尽くしたのだ。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===28節===
*<span style="background-color:#ffd;">[[/注解/28節]] {{進捗|00%|2026-08-11}}</span>
;ローマ軍がアウァーリクムの市民4万人を大虐殺
:
*<!--❶--><sup>(1)</sup> Hostes re nova [[wikt:en:perterritus#Latin|perterriti]],
**敵たち<small>〔籠城するガッリア勢〕</small>は新たな事態に脅かされて、
*[[wikt:en:murus#Latin|muro]] [[wikt:en:turris#Latin|turribus]]<nowiki>que</nowiki> [[wikt:en:deiectus#Participle|deiecti]]
**<small>(ローマ兵によって)</small>城壁や櫓から追い落とされて、
*in [[wikt:en:forum#Latin|foro]] ac locis [[wikt:en:patentior#Latin|patentioribus]] [[wikt:en:cuneatim#Latin|cuneatim]] [[wikt:en:constiterunt#Etymology_1|constiterunt]],
**<ruby><rb>広場</rb><rp>(</rp><rt>フォルム</rt><rp>)</rp></ruby>や開けた場所に楔状に立ちふさがった。
*hoc animo, ut, si [[wikt:en:aliqui#Latin|qua]] ex parte [[wikt:en:obviam#Adverb|obviam]] <span style="color:#009900;">[</span>contra<span style="color:#009900;">]</span> [[wikt:en:veniretur#Latin|veniretur]], [[wikt:en:acies#Latin|acie]] [[wikt:en:instructus#Latin|instructa]] [[wikt:en:depugnarent#Latin|depugnarent]].
**もし、どの方向から相対して対抗して来られても、戦列を整えて決戦しようという心積もりでいたのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:contra#Latin|contra]] は α系・π系写本・写本Rにある記述だが、<br> 写本U にはなく、削除提案されている。)</span>
:
*<!--❷--><sup>(2)</sup> Ubi [[wikt:en:nemo#Latin|neminem]] in aequum locum sese [[wikt:en:demitto#Latin|demittere]], sed [[wikt:en:totus#Latin:_whole|toto]] [[wikt:en:undique#Latin|undique]] [[wikt:en:murus#Latin|muro]] [[wikt:en:circumfundi#Latin|circumfundi]] [[wikt:en:viderunt#Latin|viderunt]],
**<small>(ローマ兵が)</small>誰も平らな所に降りて来ず、しかし城壁全体の至る所で取り囲まれたことを見たときに、
*[[wikt:en:veritus#Latin|veriti]], ne [[wikt:en:omnino#Latin|omnino]] spes fugae [[wikt:en:tolleretur#Latin|tolleretur]],
**<small>(籠城ガッリア勢は)</small>逃亡のあらゆる希望を奪われないかと怖れて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:veriti, [[wikt:en:ne#Latin:_no|ne]] ~ 「~ではないかと恐れて」恐れの表現。)</span>
*[[wikt:en:abiectus#Latin|abiectis]] [[wikt:en:arma#Latin|armis]]
**武器を投げ捨てて、
*[[wikt:en:ultimus#Latin|ultimas]] oppidi partes
**城塞都市の<small>(ローマ勢から)</small>最も遠くの方面を
*[[wikt:en:continens#Latin|continenti]] [[wikt:en:impetus#Latin|impetu]] [[wikt:en:petiverunt#Latin|petiverunt]],
**絶え間ない殺到によって求めた。
:
*<!--❸--><sup>(3)</sup> <u>pars</u><nowiki>que</nowiki> ibi, cum [[wikt:en:angustus#Latin|angusto]] [[wikt:en:exitus#Latin|exitu]] portarum se ipsi [[wikt:en:premerent#Latin|premerent]], a militibus,
**ある者たちは、城門の狭い出口で自分らで互いに押し合っていたので、そこで<small>(ローマ人)</small>兵士たちによって<small>(殺され)</small>、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:pars#Latin|pars]] ~, pars …「ある者たちは~、別の者たちは…」。)</span>
*<u>pars</u> iam [[wikt:en:egressus#Latin|egressa]] portis ab [[wikt:en:eques#Latin|equitibus]] est [[wikt:en:interfectus#Latin|interfecta]].
**別の者たちはすでに城門を出ていたが、<small>(ローマ側の)</small>[[w:騎兵|騎兵]]たちによって虐殺された。
:
*<!--❹--><sup>(4)</sup> [[wikt:en:nec#Latin|Nec]] fuit [[wikt:en:quisquam#Pronoun|quisquam]], qui [[wikt:en:praeda#Latin|praedae]] [[wikt:en:studeret#Latin|studeret]].
**<small>(ローマ勢には)</small>戦利品を熱心に求める何者もいなかった。
*[[wikt:en:sic#Latin|Sic]] et <u>Cenabi</u> [[wikt:en:caedes#Latin|caede]] et [[wikt:en:labor#Latin|labore]] [[wikt:en:opus#Latin|operis]] [[wikt:en:incitatus#Latin|incitati]]
**このように、ケナブムの<small>(ローマ市民の)</small>殺害にも、(攻城)作業の労苦にも煽られて
**:<span style="color:#009900;">(訳注:カルヌーテース族によるローマ市民の殺害については[[#3節|3節]]を参照。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の cenabi は、α系写本では [[wikt:en:Genabi#Latin|genabi]] <br> ρ系写本や写本Tでは [[wikt:en:Genabensi#Adjective|genabensi]]<br> 写本Uおよび写本Tの一部では cenabensi となっている。<br> なお、cenabi, cenabensi はケルト語風の表記である。)</span>
*non [[wikt:en:aetas#Latin|aetate]] [[wikt:en:confectus#Latin|confectis]],
**<small>(ローマ勢は)</small>年老いた者たちも、
*non [[wikt:en:mulier#Latin|mulieribus]],
**妻女たちも、
*non [[wikt:en:infans#Noun|infantibus]] [[wikt:en:pepercerunt#Latin|pepercerunt]].
**乳幼児たちも<small>(虐殺することを)</small>思いとどまらなかった。
**:<span style="color:#009900;">(訳注:ビトゥリゲース族はローマ市民の殺害には関与しておらず、報復される対象とするのは的外れである。</span>
**:<span style="color:#009900;">ましてや非戦闘員である老人・女性・子供たちまで殺戮するのは、戦争の狂気というしかない。)</span>
:
*<!--❺--><sup>(5)</sup> [[wikt:en:denique#Latin|Denique]] ex omni <u><span style="color:#009900;">eo</span></u> numero, qui fuit circiter milium XL<small> ([[wikt:en:quadraginta#Latin|quadraginta]])</small>,
**ついには、約40000名もいたすべての人員のうち、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:eo#Latin:_there|eo]] は β系写本の記述で、α系写本にはない。)</span>
*vix DCCC<small> ([[wikt:en:octingenti#Latin|octingenti]])</small>, qui primo [[wikt:en:clamor#Latin|clamore]] [[wikt:en:auditus#Latin|audito]] se ex oppido <u>eiecerunt</u>,
**やっと800名が、はじめにどよめきを聞いて、城塞都市から急ぎ出て、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:eiecerunt#Latin|eiecerunt]]<small> (直接法・完了)</small> だが、<br> β系写本では [[wikt:en:eiecerant#Latin|eiecerant]]<small> (直接法・過去完了)</small> となっている。)</span>
*[[wikt:en:incolumis#Latin|incolumes]] ad [[wikt:en:Vercingetorix#Latin|Vercingetorigem]] [[wikt:en:pervenerunt#Latin|pervenerunt]].
**無傷のままで[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]のもとへ到着した。
:
*<!--❻--><sup>(6)</sup> Quos ille multa iam nocte <u>silentio</u> ex fuga [[wikt:en:excepit#Latin|excepit]],
**彼<small>〔ウェルキンゲトリークス〕</small>は、逃亡して来たその者たちを、すでに夜も更けた<u>静寂のうちに</u>迎え入れた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:silentio#Latin|silentio]] だが、β系写本にはない。<br> 他方、β系写本では [[wikt:en:sic#Latin|sic]] とあるが、α系写本にはない。)</span>
*[[wikt:en:veritus#Latin|veritus]], ne qua in castris ex eorum [[wikt:en:concursus#Latin:_convergence|concursu]] et [[wikt:en:misericordia#Latin|misericordia]] [[wikt:en:vulgus#Latin|vulgi]] seditio <u>oreretur</u>,
**彼らの密集や一般兵士たちの同情から、陣営の中で何らかの暴動が生じないように怖れて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ne [[wikt:en:aliqui#Latin|qua (aliqua)]] ~ [[wikt:en:seditio#Latin|seditio]]「何らかの暴動が~ないように」
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、一部の写本は [[wikt:en:oreretur#Latin|oreretur]] だが、<br> 他の写本では [[wikt:en:oriretur#Latin|oriretur]] となっているが、語形の相違。)</span>
*ut procul in via [[wikt:en:dispositus#Latin|dispositis]] [[wikt:en:familiaris#Noun|familiaribus]] suis [[wikt:en:princeps#Latin|principibus]]<nowiki>que</nowiki> [[wikt:en:civitas#Latin|civitatum]],
**自らの郎党たちや部族の領袖たちを<small></small>(陣営の)遠くから道沿いに配置して、
*[[wikt:en:disparandus#Latin|disparandos]] [[wikt:en:deducendus#Latin|deducendos]]<nowiki>que</nowiki> ad suos [[wikt:en:curaret#Latin|curaret]],
**<small>(敗走者たちを)</small>味方のもとへ、引き離して連れて行くように手配した。
*quae [[wikt:en:cuique#Latin|cuique]] civitati pars castrorum ab [[wikt:en:initium#Latin|initio]] [[wikt:en:obvenerat#Latin|obvenerat]].
**陣営の各部分は、おのおのの部族にはじめから与えられていたのだ。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===29節===
*<span style="background-color:#ffd;">[[/注解/29節]] {{進捗|00%|2026-08-11}}</span>
[[画像:Vercingetorix stater CdM.jpg|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の横顔が刻まれたガリアの金貨(パリの[[w:ビブリオテーク・ナショナル|仏国立図書館]]貨幣部蔵)]]
;ウェルキンゲトリークスが演説で味方を鼓舞する
:
*<!--❶--><sup>(1)</sup> Postero die [[wikt:en:concilium#Latin|concilio]] [[wikt:en:convocatus#Latin|convocato]],
**翌日に、会合が召集されると、
*[[wikt:en:consolatus#Latin|consolatus]] [[wikt:en:cohortatus#Latin|cohortatus]]<nowiki>que</nowiki> est,
**<small>(ウェルキンゲトリークスは、味方の者たちを)</small>慰めて、励ました:
*<u>ne</u> se [[wikt:en:admodum#Latin|admodum]] animo [[wikt:en:demitterent#Latin|demitterent]],
**あまり気を落とさないように、
*<u>ne</u> [[wikt:en:perturbarentur#Latin|perturbarentur]] [[wikt:en:incommodum#Latin|incommodo]].
**敗北により取り乱さないように、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:上の下線部は、α系写本では [[wikt:en:ne#Latin:_no|ne]] ~ ne だが、<br> β系写本では ne ~ [[wikt:en:neve#Latin|neve]] となっている。)</span>
:
*<!--❷--><sup>(2)</sup> Non [[wikt:en:virtus#Latin|virtute]] neque in [[wikt:en:acies#Latin|acie]] [[wikt:en:vicisse#Latin|vicisse]] [[wikt:en:Romani#Latin|Romanos]],
**ローマ人たちが勝ったのは、武勇においてでも、戦列<small>〔野外の合戦〕</small>においてでもなく、
*sed [[wikt:en:artificium#Noun|artificio]] [[wikt:en:quidam#Determiner|quodam]] et [[wikt:en:scientia#Latin:_knowledge|scientia]] [[wikt:en:oppugnatio#Latin|oppugnationis]],
**ある種の技巧および攻城戦の知識によるものであって、
*cuius rei [[wikt:en:fuerint#Latin|fuerint]] ipsi [[wikt:en:imperitus#Latin|imperiti]].
**その事柄に<small>(ガッリア人)</small>自身が通じていなかったのだ。
**:<span style="color:#009900;">(訳注:[[ガリア戦記 第5巻#42節|第5巻42節]]では、ネルウィイー族らガッリア北部のベルガエ勢はローマ人の攻城術をまねていた。)</span>
:
*<!--❸--><sup>(3)</sup> [[wikt:en:erro#Latin:_wander|Errare]], si [[wikt:en:aliqui#Latin|qui]] in [[wikt:en:bellum#Latin|bello]] omnes [[wikt:en:secundus#Adjective|secundos]] rerum [[wikt:en:proventus#Latin|proventus]] [[wikt:en:exspectent#Latin|exspectent]].
**誰であれ、戦争において、万事が順調な成功になることを期待するのならば、<small>(その者らは)</small>誤っている。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:語順が判りにくいが、<br> 物事のすべて(omnes rerum)が幸運な結果(secundos proventus)であることを期待するのならば~。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:errare の意味上の主語([[wikt:en:eos#Latin|eos]])が省略されている。)</span>
:
*<!--❹--><sup>(4)</sup> Sibi [[wikt:en:numquam#Latin|numquam]] [[wikt:en:placuisse#Latin|placuisse]] [[wikt:en:Avaricum#Latin|Avaricum]] [[wikt:en:defendi#Latin|defendi]],
**自分<small>〔ウェルキンゲトリークス〕</small>にとって、アウァーリクムが防衛されることは決して好ましいものではなかった。
*cuius rei [[wikt:en:testis#Latin:_witness|testes]] ipsos [[wikt:en:haberet#Latin|haberet]];
**その事の証人は<small>(諸君ら)</small>自身である。
*sed <u>factum</u> [[wikt:en:inprudentia#Latin|inprudentia]] [[wikt:en:Bituriges#Latin|Biturigum]] et [[wikt:en:nimius#Latin|nimia]] [[wikt:en:obsequentia#Latin|obsequentia]] reliquorum, <u>uti</u> hoc [[wikt:en:incommodum#Latin|incommodum]] [[wikt:en:acciperetur#Latin|acciperetur]].
**だが、ビトゥリゲース族の軽率さと、ほかの者たちの過度な同調により、この敗北を蒙るようになったのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:factus#Latin:_done|factum]] (esse) ~ [[wikt:en:uti#Latin:_how|uti]] …「…ようになった」)</span>
:
*<!--❺--><sup>(5)</sup> Id tamen se celeriter [[wikt:en:maior#Adjective_2|maioribus]] [[wikt:en:commodum#Latin:noun|commodis]] [[wikt:en:sanaturus#Latin|sanaturum]] <span style="color:#009900;">(esse)</span>.
**しかしながら、自分がそれ<small>〔敗北〕</small>を速やかに大いなる勝利によって埋め合わせるであろう。
:
*<!--❻--><sup>(6)</sup> Nam quae ab reliquis [[wikt:en:Galli#Latin:_Gauls|Gallis]] civitates [[wikt:en:dissentirent#Latin|dissentirent]],
**一方、<small>(ウェルキンゲトリークスら)</small>ほかのガッリア人たちとは意見を相異する諸部族、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:先行詞 [[wikt:en:civitas#Latin|civitates]] が quae 以下の関係文中に入り込む倒置の語順。)</span>
*has sua [[wikt:en:diligentia#Noun|diligentia]] [[wikt:en:adiuncturus#Latin|adiuncturum]] <span style="color:#009900;">(esse)</span>
**彼ら<small>〔諸部族〕</small>を自分<small>〔ウェルキンゲトリークス〕</small>の入念さにより合流させるであろうし、
*atque unum [[wikt:en:consilium#Latin|consilium]] [[wikt:en:totus#Latin:_whole|totius]] [[wikt:en:Gallia#Latin|Galliae]] [[wikt:en:effecturus#Latin|effecturum]] <span style="color:#009900;">(esse)</span>,
**全ガッリアの考えを一つにするであろう。
*cuius [[wikt:en:consensus#Latin|consensui]] ne orbis quidem terrarum [[wikt:en:possit#Latin|possit]] [[wikt:en:obsistere#Latin|obsistere]];
**その団結には、全世界でさえ邪魔することはできない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:orbis#Latin|orbis]] [[wikt:en:/terrarum#Latin|terrarum]]「全世界」)</span>
*[[wikt:en:id#Latin|id]]<nowiki>que</nowiki> se [[wikt:en:prope#Adverb|prope]] iam [[wikt:en:effectus#Latin:_participle|effectum]] habere.
**それを自分<small>〔ウェルキンゲトリークス〕</small>は、ほとんどすでに成し遂げたと思う。
:
*<!--❼--><sup>(7)</sup> [[wikt:en:interea#Latin|Interea]] [[wikt:en:aequus#Latin|aequum]] esse ab iis [[wikt:en:communis#Latin|communis]] [[wikt:en:salus#Latin|salutis]] causa [[wikt:en:impetrari#Latin|impetrari]],
**その間に<small>(ガッリアの)</small>共通の安全のために、彼ら<small>〔ガッリア人〕</small>によって<small>(以下のように)</small>達成されることが好都合である。
*ut castra [[wikt:en:munio#Latin|munire]] [[wikt:en:instituerent#Latin|instituerent]],
**陣営を防御することを実施するように、
*[[wikt:en:quo#Latin:_where|quo]] [[wikt:en:facilius#Latin|facilius]] [[wikt:en:repentinus#Latin|repentinos]] hostium [[wikt:en:impetus#Latin|impetus]] <u>sustinerent</u>.
**それにより、敵たち<small>〔ローマ人〕</small>の予期せぬ襲撃に対して、より容易に持ちこたえられるように。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:sustinerent#Latin|sustinerent]] だが、<br> β系写本では [[wikt:en:sustinere#Latin|sustinere]] [[wikt:en:possent#Latin|possent]] となっている。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===30節===
*<span style="background-color:#ffd;">[[/注解/30節]] {{進捗|00%|2026-08-29}}</span>
;ガッリア勢がウェルキンゲトリークスに心服し、希望を抱く
:
*<!--❶--><sup>(1)</sup> Fuit haec [[wikt:en:oratio#Latin|oratio]] non [[wikt:en:ingratus#Latin|ingrata]] [[wikt:en:Galli#Latin:_Gauls|Gallis]],
**この演説は、ガッリア人たちにとっては不快なものではなかった。
*et maxime, quod ipse animo non [[wikt:en:defecerat#Latin|defecerat]], [[wikt:en:tantus#Latin|tanto]] [[wikt:en:acceptus#Latin|accepto]] [[wikt:en:incommodum#Latin|incommodo]],
**──というのは、とりわけ<small>(ウェルキンゲトリークス)</small>自身がこれほどの敗北を蒙っても意気消沈することなく、
*neque <u>se</u> [[wikt:en:in_occultum#Latin|in occultum]] [[wikt:en:abdiderat#Latin|abdiderat]]
**秘密の場所に身を隠したり、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の再帰代名詞 se は 最初の印刷本 [[ガリア戦記/注解編/写本と校訂版#Editio_princeps|''ed. pr.'']] で挿入されたもので、主要写本 ω にはない。)</span>
*et [[wikt:en:conspectus#Latin:_noun|conspectum]] [[wikt:en:multitudo#Latin|multitudinis]] [[wikt:en:fugerat#Latin|fugerat]]<!--,-->;
**大勢の見ているところを避けたりしなかったからである──。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:plus#Latin:_adverb|plus]]<nowiki>que</nowiki> animo [[wikt:en:provideo#Latin|providere]] et [[wikt:en:praesentio#Latin|praesentire]] [[wikt:en:existimabatur#Latin|existimabatur]],
**<small>(ウェルキンゲトリークスは他の者よりも)</small>より先見の明があり、予感していると考えられていた。
*quod re [[wikt:en:integer#Latin|integra]]
**──というのは、事態が手つかずのままで、
*[[wikt:en:primo#Latin:_adverb|primo]] [[wikt:en:incendendus#Latin|incendendum]] <span style="color:#009900;">(esse)</span> [[wikt:en:Avaricum#Latin|Avaricum]],
**当初はアウァーリクムが焼き払われるべきだと<small>(主張し)</small>、
*post [[wikt:en:deserendus#Latin|deserendum]] <span style="color:#009900;">(esse)</span>, [[wikt:en:censuerat#Latin|censuerat]].
**後には<small>(アウァーリクムは)</small>放棄されるべきだ、と主張していたからだ──。
:
*<!--❸--><sup>(3)</sup> [[wikt:en:itaque#Latin|Itaque]] <u>ut</u> [[wikt:en:reliquus#Latin|reliquorum]] [[wikt:en:imperator#Latin|imperatorum]] res adversae [[wikt:en:auctoritas#Latin|auctoritatem]] [[wikt:en:minuunt#Latin|minuunt]],
**それゆえに、逆境がほかの将軍たちの影響力を減ずる一方で、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ut#Conjunction|ut]] ~, [[wikt:en:sic#Latin|sic]] …「~であるように、同様に…」あるいは「~である一方で、…」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:res#Latin|res]] [[wikt:en:adversus#Participle|adversae]]「逆境、(戦争における)敗北」。)</span>
*<u>sic</u> huius <u>ex contrario</u> [[wikt:en:dignitas#Latin|dignitas]] <u>incommodo</u> [[wikt:en:acceptus#Latin|accepto]] <u>in dies</u> [[wikt:en:augebatur#Latin|augebatur]].
**それどころか、彼の威厳は、災難を蒙っても、日ごとに高まっていたのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ex_contrario#Latin|ex contrario]]「それどころか」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:incommodum#Latin|incommodum]]「不運、災難、(戦争における)敗北」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:in_dies#Latin|in dies]]「日に日に」「日ごとに」。)</span>
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> [[wikt:en:simul#Latin|Simul]] <u>in spem [[wikt:en:veniebant#Latin|veniebant]]</u> eius [[wikt:en:adfirmatio#Latin|adfirmatione]] de reliquis [[wikt:en:adiungendus#Latin|adiungendis]] [[wikt:en:civitas#Latin|civitatibus]];
**同時に、彼の断言によって<small>(ガッリア人たちは)</small>ほかの諸部族を合流させることについて希望を抱いていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:in [[wikt:en:spes#Latin|spem]] [[wikt:en:venio#Latin|venire]]「希望を抱くようになる」。)</span>
*[[wikt:en:primum#Adverb|primum]]<nowiki>que</nowiki> eo tempore [[wikt:en:Galli#Latin:_Gauls|Galli]] [[wikt:en:castra#Latin|castra]] [[wikt:en:munio#Latin|munire]] [[wikt:en:instituerunt#Latin|instituerunt]],
**そのときに初めて、ガッリア人たちは陣営の防備を固めることに着手した。
*et <u>sic</u> <u>sunt</u> animo <u>consternati</u>, homines [[wikt:en:insuetus#Latin|insueti]] [[wikt:en:labor#Latin|laboris]],
**<small>(陣営の防備という)</small>労苦に慣れていない人々が、<u>気持ちが狼狽していたので、</u>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:sic#Latin|sic]] ~, [[wikt:en:ut#Conjunction|ut]] …「~であるので、その結果…ほどだった」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の sunt は主要写本 ω の記述だが、erant とする修正提案もある。<br> sunt なら未完了過去 (sunt consternati)、erant なら過去完了 (erant consternati) になる。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:consternati#Latin|consternati]] は主要写本 ω の記述だが、<br> ''[[ガリア戦記/注解編/写本と校訂版#Nipperdey|Nipperdey]]'' は [[wikt:en:confirmati#Latin|confirmati]] と修正提案している。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:写本の読みは sunt [[wikt:en:consternati#Latin|consternati]] 「(彼らは)恐怖に陥っていた、混乱していた。」だが、<br> 修正読みでは sunt [[wikt:en:confirmati#Latin|confirmati]] 「(彼らは)励まされた」。)</span>
*<u>ut</u> omnia, quae [[wikt:en:imperarentur#Latin|imperarentur]], sibi [[wikt:en:patiendus#Latin|patienda]] <span style="color:#009900;">(esse)</span> <u>et perferenda <span style="color:#009900;">(esse)</span></u> [[wikt:en:existimarent#Latin|existimarent]].
**自分たちにとって、命令されたことすべてを耐えるべきであり、<u>成就するべきである</u>と考えるに至ったほどであった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の et [[wikt:en:perferenda#Latin|perferenda]] (esseは省略されている) はβ系写本の記述で、<br> α系写本にはない。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===31節===
*<span style="background-color:#ffd;">[[/注解/31節]] {{進捗|00%|2026-08-29}}</span>
;ウェルキンゲトリークスがほかの諸部族を勧誘し、兵力を補充する
:
; ウェルキンゲトリークスが、さらに多くの部族に同盟を誘いかける
*<!--❶--><sup>(1)</sup> Nec minus, quam est [[wikt:en:pollicitus#Latin|pollicitus]],
**約束したことに劣らず、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:nec#Latin|nec]] [[wikt:en:minus#Adverb_4|minus]] [[wikt:en:quam#Latin|quam]] ~「~に劣らず」。)</span>
*[[wikt:en:Vercingetorix#Latin|Vercingetorix]] animo [[wikt:en:laborabat#Latin|laborabat]], ut reliquas [[wikt:en:civitas#Latin|civitates]] [[wikt:en:adiungeret#Latin|adiungeret]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、ほかの諸部族を加盟させるように、心から努力した。
*atque <u>earum principes donis pollicitationibusque</u> [[wikt:en:adliciebat#Latin|adliciebat]].
**それらの領袖たちに贈物を約束することによって、誘い込もうとしていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系写本では earum [[wikt:en:princeps#Noun_3|principes]] [[wikt:en:donum#Latin|donis]] [[wikt:en:pollicitatio#Latin|pollicitationibus]]<nowiki>que</nowiki> だが、<br> α系写本では eas donis pollicitationibus となっている。)</span>
:
*<!--❷--><sup>(2)</sup> Huic rei [[wikt:en:idoneus#Latin|idoneos]] homines [[wikt:en:deligebat#Latin|deligebat]],
**この事<small>〔同盟に誘うこと〕</small>に適切な人物たちを<small>(ウェルキンゲトリークスが)</small>選び出して、
*quorum [[wikt:en:quisque#Latin|quisque]] aut [[wikt:en:oratio#Latin|oratione]] [[wikt:en:subdolus#Latin|subdola]] aut [[wikt:en:amicitia#Latin|amicitia]]
**その者たちのおのおのは、巧妙な演説により、あるいは友情により、
*[[wikt:en:facillime#Latin|facillime]] <u>capere</u> posset.
**かなり容易に<small>(同盟者を)</small>得ることができた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、χ系写本・写本Lでは [[wikt:en:capere#Latin|capere]] だが、<br> β系写本では [[wikt:en:capi#Latin|capi]] となっている。)</span>
:
; アウァーリクムからの逃亡者たちに、武具と衣服を支給する
*<!--❸--><sup>(3)</sup> <span style="color:#009900;">[eos]</span> qui [[wikt:en:Avaricum#Latin|Avarico]] [[wikt:en:expugnatus#Latin|expugnato]] [[wikt:en:refugerant#Latin|refugerant]],
**<small>(ウェルキンゲトリークスは)</small>アウァーリクムが攻略されたので逃げて来ていた者たちに、
*[[wikt:en:armandus#Latin|armandos]] [[wikt:en:vestiendus#Latin|vestiendos]]<nowiki>que</nowiki> [[wikt:en:curat#Latin|curat]];
**武装させられ、服を着せられるように、手配する。
:
; 同盟部族に徴集する兵員の数と集まる期日を指示する
*<!--❹--><sup>(4)</sup> [[wikt:en:simul#Latin|simul]], ut [[wikt:en:deminutus#Latin|deminutae]] [[wikt:en:copiae#Latin|copiae]] [[wikt:en:redintegrarentur#Latin|redintegrarentur]],
**同時に、減り衰えた軍勢が補充されるように、
*[[wikt:en:imperat#Latin|imperat]] [[wikt:en:certus#Latin|certum]] <u>numerum</u> militum civitatibus, <u>quem</u> et <u>quam ante diem</u> in castra [[wikt:en:adduci#Latin|adduci]] [[wikt:en:velit#Latin|velit]],
**諸部族に、兵の一定の<u>数</u>を<u>どれほど</u>、かつ、<u>いつの日の前までに</u>陣営に連れて来ることを欲しているかを指図し、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:qui#Determiner|quem]] [[wikt:en:numerus#Latin|numerum]] 「どれほどの数を」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:qui#Determiner|quam]] ante [[wikt:en:dies#Latin|diem]] 「いつの日の前までに」。)</span>
*[[wikt:en:sagittarius#Noun|sagittarios]]<u>que</u> omnes, quorum erat [[wikt:en:permagnus#Latin|permagnus]] <u>numerus in Gallia</u>, [[wikt:en:conquiri#Latin|conquiri]] et ad se [[wikt:en:mitti#Latin|mitti]] [[wikt:en:iubet#Latin|iubet]].
**ガッリアにかなり大勢がいた弓兵のすべてを、徴募して自分<small>〔ウェルキンゲトリークス〕</small>のもとへ派遣することを命じる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本の語順は numerus in Gallia で、<br> β系写本の語順は in Gallia numerus となっている。)</span>
*His rebus celeriter id, quod [[wikt:en:Avaricum#Latin|Avarici]] [[wikt:en:deperierat#Latin|deperierat]], [[wikt:en:expletur#Latin|expletur]].
**これらの事により、速やかに、アウァーリクムで壊滅していたそれら<small>(の軍勢)</small>が補充される。
:
; ニティオブロゲース族の王テウトマトゥスが、騎兵隊らとともにウェルキンゲトリークスに合流する
*<!--❺--><sup>(5)</sup> [[wikt:en:interim#Latin|Interim]] [[wikt:en:Teutomatus#Latin|Teutomatus]], [[wikt:en:Ollovico#Latin|Olloviconis]] filius, rex <u>Nitiobrogum</u>,
**その間に、オッロウィコーの息子で、ニティオブロゲース族の王であるテウトマトゥスが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、主要写本ω では Nitiobrogum だが、<br> 写本Uの一部では [[wikt:en:Nitiobriges#Latin|Nitiobrigum]] となっている。)</span>
*cuius pater ab [[wikt:en:senatus#Latin|senatu]] nostro amicus erat [[wikt:en:appellatus#Latin|appellatus]],
**その父<small>〔オッロウィコー〕</small>は、我が方<small>〔ローマ人〕</small>の[[w:元老院 (ローマ)|元老院]]から友人と呼ばれていたのだが、
*cum magno [[wikt:en:eques#Latin|equitum]] suorum numero et quos ex [[wikt:en:Aquitania#Latin|Aquitania]] [[wikt:en:conduxerat#Latin|conduxerat]] ad eum [[wikt:en:pervenit#Etymology_2|pervenit]].
**自らの騎兵の多数およびアクィーターニアから募っていた者たちとともに、彼<small>〔ウェルキンゲトリークス〕</small>のもとへ到着した。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
==ゲルゴウィア攻略戦、ハエドゥイー族の離反==
===32節===
*<span style="background-color:#ffd;">[[/注解/32節]] {{進捗|00%|2026-09-23}}</span>
;ハエドゥイー族内紛の危機
:
*<!--❶--><sup>(1)</sup> Caesar [[wikt:en:Avarici#Latin|Avarici]] complures dies [[wikt:en:commoratus#Latin|commoratus]]
**カエサルは、アウァーリクムに幾日も留まって、
*[[wikt:en:summus#Latin|summam]]<nowiki>que</nowiki> ibi [[wikt:en:copia#Latin|copiam]] [[wikt:en:frumentum#Latin|frumenti]] et reliqui [[wikt:en:commeatus#Latin:_noun|commeatus]] [[wikt:en:nactus#Latin|nactus]]
**そこでかなり多量の糧食やほかの必需品を手に入れて、
*[[wikt:en:exercitus#Latin:_noun|exercitum]] ex [[wikt:en:labor#Latin:_work|labore]] atque [[wikt:en:inopia#Latin:_noun|inopia]] <u>reficit</u>.
**軍隊を労苦や欠乏から回復させた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、χ系・β系写本では [[wikt:en:reficit#Latin|reficit]]<sub> (現在形)</sub> だが、<br> φ系写本では [[wikt:en:refecit#Latin|refecit]]<sub> (完了形)</sub> となっている。)</span>
:
*<!--❷--><sup>(2)</sup> Iam [[wikt:en:prope#Adverb|prope]] [[wikt:en:hiems#Latin|hieme]] [[wikt:en:confectus#Latin|confecta]],
**すでに、ほぼ冬は過ぎ去り、
*cum ipso anni tempore ad [[wikt:en:gerendus#Latin|gerendum]] bellum [[wikt:en:vocaretur#Latin|vocaretur]] et ad hostem [[wikt:en:proficisci#Latin|proficisci]] [[wikt:en:constituisset#Latin|constituisset]],
**<small>(カエサルが)</small>まさにその時季に戦争を遂行するために呼び寄せられて、敵の方へ発つことを決意していたときに、
*<u>sive</u> eum ex [[wikt:en:palus#Latin|paludibus]] [[wikt:en:silva#Latin|silvis]]<nowiki>que</nowiki> [[wikt:en:elicio#Latin|elicere]] <u>sive</u> [[wikt:en:obsidio#Latin|obsidione]] [[wikt:en:premo#Latin|premere]] [[wikt:en:posset#Latin|posset]],
**<u>あるいは</u><small>(敵を)</small>沼地や森林から誘い出せるか、<u>あるいは</u>包囲により圧倒することができるか、というときに、
**:<span style="color:#009900;">(訳注:sive ~ sive …「あるいは~、あるいは…」)</span>
*[[wikt:en:legatus#Latin:_noun|legati]] ad eum [[wikt:en:princeps#Latin:_noun|principes]] [[wikt:en:Haedui#Latin|Haeduorum]] [[wikt:en:veniunt#Latin|veniunt]]
**[[w:ハエドゥイ族|ハエドゥイー族]]の領袖たちが使節として彼<small>〔カエサル〕</small>のもとへやって来る。
*[[wikt:en:oratum#Latin:_supine|oratum]], ut maxime [[wikt:en:necessarius#Latin:_unavoidable|necessario]] tempore [[wikt:en:civitas#Latin|civitati]] [[wikt:en:subveniat#Latin|subveniat]]<!--;-->:
**きわめて緊急の時に、部族を助けてくれるように、と頼むために。
:
; ハエドゥイー族の救援要請(以下、間接話法)
*<!--❸--><sup>(3)</sup> [[wikt:en:summus#Latin|summo]] esse in [[wikt:en:periculum#Latin|periculo]] rem,
**事態は最大の危機にある。
*quod, cum [[wikt:en:singulus#Latin|singuli]] [[wikt:en:magistratus#Latin|magistratus]] [[wikt:en:antiquitus#Latin|antiquitus]] [[wikt:en:creari#Latin|creari]] atque [[wikt:en:regius#Latin|regiam]] [[wikt:en:potestas#Latin|potestatem]] <u>annum</u> [[wikt:en:obtineo#Latin|obtinere]] [[wikt:en:consuessent#Latin|consuessent]],
**──というのは、昔から一人ずつの統領が選出されて、一年ごとに支配権力に就くことが常であったのに、
**:<span style="color:#009900;">(訳注:[[ガリア戦記 第1巻#16節|第1巻16節]]によれば、ウェルゴブレトゥス [[w:la:Vergobretus|Vergobretus]]という最高官職が毎年選ばれて大権を司る。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:annum#Latin|annum]] だが、<br> β系写本では [[wikt:en:annuam#Adjective|annuam]] となっている。)</span>
*duo [[wikt:en:magistratus#Latin|magistratum]] [[wikt:en:gerant#Latin|gerant]]
**2名が統領を司り、
*et se [[wikt:en:uterque#Latin|uterque]] eorum legibus <u>creatum esse</u> [[wikt:en:dicat#Latin:_speak|dicat]].
**彼らの双方ともに自分は法により<small>〔合法的に〕</small>選出されたのであると言っているのだから──。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:creatus#Latin|creatum]] esse だが、<br> β系写本では esse は省かれている。)</span>
: <!-- [[wikt:en:| -->
{{wikipedia|en:Convictolitavis}}
*<!--❹--><sup>(4)</sup> Horum esse alterum [[wikt:en:Convictolitavis#Latin|Convictolitavem]], [[wikt:en:florens#Latin|florentem]] et [[wikt:en:inlustris#Latin|inlustrem]] [[wikt:en:adulescens#Noun|adulescentem]]<!--,-->;
**彼らの一方は、コンウィクトリタウィスで、声望があり、秀でた青年である。
*alterum [[wikt:en:Cotus#Latin|Cotum]], [[wikt:en:antiquissimus#Latin|antiquissima]] familia [[wikt:en:natus#Latin:_born|natum]]
**他方は、コトゥスで、とても古くからの家系に生まれて、
*atque ipsum hominem summae [[wikt:en:potentia#Latin|potentiae]] et magnae [[wikt:en:cognatio#Latin|cognationis]],
**自身も最大勢力と多くの縁戚関係をもつ人物であり、
*cuius frater Valetiacus proximo anno eundem [[wikt:en:magistratus#Latin|magistratum]] [[wikt:en:gesserit#Latin|gesserit]].
**その兄弟ウァレティアクスは前年に同じ統領を司っていたのである。
: <!-- [[wikt:en:| -->
*<!--❺--><sup>(5)</sup> Civitatem esse omnem in [[wikt:en:arma#Latin|armis]];
**部族は皆が武装している。
*[[wikt:en:divisus#Latin|divisum]] [[wikt:en:senatus#Latin|senatum]], divisum [[wikt:en:populus#Latin:_people|populum]], <u>suas</u> [[wikt:en:cuiusque#Latin|cuiusque]] eorum [[wikt:en:clientela#Latin|clientelas]].
**評議会も分裂し、民衆も分裂し、彼ら<small>〔2名〕</small>の<small>(それぞれの)</small>庇護民となっている。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の suas は主要写本ωの記述だが、より劣った写本では in suas となっている。)</span>
*[[wikt:en:quodsi#Latin|Quodsi]] [[wikt:en:diutius#Latin|diutius]] [[wikt:en:alatur#Latin|alatur]] [[wikt:en:controversia#Latin|controversia]],
**もしこれ以上、紛争が進められれば、
*fore uti pars cum parte civitatis [[wikt:en:confligat#Latin|confligat]].
**部族の派閥と派閥が激突することになるであろう。
*Id ne [[wikt:en:accidat#Etymology_1|accidat]], [[wikt:en:positus#Latin|positum]] in eius [[wikt:en:diligentia#Latin|diligentia]] atque [[wikt:en:auctoritas#Latin|auctoritate]].
**それが起こらないかは、彼(カエサル)の入念さと影響力にかかっている。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===33節===
*<span style="background-color:#ffd;">[[/注解/33節]] {{進捗|00%|2026-10-04}}</span>
;カエサルがハエドゥイー族の権力をコンウィクトリタウィスに与える
:
; カエサルが、ハエドゥイー族の内紛を危惧する
*<!--❶--><sup>(1)</sup> Caesar, <u>etsi</u> a bello atque hoste [[wikt:en:discedo#Latin|discedere]] [[wikt:en:detrimentosus#Latin|detrimentosum]] esse [[wikt:en:existimabat#Latin|existimabat]],
**カエサルは、戦争や敵から離れることは損害をもたらすものである、と考えていたのではあるが、
*<u>tamen</u> non [[wikt:en:ignorans#Latin|ignorans]], [[wikt:en:quantus#Latin|quanta]] ex [[wikt:en:dissensionibus#Latin|dissensionibus]] [[wikt:en:incommodum#Noun|incommoda]] [[wikt:en:oriri#Latin|oriri]] [[wikt:en:consuessent#Latin|consuessent]],
**しかしながら、[[wikt:ja:内訌|内訌]]からどれほどの災厄が生じることが常であるか、知らないではなかったし、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:etsi#Latin|etsi]] ~, [[wikt:en:tamen#Latin|tamen]] …「~ではあるが、しかしながら…」)</span>
*ne [[wikt:en:tantus#Latin|tanta]] et [[wikt:en:tam#Latin|tam]] [[wikt:en:coniunctus#Latin:_participle|coniuncta]] [[wikt:en:populus#Latin|populo]] [[wikt:en:Romanus#Adjective|Romano]] [[wikt:en:civitas#Latin|civitas]],
**──これほど大きく、これほどローマ人民と協同している<small>(ハエドゥイーの)</small>{{ruby|部族国家|キーウィタース}}が、
*quam ipse semper [[wikt:en:aluisset#Latin|aluisset]] [[wikt:en:omnis#Latin|omnibus]]<nowiki>que</nowiki> rebus [[wikt:en:ornasset#Latin|ornasset]],
**彼らのことを<small>(カエサル)</small>自身は常に助成して、かつあらゆる事柄で敬意を表していたのだが、
*ad [[wikt:en:vis#Latin|vim]] atque [[wikt:en:arma#Latin|arma]] [[wikt:en:descenderet#Latin|descenderet]],
**<small>(彼らが内紛という)</small>暴力や戦乱に沈み込まないように、
*atque ea pars, quae [[wikt:en:minus#Latin:_adverb|minus]] sibi [[wikt:en:confideret#Latin|confideret]], [[wikt:en:auxilia#Latin|auxilia]] a [[wikt:en:Vercingetorix#Latin|Vercingetorige]] [[wikt:en:arcesseret#Latin|arcesseret]],
**かつ、自分たちにとって劣勢だと確信している一派が[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の支援を呼び寄せないように──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ne ~ civitas, ~ descenderet, ~ arcesseret「~部族が、~沈まないように、~招かないように」)</span>
*huic rei [[wikt:en:praevertendus#Latin|praevertendum]] [[wikt:en:existimavit#Latin|existimavit]],
**この事柄は<small>(戦争遂行よりも)</small>優先されるべき、と考えた。
:
; ハエドゥイー族の内紛を沙汰すべく、カエサル自らが赴く
*<!--❷--><sup>(2)</sup> et, quod [[wikt:en:lex#Latin|legibus]] [[wikt:en:Haedui#Latin|Haeduorum]] iis, qui summum [[wikt:en:magistratus#Latin|magistratum]] [[wikt:en:obtinerent#Latin|obtinerent]], [[wikt:en:excedo#Latin|excedere]] ex finibus non [[wikt:en:liceret#Latin|liceret]],
**──というのは、[[w:ハエドゥイ族|ハエドゥイー族]]の法により、最高官職に就いている者は領土から出ることを許されないので──
*ne [[wikt:en:aliquid#Latin:_pronoun|quid]] de [[wikt:en:ius#Latin:_justice|iure]] aut de [[wikt:en:lex#Latin|legibus]] eorum [[wikt:en:deminuisse#Latin|deminuisse]] [[wikt:en:videretur#Latin|videretur]],
**<small>(カエサルが)</small>彼らの法令あるいは法制について何ら軽視したとは思われないように、
[[画像:FR-58-Decize29.JPG|thumb|right|250px|デケティア([[w:la:Decetia|Decetia]])すなわち現在のドスィーズ([[w:fr:Decize|Decize]])の景観。[[w:ハエドゥイ族|ハエドゥイー族]]の版図であった[[w:ニエーヴル県|ニエーヴル県]]の南部にあり、リゲル川(現[[w:ロワール川|ロワール川]])のほとりに位置している。]]
*ipse in [[wikt:en:Haedui#Latin|Haeduos]] [[wikt:en:proficisci#Latin|proficisci]] [[wikt:en:statuit#Latin|statuit]]
**<small>(カエサル)</small>自身がハエドゥイー族のもとに出発することを決心した。
*[[wikt:en:senatus#Latin|senatum]]<nowiki>que</nowiki> omnem et <u>quos inter [[wikt:en:controversia#Latin|controversia]] [[wikt:en:esset#Latin:_be|esset]]</u>
**かつ、<u>評議会</u>の全員、および紛争が介在しているところの者たちを
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:部族国家の合議制統治機関を、カエサルの『ガリア戦記』では<br> ローマの元老院になぞらえて [[wikt:en:senatus#Latin|senatus]] と呼んでいるが、<br> 区別して「評議会」と訳す。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:quos inter ~ は、関係節の関係代名詞 quos が<br> 前置詞 inter の前に出ている語順。)</span>
*ad se [[wikt:en:Decetia#Latin|Decetiam]] [[wikt:en:evocavit#Latin|evocavit]].
**デケティアの自分<small>〔カエサル〕</small>のもとへ呼び出した。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:デケティア [[w:la:Decetia|Decetia]] は、現在の[[w:en:Decize|Decize]] ドシーズ(ドゥスィズ<ref>Decize の発音は [[wikt:fr:Decize|Decize]] を参照せよ。</ref>)であると考えられている。)</span>
:
*<!--❸--><sup>(3)</sup> Cum prope omnis civitas eo [[wikt:en:convenisset#Latin|convenisset]], [[wikt:en:doceretur#Latin|doceretur]]<nowiki>que</nowiki>
**部族のほぼすべての<small>(主だった)</small>者たちがそこに集まっていたときに、<small>(以下のことが)</small>報知された。
*[[wikt:en:paucus#Latin|paucis]] [[wikt:en:clam#Latin|clam]] [[wikt:en:convocatus#Latin|convocatis]] [[wikt:en:alius#Latin|alio]] loco, [[wikt:en:alius#Latin|alio]] tempore atque [[wikt:en:oportuerit#Latin|oportuerit]],
**わずかな者たちが密かに、あるべきはずとは別の場所、別の時に呼び集められて、
*[[wikt:en:fratrem#Latin|fratrem]] a [[wikt:en:fratre#Latin|fratre]] [[wikt:en:renuntiatus#Latin|renuntiatum]] <span style="color:#009900;">[esse]</span>,
**兄により弟<small>(の就位)</small>が告げられたというのだ。
**:<span style="color:#009900;">(訳注:前年に統領であった兄ウァレティアクスによって<br> 弟コトゥスの統領への就位が告げられたということであろう。)</span>
*<span style="font-size:11pt;">cum leges <u>duo</u> ex una familia [[wikt:en:vivus#Latin|vivo]] [[wikt:en:utroque#Latin|utroque]] <u>non solum</u> [[wikt:en:magistratus#Latin|magistratus]] [[wikt:en:creari#Latin|creari]] [[wikt:en:vetarent#Latin|vetarent]], <u>sed etiam</u> in [[wikt:en:senatus#Latin|senatu]] esse [[wikt:en:prohiberent#Latin|prohiberent]],</span>
**<span style="font-size:11pt;">──法が、一家族の2名が双方とも存命中に、統領に選出されるのを禁じるだけでなく、<u>評議会</u>にいることも禁じているのに──</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:non [[wikt:en:solum#Latin:_adverb|solum]] ~ [[wikt:en:sed#Latin|sed]] [[wikt:en:etiam#Latin|etiam]] …「~のみならず、…もまた」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、χ・β系写本や写本B・M・Sでは [[wikt:en:duo#Latin|duo]] だが、<br> 写本L・Nでは [[wikt:en:duos#Latin|duos]] となっている。)</span>
*[[wikt:en:Cotus#Latin|Cotum]] [[wikt:en:imperium#Latin|imperium]] [[wikt:en:depono#Latin|deponere]] [[wikt:en:coegit#Latin|coegit]]<!--,-->;
**(カエサルは)コトゥスに支配権を放棄することを強要した。
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> [[wikt:en:Convictolitavis#Latin|Convictolitavem]], qui per [[wikt:en:sacerdos#Latin|sacerdotes]] [[wikt:en:mos#Latin|more]] [[wikt:en:civitas#Latin|civitatis]] [[wikt:en:intermissus#Latin|intermissis]] [[wikt:en:magistratus#Latin|magistratibus]] [[wikt:en:esset#Latin:_be|esset]] [[wikt:en:creatus#Latin|creatus]],
**コンウィクトリタウィスは、統領が空位になったときに、部族の規則により、<u>祭司</u>を通じて選出されたので、
**:<span style="color:#009900;">(訳注:ここでいう祭司 sacerdos が[[ガリア戦記 第6巻#13節|第6巻13節]]以下で説明された[[w:ドルイド|ドルイド]]と同じか否かは不詳である。)</span>
*[[wikt:en:potestas#Latin|potestatem]] [[wikt:en:obtineo#Latin|obtinere]] [[wikt:en:iussit#Latin|iussit]].
**<small>(カエサルは彼に)</small>権力の座に就くことを命じた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===34節===
*<span style="background-color:#ffd;">[[/注解/34節]] {{進捗|00%|2026-10-18}}</span>
;ハエドゥイー族を動員し、ローマ軍をカエサルとラビエーヌスの二隊に分散
: <!-- [[wikt:en:| -->
*<!--❶--><sup>(1)</sup> Hoc [[wikt:en:decretum#Latin|decreto]] [[wikt:en:interpositus#Latin|interposito]],
**この裁定を裁決すると、
*[[wikt:en:cohortatus#Latin|cohortatus]] [[wikt:en:Haedui#Latin|Haeduos]],
**<small>(カエサルは)</small>[[w:ハエドゥイ族|ハエドゥイー族]]を<small>(以下のように)</small>激励して、
*ut [[wikt:en:controversia#Latin|controversiarum]] ac [[wikt:en:dissensio#Latin|dissensionis]] [[wikt:en:obliviscerentur#Latin|obliviscerentur]]
**<span style="color:#009900;font-size:20pt;">【</span><small>(部族内部の)</small>論争や不和を忘れるように、
*atque, omnibus [[wikt:en:omissus#Latin|omissis]] his rebus
**かつ、これらすべての事情を度外視して、
*huic bello [[wikt:en:servirent#Latin|servirent]],
**<small>(ウェルキンゲトリークスとの)</small>この戦争に尽くすように、
*<u>[[wikt:en:ea#Latin:_things|ea]]<nowiki>que</nowiki>, quae</u> [[wikt:en:meruissent#Latin|meruissent]], [[wikt:en:praemium#Latin|praemia]] ab se [[wikt:en:devictus#Latin|devicta]] Gallia [[wikt:en:exspectarent#Latin|exspectarent]],
**ガッリアが征服されたときには<small>(彼らが)</small>得るに値する自分<small>〔カエサル〕</small>からの恩賞を期待するように、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:ea#Latin:_things|ea]]<nowiki>que</nowiki> quae は、最初の印刷本 [[ガリア戦記/注解編/写本と校訂版#Editio_princeps|ed. pr.]] による修正で、<br> α系・ρ系写本では [[wikt:en:ea#Latin:_things|ea]] quae <br> π系写本では atque quae となっている。)</span>
*[[wikt:en:equitatus#Latin:_cavalry|equitatum]]<nowiki>que</nowiki> omnem et [[wikt:en:pedes#Latin|peditum]] [[wikt:en:mille#Latin|milia]] X([[wikt:en:decem#Latin|decem]]) sibi celeriter [[wikt:en:mitterent#Latin|mitterent]],
**<small>(ハエドゥイー族の)</small>騎兵隊のすべてと歩兵1万名を自分<small>〔カエサル〕</small>に速やかに派遣するように、
*quae in [[wikt:en:praesidium#Latin|praesidiis]] rei [[wikt:en:frumentarius#Latin|frumentariae]] causa [[wikt:en:disponeret#Latin|disponeret]],
**それらは糧食供給のために守備隊として分けて置くものである、と<span style="color:#009900;font-size:20pt;">】</span>
*exercitum in duas partes [[wikt:en:divisit#Latin|divisit]]:
**<small>(カエサルは)</small>軍隊を二つの方面軍に分けた。
[[画像:Brioude pont.JPEG|thumb|right|250px|エラウェル川([[w:la:Elaver|Elaver]])こと現在の[[w:アリエ川|アリエ川]](Allier)。ハエドゥイー族領の境辺りでリゲル川([[w:la:Liger|Liger]])こと現[[w:ロワール川|ロワール川]]([[w:fr:Loire (fleuve)|Loire]])に合流する。]]
: <!-- [[wikt:en:| -->
*<!--❷--><sup>(2)</sup> quattuor legiones in [[wikt:en:Senones#Latin|Senones]] [[wikt:en:Parisii#Latin|Parisios]]<nowiki>que</nowiki> [[wikt:en:Labienus#Latin|Labieno]] ducendas dedit,
**4個[[w:ローマ軍団|軍団]]をセノネース族やパリスィイー族のところに率いて行くべく[[w:ティトゥス・ラビエヌス|ラビエーヌス]]に委ねた。
**:<span style="color:#009900;">(訳注:ラビエーヌス [[w:la:Titus Labienus|Labienus]] のこの遠征については<br> [[#57節|57節]]~62節で述べられる。)</span>
*sex ipse in [[wikt:en:Arverni#Latin|Arvernos]] ad oppidum [[wikt:en:Gergovia#Latin|Gergoviam]]
**6個を自身<small>〔カエサル〕</small>がアルウェルニー族のところの城塞都市ゲルゴウィアへ
*secundum flumen [[wikt:en:Elaver#Latin|Elaver]] duxit;
**エラウェル川に沿って率いて行った。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:エラウェル川 [[w:la:Elaver|Elaver]] は現在の[[w:アリエ川|アリエ川]] Allier である。)</span>
*equitatus partem illi [[wikt:en:adtribuit#Latin|adtribuit]], partem sibi reliquit.
**騎兵隊の一部は彼<small></small>(ラビエーヌス)に割り当てて、(残りの)部分は自分のもとに残した。
: <!-- [[wikt:en:| -->
*<!--❸--><sup>(3)</sup> Qua re cognita
**その事を知ると、
*[[wikt:en:Vercingetorix#Latin|Vercingetorix]]
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は
*omnibus interruptis eius fluminis pontibus
**その川のすべての橋を破却しながら、
*ab altera fluminis parte iter facere coepit.
**川の別の側を行軍し始めた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===35節===
'''カエサルが陽動によってエラウェル川に架橋、渡河する'''
*① Cum uterque utrimque exisset exercitus<ref>utrimque exisset exercitus はα系写本の記述で、β系写本では utrique esset exercitui となっている。</ref>, in conspectu, fereque e regione castris castra ponebant<ref>ponebant はα系写本の記述で、β系写本では poneret となっている。</ref>,
**(ガッリア勢とローマ勢の)軍隊の双方が互いに視界にあって、ほぼ真向かいに互いの陣営を設置したときに、
*dispositis exploratoribus, necubi effecto ponte Romani copias traducerent,
**(ウェルキンゲトリークスは)ローマ人の軍勢がどこにも橋を造って渡河しないように、偵察者たちを分けて置き、
*erat in magnis Caesaris<ref>Caesaris はα系写本などの記述で、π系写本などでは Caesari となっている。</ref> difficultatibus res,
**カエサルにとって事態は大きな困難になっていた。
*ne maiorem aestatis partem flumine impediretur,
**夏の大部分(の対岸の敵との交戦)が川により妨げられるのではないか、
*quod non fere ante autumnum [[w:la:Elaver|Elaver]] vado transiri solet.
**というのは、[[w:アリエ川|エラウェル川]]は秋の前はほとんど浅瀬を渡らない習わしであったからだ。
*② Itaque, ne id accideret, silvestri loco castris positis
**こうして、それが生じないように、森林地帯に陣営を設置した。
*e regione unius eorum pontium, quos [[w:la:Vercingetorix|Vercingetorix]] rescindendos curaverat,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]が切り裂かれるように手配していたところの橋の一つの真向かいに。
*postero die cum duabus legionibus in occulto restitit;
**翌日に、2個[[w:ローマ軍団|軍団]]とともに密かなところに留まった。
*③ reliquas copias cum omnibus impedimentis, ut consueverat, misit,
**残りの軍勢(=4個軍団)をすべての輜重とともに、通常のように、出発させた。
*captis<ref>写本(ω)では captis となっているが、Herald Fuchs の校訂版(1932年)では sic collocatis という記述が提案されている。etc.</ref> quibusdam cohortibus, uti numerus legionum constare videretur.
**軍団の数を保っていると(敵から)見られるように、いくつかの<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>を含ませていた。
*④ His quam longissime possent egredi<ref>egredi はα系写本の記述で、β系写本では progredi となっている。</ref> iussis,
**彼ら(4個軍団)には、できる限り遠くまで前進することを命じた。
*cum iam ex diei tempore coniecturam ceperat<ref>ceperat はα系写本の記述で、β系写本では caperet となっている。</ref> in castra perventum,
**すでに、日の時刻から(彼らが)宿営地に到達したと(カエサルが)推測をしたときに、
*isdem sublicis, quarum pars inferior integra remanebat, pontem reficere coepit.
**(前述の)同じ橋杭は、そのより下方の部分が損なわれないで残っていたので、橋を修復し始めた。
*⑤ Celeriter effecto opere
**速やかに工事が成し遂げられて、
*legionibusque traductis et loco castris idoneo delecto
**(2個)軍団が渡河させられて、陣営に適切な地点を選んで、
*reliquas copias revocavit.
**残りの軍勢(=4個軍団)を呼び戻した。
*⑥ Vercingetorix re cognita,
**ウェルキンゲトリークスは事態を知って、
*ne contra suam voluntatem dimicare cogeretur,
**自らの意向に反して(ローマ勢と)争闘することを強いられないように、
*magnis itineribus antecessit.
**強行軍で(ゲルゴウィアに向けて)先行した。
===36節===
[[画像:FR-63-Gergovie.JPG|thumb|right|300px|[[w:ゲルゴウィア|ゲルゴウィア]]([[w:la:Gergovia|Gergovia]])すなわち現在のジェルゴヴィ高地([[w:fr:Plateau de Gergovie|Plateau de Gergovie]])の[[w:ピュイ=ド=ドーム県|ピュイ=ド=ドーム県]]県道978号(D978)からの眺望。19世紀の[[w:ウジェーヌ・ストッフェル|ウジェーヌ・ストッフェル]]大佐(colonel Eugène Stoffel)の発掘調査によって、城砦やローマ軍の溝の遺構などが発見され、当地がゲルゴウィアの古戦場だと確認された。]]
[[画像:Siège_GergovieI_-52.png|thumb|right|300px|ゲルゴウィアにおける両軍の布陣図。山の頂にある城塞都市に隣接してガッリア諸部族の陣営(黄色部分)、右方にローマ軍の大きな陣営(赤色部分)と左下にローマ軍の小さな陣営(赤色部分)が見える。推定される位置関係は19世紀の[[w:ウジェーヌ・ストッフェル|ストッフェル]]大佐の発掘調査に依拠しており、小陣営があった地点は現在のラ・ロシュ=ブランシュ([[w:fr:La Roche-Blanche (Puy-de-Dôme)|La Roche-Blanche]])だと考えられている。]]
'''両軍がゲルゴウィアの要衝に陣営を築く'''
*① Caesar ex eo loco quintis castris [[w:la:Gergovia|Gergoviam]] pervenit
**カエサルは(渡河した)その地点から5回目の宿営で[[w:ゲルゴウィア|ゲルゴウィア]]に到着した。
*equestrique eo die proelio levi facto,
**(到着した)その日に(ガッリア勢と)軽微な[[w:騎兵|騎兵]]戦を闘って、
*perspecto urbis situ, quae posita in altissimo monte omnes aditus difficiles habebat,
**山の非常に高いところに位置し、すべての接近路を困難なものとしている(ゲルゴウィアの)町の地勢を認識して、
*de expugnatione<ref>expugnatione はα系写本の記述で、β系写本では oppugnatione となっている。</ref> desperavit,
**(拙速に突撃するような)攻略については断念して、
*de obsessione non prius agendum constituit, quam rem frumentariam expedisset.
**糧食調達の整備をするより前には、攻囲について行なうべきでないと決心した。
*② At [[w:la:Vercingetorix|Vercingetorix]], castris prope oppidum in monte<ref>in monte はβ系写本の記述で、α系写本にはない。</ref> positis,
**それに対して、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、山中の城塞都市の近くに陣営を設置して、
*mediocribus circum se intervallis separatim singularum civitatium<ref>civitatium はB・M・L・N写本の記述で、χ・S・β系写本では civitatum となっている。</ref> copias conlocaverat
**自陣の周りに、適切な間隔で個々の部族の軍勢を別々に駐屯させて、
*atque omnibus eius iugi collibus occupatis, qua despici poterat,
**その尾根のうち(山麓を)見下ろすことができたすべての丘陵を占有して、
*horribilem speciem praebebat;
**恐ろしげな姿を現わした。
*③ principesque earum civitatium<ref>civitatium はA・Q・B・M・L・N写本の記述で、Q・S・β系写本では civitatum となっている。</ref>, quos sibi ad consilium capiendum delegerat,
**(ウェルキンゲトリークス)自らが作戦を立てるために選び出していた諸部族の領袖たちに
*prima luce cotidie ad se convenire iubebat,
**毎日、夜明けに自分のところへ集まることを命じた。
*seu quid communicandum, seu quid administrandum videretur,
**何らかのことを伝達・協議するのか、あるいは何らかのことを指導するのだと思われる。
**:<span style="color:#009900;">(訳注:seu ~ seu …「あるいは~、あるいは…」)</span>
*④ neque ullum fere diem intermittebat, quin equestri proelio interiectis sagittariis,
**騎兵戦に弓兵を介在させることを、ほとんどどの日も中断せずに、
*quid in quoque esset animi ac virtutis suorum, perspiceretur<ref>perspiceretur はα系写本の記述で、T写本では perspiceret、β系写本では periclitaretur となっている。</ref>.
**どのような心構えや武勇が、配下の者たちのおのおのにあるかを、吟味した。
*⑤ Erat e regione oppidi collis sub ipsis radicibus montis
**山のその麓の下方に、城塞都市の真向かいに、丘陵があって、
*egregie munitus atque ex omni parte circumcisus;
**あらゆる方面から周囲が険しくて、(その地形により)すばらしく護られていた。
*quem si tenerent nostri, et aquae magna parte et pabulatione libera prohibituri hostes videbantur.
**もし、それを我が方(ローマ勢)が占めれば、水源の大半と自由な糧秣徴発から敵たちを妨げるであろうと思われた。
*⑥ Sed is locus praesidio ab his, non nimis firmo, tenebatur.
**だが、その地点は、彼ら(ガッリア勢)により、大して強力ではない守備隊で占められていた。
*⑦ Tamen silentio noctis Caesar ex castris egressus,
**にもかかわらず(昼間ではなく)夜の静けさのうちに、カエサルは陣営から出撃して、
*priusquam subsidio ex oppido veniri posset,
**城塞都市(のそばの陣営)から援兵に来られるより前に、
*deiecto praesidio potitus loco duas ibi legiones conlocavit
**守備隊を追い出して、地点を占拠して、そこに2個[[w:ローマ軍団|軍団]]を駐屯させた。
*fossamque duplicem duodenum pedum a maioribus castris ad minora perduxit,
**12[[w:ペース (長さ)|ペース]](=約3.6mの幅)の二重の堀を、より大きな陣営から(この丘陵の)より小さな陣営へ至らしめた。
*ut tuto ab repentino hostium incursu singuli commeare possent.
**敵たちの不意の襲撃から安全に、1人1人が往来することができるように。
===37節===
'''ハエドゥイー族のコンウィクトリタウィスがガッリア同盟軍に内応する'''
*① Dum haec ad [[w:la:Gergovia|Gergoviam]] geruntur,
**これらがゲルゴウィアのところでなされている間に、
*Convictolitavis [[w:la:Haedui|Haeduus]],
**[[w:ハエドゥイ族|ハエドゥイー族]]のコンウィクトリタウィスは、
*cui magistratum adiudicatum a Caesare demonstravimus,
**その者はカエサルによって統領として承認されたと([[#33節|33節]]で)既述したが、
*sollicitatus ab Arvernis pecunia cum quibusdam adulescentibus conloquitur,
**[[w:アルウェルニ族|アルウェルニー族]]により金銭でそそのかされて、ある若者たちと談判した。
*quorum erat princeps Litaviccus atque eius fratres,
**その者たちの領袖は[[w:リタウィックス|リタウィックス]]とその兄弟たちであり、
*amplissima familia nati adulescentes.
**とても強大な一族に生まれた若者たちだった。
*② Cum his praemium communicat
**彼らとともに(アルウェルニー族からの)報酬を共有して、
*hortaturque, ut se liberos et imperio natos meminerint.
**自分たちが自由民で支配層の生まれであるのを思い起こせ、と鼓舞した。
*③ Unam esse Haeduorum civitatem, quae certissimam Galliae victoriam distineat<ref>distineat はM・N・π・R写本などの記述で、Q・U写本などでは destineat 、A・B・S写本などでは dedistineat などとなっている。</ref>;
**ハエドゥイーの部族国家は、ガッリアの至極確実な勝利を阻んでいる唯一のものであり、
*eius auctoritate reliquas contineri;
**その声望により、ほかの(同盟部族の)ものたちが(ローマ側に)保持されているが、
*qua traducta locum consistendi Romanis in Gallia non fore.
**それが(ガッリア勢に)引き入れられることによって、ガッリアにおいてローマ人が留まり続ける場はないであろう。
*④ Esse nonnullo se Caesaris beneficio adfectum,
**自分はカエサルの少なからぬ恩義をかけられているが、
*sic tamen, ut iustissimam apud eum causam obtinuerit;
**しかし、彼(カエサル)のもとで至極合法的な理由を手に入れたまでであり、
*sed plus communi libertati tribuere.
**しかし、(ガッリアの)共通の自由に従うことの方がより大きい。
*⑤ Cur enim potius Haedui de suo iure et de legibus ad Caesarem disceptatorem quam Romani ad Haeduos veniant?
**なぜ実際、ハエドゥイー族は自らの法令や法制について、ローマ人がハエドゥイー族へ来るよりむしろ、カエサルを仲裁者とするのか?
*⑥ Celeriter adulescentibus et oratione magistratus et praemio deductis,
**若者たちは速やかに、統領の演説と報酬によって導き入れられた。
*cum se vel principes eius consilii fore profiterentur,
**自分たちがその謀計の首謀者にすらなろうと申し出たときに、
*ratio perficiendi quaerebatur,
**(謀計を)成し遂げる方法が求められた。
*quod civitatem temere ad suscipiendum bellum adduci posse non confidebant.
**というのは、部族がむやみに(ローマ人との)戦争実行へ動かされることができるとは確信していなかったからだ。
*⑦ Placuit, ut Litaviccus decem illis milibus, quae Caesari ad bellum mitterentur, praeficeretur atque ea ducenda curaret,
**リタウィックスに、カエサルに戦争のために派遣されるあの(歩兵)1万名を指揮させ率いさせるのが良いとされた。
**:<span style="color:#009900;">(訳注:歩兵1万名については[[#34節|34節]]を参照。)</span>
*fratresque eius ad Caesarem praecurrerent.
**彼の兄弟たちは、カエサルのところへ先立って行った。
*Reliqua qua ratione agi placeat constituunt.
**残りのことが、どのようなやり方で行なわれるのが良いかが決められた。
===38節===
'''リタウィックスの鼓舞でハエドゥイー族の歩兵1万が挙兵する'''
*① Litaviccus accepto exercitu
**リタウィックスは(1万名の)歩兵隊を受け取って、
*cum milia passuum circiter XXX(triginta)<ref>XXX(triginta) はα系写本の記述で、β系写本では XL(quadraginta) となっている。</ref> ab<ref>ab は写本(ω)の記述であるが、モイゼル(Henricus Meusel)は a を提案している。</ref> [[w:la:Gergovia|Gergovia]] abesset,
**[[w:ゲルゴウィア|ゲルゴウィア]]から約30[[w:ローママイル|ローママイル]](=45km弱)離れたところに来たときに、
*convocatis subito militibus lacrimans,
**兵士たちを突然に呼び集めて、泣きながら、
*② "Quo proficiscimur," inquit, "milites?
**「兵士らよ、どこへ我々は進むのか?」と言った。
*Omnis noster equitatus, omnis nobilitas interiit;
**「我が方(ハエドゥイー族)のすべての[[w:騎兵|騎兵隊]]とすべての高貴な者たちは滅んだ。
*principes civitatis, [[w:la:Eporedorix|Eporedorix]] et Viridomarus,
**部族の領袖たち、エポレドリクスとウィリドマルスは、
*insimulati proditionis ab Romanis indicta causa interfecti sunt.
**裏切りの罪を着せられて、ローマ人たちによって、弁解の余地なく殺されてしまったのだ。
**:<span style="color:#009900;">(訳注:indicta causa「弁解の余地なく」)</span>
*③ Haec ab ipsis<ref>ipsis はα系写本の記述で、β系写本では his となっている。</ref> cognoscite, qui ex ipsa caede fugerunt;
**これは、その虐殺から逃げて来た当人たちから聞き知ってくれ。
*nam ego fratribus atque omnibus meis propinquis interfectis
**なぜなら、私は、兄弟たちやすべての我が親族たちが殺されて
*dolore prohibeor, quae gesta sunt, pronuntiare."
**悲嘆により、なされたことを物語ることを妨げられているからだ。」
*④ Producuntur hi<ref>hi はφ・β系写本の記述で、A写本では ii 、Q写本では hii となっている。</ref>, quos ille edocuerat quae dici vellet,
**彼(リタウィックス)が言って欲しいことを教え込んでいた者たちが連れ出されて来て、
*atque eadem, quae Litaviccus pronuntiaverat, multitudini exponunt:
**リタウィックスが物語ったのと同じことを群衆に説明した。
*⑤ multos<ref>multos はα系写本の記述で、β系写本では omnes となっている。</ref> equites [[w:la:Haedui|Haeduorum]] interfectos, quod conlocuti cum Arvernis dicerentur;
**ハエドゥイー族の多くの騎兵たちは、アルウェルニー族と談判したと言われたので、殺された、と。
*ipsos se inter multitudinem militum occultasse atque ex media caede fugisse.
**(彼ら)自身は、兵士ら多数の間に身を隠して、虐殺の最中から逃げて来たのだ、と。
*⑥ Conclamant Haedui et Litaviccum obsecrant, ut sibi consulat.
**ハエドゥイー族の者たちは叫び声を上げて、リタウィックスに、自分たちに(どうするべきか)助言するように懇願した。
*"Quasi vero" inquit ille "consilii sit res, ac non necesse sit
**彼は言った「実にあたかも、事態が協議するべきというかのようだ。(協議する)必要はないのだ。
*nobis Gergoviam contendere et cum Arvernis nosmet coniungere.
**我々にとって、ゲルゴウィアに急行して、アルウェルニー族と我々が合流することは。
*⑦ An dubitamus, quin nefario facinore admisso Romani iam ad nos interficiendos concurrant?
**非道の悪行を犯したローマ人がもはや我々を殺戮するために襲いかかって来ることを疑うのかね?
*⑧ Proinde, si quid in nobis animi est,
**それゆえに、もし我々に何らかの心構えがあるならば、
*persequamur eorum mortem, qui indignissime interierunt,
**とても不面目に滅びた者たちの死に仇討ちしようではないか。
*atque hos latrones interficiamus."
**かの略奪者たち(ローマ人)を誅殺しようではないか。」
*Ostendit cives Romanos, qui eius praesidii fiducia una erant<ref>erant は写本(ω)の記述であるが、モムゼン(Mommsen)らは ierant を提案している。</ref>:
**(リタウィックスは)彼の護衛を信頼して一緒にいたローマ市民たちを示した。
*⑨ Continuo<ref>Continuo はβ系写本の記述で、α系写本にはない。</ref> magnum numerum frumenti commeatusque diripit,
**ただちに、(ローマ市民たちの)糧食や必需品の多数を略奪して、
*ipsos crudeliter excruciatos interficit.
**当人たちを残酷に拷問して殺した。
*⑩ Nuntios tota civitate Haeduorum dimittit,
**ハエドゥイー族の伝令たちを、部族全体にわたって遣わして、
*in<ref>in はβ系写本の記述だが、α系写本にはない。</ref> eodem mendacio de caede equitum et principum permovet<ref>permovet はL・N写本の記述だが、B写本では permanet 、χ・M・S・β系写本などでは permonet となっている。</ref>;
**騎兵や領袖たちの虐殺について、同じ嘘によって扇動した。
*hortatur ut simili ratione atque ipse fecerit suas iniurias persequantur.
**(リタウィックス)自身がしたのと同様のやり方で、自分たちの(受けた)無法に仇討ちするようにと鼓舞した。
===39節===
'''エポレドリクスがハエドゥイー勢1万の寝返りをカエサルに知らせる'''
*① [[w:la:Eporedorix|Eporedorix]] [[w:la:Haedui|Haeduus]], summo loco natus adulescens et summae domi potentiae,
**[[w:ハエドゥイ族|ハエドゥイー族]]の[[w:エポレドリクス|エポレドリクス]]は、最高の身分に生まれた青年で、本国で最高の権勢にあった。
*et una Viridomarus, pari aetate et gratia, sed genere dispari,
**とともに、[[w:ウィリドマルス|ウィリドマルス]]も、同じ年輩で、同様に敬意を受けていたが、異なる階級であった。
*quem Caesar ab Diviciaco sibi traditum ex humili loco ad summam dignitatem perduxerat,
**カエサルは彼を[[w:ディウィキアクス|ディウィキアクス]]により託されて、低い身分から最高の地位へと引き立てていた。
**:<span style="color:#009900;">(訳注:ディウィキアクスはかつてローマに援助を求めた有力者で、カエサルに殺されたドゥムノリクスの兄弟。)</span>
*in equitum numero convenerant nominatim ab eo evocati.
**(その2人は)彼(カエサル)から名指しで呼び出されて、[[w:騎兵|騎兵]]として(ローマの陣中に)一緒に来ていた。
*② His erat inter se de principatu contentio
**彼ら(2人)には、互いに指揮官の座についての競争があって、
*et in illa magistratuum controversia
**あの統領をめぐる紛争においても
**:<span style="color:#009900;">([[#32節|32節]]~33節を参照。)</span>
*alter pro Convictolitavi, alter pro Coto summis opibus pugnaverant<ref>pugnaverant はα系写本の記述で、β系写本では pugnaverat となっている。</ref>.
**一方は[[w:コンウィクトリタウィス|コンウィクトリタウィス]]のために、他方は[[w:コトゥス|コトゥス]]のために、最大限の助力で奮闘していた。
*③ Ex his Eporedorix cognito Litavicci consilio
**彼らのうちエポレドリクスが[[w:リタウィックス|リタウィックス]]の謀計を知って、
*media fere nocte rem ad Caesarem defert;
**ほぼ真夜中に、事情をカエサルのところへ報知した。
*orat ne patiatur civitatem pravis adulescentium consiliis ab amicitia populi Romani deficere;
**(ハエドゥイーの)部族が青年たちのゆがんだ謀計によってローマ人民の友好から背くことを容認しないように懇願した。
*quod futurum provideat, si se tot hominum milia cum hostibus coniunxerint,
**もし、このように多くの幾千もの同胞が敵たちと協同するならば、(上記の)ことが生じると用心するように、と。
*quorum salutem neque propinqui neglegere,
**(寝返った1万の歩兵たちの)縁者たちは彼らの身の安全をなおざりにすることはないし、
*neque civitas levi momento aestimare posset.
**部族が(寝返った歩兵たちの)影響力を軽く評価できない、と。
===40節===
'''カエサルが4個軍団を率いてハエドゥイー勢1万を制止し、リタウィックスは逃亡'''
*① Magna adfectus sollicitudine hoc nuntio Caesar,
**この知らせにより、大きな不安を感じたカエサルは、
*quod semper [[w:la:Haedui|Haeduorum]] civitati praecipue indulserat,
**常に[[w:ハエドゥイ族|ハエドゥイーの部族]]にとくに気遣っていたので、
*nulla interposita dubitatione legiones expeditas quattuor equitatumque omnem ex castris educit;
**何らためらいを差しはさまずに、戦備を整えた4個[[w:ローマ軍団|軍団]]と[[w:騎兵|騎兵隊]]すべてを陣営から進発させた。
*② nec fuit spatium tali tempore ad contrahenda castra,
**このような情勢で、陣営を縮小するための余地はなかった。
**:<span style="color:#009900;"> (訳注:[[#36節|36節]]で、カエサルはゲルゴウィアの大きな陣営および敵に近い小さな陣営を6個軍団で守っていた。)</span>
*quod res posita in celeritate videbatur;
**というのは、事態は迅速さにかかっていると思われたからだ。
*C.(Gaium) Fabium legatum cum legionibus duabus castris praesidio relinquit.
**総督副官[[w:ガイウス・ファビウス|ガイウス・ファビウス]]を2個軍団とともに陣営の守備に残しておいた。
*③ Fratres Litavicci cum comprehendi iussisset,
**(カエサルは)リタウィックスの兄弟たちを拘束することを命じていたのだが、
*paulo ante reperit ad hostes fugisse.
**少し前に(ゲルゴウィアの)敵たちのところへ去ったことを探り出した。
*④ Adhortatus milites ne necessario tempore itineris labore permoveantur,
**(カエサルは)緊急の時に、行軍の労苦により乱されないように、兵士たちを激励して、
*cupidissimis omnibus progressus milia passuum [[w:la:Viginti quinque|XXV]] agmen Haeduorum conspicatus<ref>conspicatus はα系写本の記述で、β系写本では conspicatur となっている。</ref>
**皆がとても熱中していたので、25[[w:|ローママイル]](約37km)進んで、ハエドゥイー族の隊列を視認した。
*immisso equitatu iter eorum moratur atque impedit
**騎兵隊を突進させて、彼ら(ハエドゥイー勢)の行軍を妨げて、停止させた。
*interdicitque omnibus ne quemquam interficiant.
**(ハエドゥイー勢を)誰一人殺さないように(ローマ勢の)皆に禁じた。
*⑤ [[w:la:Eporedorix|Eporedorigem]] et Viridomarum, quos illi interfectos existimabant,
**彼ら(ハエドゥイー勢)が、殺されたものと考えていた者たち、[[w:エポレドリクス|エポレドリクス]]と[[w:ウィリドマルス|ウィリドマルス]]に、
*inter equites versari suosque appellare iubet.
**(ハエドゥイー勢の)騎兵たちの間を歩き回って、味方に呼びかけることを命じた。
*⑥ His cognitis et Litavicci fraude perspecta Haedui manus tendere,
**彼ら(2人)に気付いて、リタウィックスのごまかしを見通して、ハエドゥイー族の者たちは手を差し出して、
*deditionem significare et proiectis armis mortem deprecari incipiunt.
**降伏の意を表して、武器を投げ出して、死を赦免されることを求め始めた。
*⑦ Litaviccus cum suis clientibus,
**[[w:リタウィックス|リタウィックス]]は、配下の子分たちとともに、
*quibus more Gallorum nefas est etiam in extrema fortuna deserere patronos,
**ガッリア人の風習では、最悪の境遇にあってさえも(子分が自分の)親分を見捨てることは非道であったので、
*[[w:la:Gergovia|Gergoviam]] profugit.
**(親分・子分ともども)[[w:ゲルゴウィア|ゲルゴウィア]]に逃れた。
===41節===
'''副官ファビウスの報告:ゲルゴウィアの敵勢がローマ陣営に襲来'''
*① Caesar nuntiis ad civitatem [[w:la:Haedui|Haeduorum]] missis,
**カエサルは伝令たちを[[w:ハエドゥイ族|ハエドゥイー]]の部族(当局)に遣わして、
*qui suo beneficio conservatos docerent quos iure belli interficere potuisset,
**彼ら(伝令)に、戦時の権限により殺せた者たち(歩兵1万)は(カエサル)自らの恩恵により許されたのだ、と説かせた。
*tribusque horis noctis exercitui ad quietem datis castra ad [[w:la:Gergovia|Gergoviam]] movit.
**(カエサルは)夜の3時間を軍隊に休息のために与えて、陣営を引き払ってゲルゴウィアの方へ向かった。
**:<span style="color:#009900;">(訳注:古代ローマの不定時法では、夏季の夜の3時間は、現在の定時法の3時間よりかなり短い。)</span>
*② Medio fere itinere equites a Fabio missi,
**(ゲルゴウィアへの)道程のほぼ中間のところで、ファビウスから[[w:騎兵|騎兵]]たちが遣わされて来て、
*quanto res in periculo fuerit, exponunt.
**事態がどれほどの危機にあるか、を打ち明けた。
*Summis copiis castra oppugnata demonstrant,
**(ガッリア勢の)最大級の軍勢により(ローマ勢の)陣営が攻撃された、と説明した。
*cum crebro integri defessis succederent
**そのときに(ガッリア勢は)たびたび新たな者たちが疲労した者たちに交代していたが、
*nostrosque adsiduo labore defatigarent,
**我が方(ローマ勢)は絶え間ない労苦により疲れ果てていた。
*quibus propter magnitudinem castrorum perpetuo esset isdem in vallo permanendum.
**彼ら(ローマ勢)にとり、陣営の大きさのために、同じ者たちが防柵の中に留まらざるを得なかった。
**:<span style="color:#009900;">(訳注:カエサルは[[#40節|40節]]②項で「陣営を縮小するための余地はなかった」とあらかじめ弁解している。)</span>
*③ Multitudine sagittarum atque omnis generis<ref>omnis generis はα系写本の記述で、β系写本では omni genere となっている。</ref> telorum multos vulneratos;
**(ガッリア勢からの)矢の多数と飛び道具のあらゆる類いによって(ローマ勢の)多くのものが傷つけられた。
*ad haec sustinenda magno usui fuisse tormenta.
**これに持ちこたえるために、投石器が大いに役立った。
*④ Fabium discessu eorum duabus relictis portis obstruere ceteras
**ファビウスは、彼ら(ガッリア勢)が退却すると、2つの門を残して、ほか(の門)を閉鎖した。
*pluteosque vallo addere et se in posterum diem similemque casum apparare<ref>similemque casum apparare はα系写本の記述で、β系写本では similem ad casum parare となっている。</ref>.
**胸壁を防柵を付け加えて、翌日における似たような状況に備えた。
*⑤ His rebus cognitis Caesar
**これらの事態を知って、カエサルは、
*summo studio militum ante ortum solis in castra pervenit.
**兵士たちの最大級の努力によって、日の出の前に(ゲルゴウィアの)陣営に到着した。
===42節===
'''ハエドゥイー族の者たちが反ローマ暴動を引き起こす'''
*① Dum haec ad [[w:la:Gergovia|Gergoviam]] geruntur,
**これらがゲルゴウィアの辺りでなされている間に、
*[[w:la:Haedui|Haedui]] primis nuntiis ab Litavicco acceptis
**[[w:ハエドゥイ族|ハエドゥイー族]]の者たちは、[[w:リタウィックス|リタウィックス]]からの最初の知らせを受け取ったが、
*nullum sibi ad cognoscendum spatium relinquunt.
**自分たちには(この知らせを)調べるための余地を何ら残さなかった。
*② Impellit alios avaritia, alios iracundia et temeritas
**ある者たちを貪欲さが、ある者たちを激しやすさや無分別が駆り立てた。
*─ quae maxime illi hominum generi est innata ─ ut levem auditionem habeant pro re comperta.
**あの種族の人々はとりわけ、軽率な風聞を確認された事として見なすように、生まれついているのだ。
*③ Bona civium Romanorum diripiunt, caedes faciunt, in servitutem abstrahunt.
**(ハエドゥイー族の者たちは)ローマ市民たちの財産を略奪し、殺戮を行なって、隷属状態に引きずり込んだ。
*④ Adiuvat rem proclinatam Convictolitavis
**(さらに)傾いた事態を[[w:コンウィクトリタウィス|コンウィクトリタウィス]]が助長して、
*plebemque ad furorem impellit, ut facinore admisso ad sanitatem reverti pudeat.
**民衆を狂暴さへと、悪行を犯して冷静さへ引き返すことを恥と思うように、駆り立てた。
*⑤ M.(Marcum) Aristium tribunum militum iter ad legionem facientem
**<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>であるマルクス・アリスティウスが[[w:ローマ軍団|軍団]]のところへ旅しているところを
*fide data ex oppido [[w:la:Cabillonum|Cavillono]] educunt;
**(安全の)保証を与えて、城塞都市カウィッロヌムから連れ出した。
**:<span style="color:#009900;">(訳注:カウィッロヌム Cavillonum はカビッロヌム Cabillonum とも綴り、現在の[[w:シャロン=スュル=ソーヌ|シャロン=スュル=ソーヌ]])</span>
*idem facere cogunt eos, qui negotiandi causa ibi constiterant.
**そこに商売をするために定住していた(ローマ人の)者たちにも同じことをするように強要した。
*⑥ Hos continuo <in><ref>in は写本にないが、近世の活字本から挿入されている。</ref> itinere adorti omnibus impedimentis exuunt;
**直ちに彼らを途中で襲撃して、すべての手荷物を奪い取った。
*repugnantes diem noctemque obsident;
**抵抗する者たちを昼夜にわたって包囲した。
*multis utrimque interfectis
**(ハエドゥイー族とローマ人の)双方とも多くの者たちが殺されて、
*maiorem multitudinem armatorum<ref>armatorum はα系写本の記述で、β系写本では ad arma となっている。</ref> concitant.
**(ハエドゥイー族の)より多くの群衆を武装へと扇動した。
===43節===
'''ハエドゥイー族当局がカエサルに屈服。ガッリア大動乱の予感'''
*① Interim nuntio adlato omnes eorum milites in potestate Caesaris teneri,
**その間に、彼ら(ハエドゥイー族)の兵士すべてがカエサルの権力下で支配されているという知らせがもたらされて、
*concurrunt ad Aristium,
**(ハエドゥイー族当局の者たちは)アリスティウスのところへ急ぎ集まって、
*nihil publico factum consilio demonstrant;
**(ローマ市民に対する襲撃は)何ら公けに企てがなされたものではないと説明した。
*② quaestionem de bonis direptis decernunt,
**(部族当局は、ローマ市民から)略奪された財産についての究明を決定して、
*Litavicci fratrumque bona publicant,
**リタウィックスと兄弟たちの財産を没収し、
*legatos ad Caesarem sui purgandi gratia mittunt.
**カエサルのところへ使節たちを、自分たちを赦免することのために遣わした。
*③ Haec faciunt reciperandorum<ref>reciperandorum はα系写本の記述で、β系写本では recuperandorum となっている。</ref> suorum causa;
**これらを、配下の者たち(=歩兵1万名)を取り戻すために行なったのだ。
*sed contaminati facinore et capti compendio ex direptis bonis,
**しかし(彼らは)悪行に汚染されていて、略奪した財産の利得にとらわれており、
*quod ea res ad multos pertinebat, timore<ref>timore はα系写本の記述で、β系写本では et timore となっている。</ref> poenae exterriti
**その事に多くの者たちが関与していたので、懲罰の恐れに脅かされて、
*consilia clam de bello inire incipiunt
**ひそかに戦争の謀計に取りかかり始めて、
*civitatesque reliquas legationibus sollicitant.
**ほかの諸部族を使節派遣によって、そそのかした。
*④ Quae tametsi Caesar intellegebat, tamen quam mitissime potest legatos appellat;
**カエサルはそのようなことを認識していたけれども、(ハエドゥイー族の)使節たちにできるだけ平静に話しかけた。
*nihil se propter inscientiam levitatemque vulgi gravius de civitate iudicare
**自分は(ハエドゥイー族の)民衆の無知や軽率さのために、部族を何ら厳重に裁断することはない、と。
*neque de sua in [[w:la:Haedui|Haeduos]] benevolentia deminuere.
**自分のハエドゥイー族に対する好意を減ずることはない、と。
*⑤ Ipse maiorem Galliae motum exspectans,
**(カエサル)自身は、ガッリアのより大きな動乱を予期しており、
*ne ab omnibus civitatibus circumsisteretur,
**すべての部族によって包囲されることがないように、
*consilia inibat, quemadmodum ab<ref>ab はχ系写本の記述で、φ系写本では a となっており、β系写本にはない。</ref> [[w:la:Gergovia|Gergovia]] discederet ac rursus omnem exercitum contraheret,
**どのようにゲルゴウィアから撤退して再び軍隊全体を集結するか、策定に取りかかった。
*ne profectio nata ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> timore defectionis similis<ref>similis はα系写本の記述で、β系写本では similisque となっている。</ref> fugae videretur.
**(諸部族の)背反の恐れから生じた出発が、逃亡同然と見られないように。
===44節===
'''ゲルゴウィアの急所の尾根'''
[[画像:Plateau_of_Gergovia.jpg|thumb|center|900px|ゲルゴウィア([[w:la:Gergovia|Gergovia]])すなわち現在のジェルゴヴィ高地([[w:fr:Plateau de Gergovie|Plateau de Gergovie]])の全景(南方のル・クレスト [[w:fr:Le Crest|Le Crest]] から撮影)。<br>画像中央の右下に、ローマ勢が占領して小さい方の陣営を築いていたと推定されているラ・ロシュ=ブランシュ([[w:fr:La Roche-Blanche (Puy-de-Dôme)|La Roche-Blanche]])の丘陵が見える。<br>本節①項で言及されているのは画像の左端に写る丘陵と思われ、尾根伝いにほぼ平坦なゲルゴウィアの山頂(画像中央)に続いている。<br>これらの位置関係の推定は、19世紀の[[w:ウジェーヌ・ストッフェル|ウジェーヌ・ストッフェル]]大佐(colonel Eugène Stoffel)の発掘調査に依拠したものである。]]
[[画像:La_Roche_Blanche.JPG|thumb|right|300px|ローマ勢が占領して小さい方の陣営を築いていたと推定されているラ・ロシュ=ブランシュ([[w:fr:La Roche-Blanche (Puy-de-Dôme)|La Roche-Blanche]])の丘陵]]
*① Haec cogitanti accidere visa est facultas bene rei gerendae<ref>rei gerendae はα系写本の記述で、β系写本では gerendae rei となっている。</ref>.
**(カエサルが)これらを考慮しているときに、事をうまく行なえる可能性が生じたと思われた。
*Nam cum in minora castra operis perspiciendi causa venisset,
**すなわち、(ローマ勢の)小さい方の陣営に、作業を視察するためにやって来たときに、
*animadvertit collem qui ab hostibus tenebatur nudatum hominibus,
**敵たちによって占められていた丘陵が、無人にされているのに気付いた。
*qui superioribus diebus vix prae multitudine cerni poterat.
**それは、前日には、(ガッリア勢の)大勢の者たちのためにほとんど見分けが付けられないものだった。
*② Admiratus quaerit ex perfugis causam,
**(カエサルは)驚いて、(ゲルゴウィアからの)[[w:脱走兵|脱走兵]]たちに理由を尋ねた。
*quorum magnus ad eum cotidie numerus confluebat.
**その者たちの多数は、毎日、彼(カエサル)のところへ群がり集まっていたのだ。
**:<span style="color:#009900;">(訳注:[[#14節|14節]]⑨項で既述のように、ガッリア勢は[[w:兵役逃れ|兵役忌避]]の多さに悩まされていた。)</span>
*③ Constabat inter omnes
**(脱走兵たち)皆の間では同じ意見であった。
*─ quod iam ipse Caesar per exploratores cognoverat ─
**─ すでにカエサル自身が偵察者たちを通して知っていたことであったが ─
*dorsum esse eius iugi prope aequum, sed silvestre<ref>silvestre はβ系写本の記述で、α系写本では hunc silvestrem となっている。</ref> et angustum,
**その尾根の背面はほぼ平地で、しかし森林におおわれて狭く、
*qua esset aditus ad alteram partem oppidi<ref>partem oppidi はα系写本の記述で、β系写本では oppidi partem となっている。</ref>;
**それによって城塞都市の別の方面への出入口となっている、と。
*④ vehementer huic illos loco<ref>vehementer huic illos loco はα系写本の記述で、β系写本では huic loco vehementer illos となっている。</ref> timere nec iam aliter sentire,
**この地帯を彼ら(ガッリア勢)が極度に恐れ、すでに感じていたことには、
*uno colle ab Romanis occupato, si alterum amisissent,
**ローマ人によって一つの丘陵が占領されているので、もしもう一方をも失ったならば、
*quin paene circumvallati atque omni exitu et pabulatione interclusi viderentur;
**(ゲルゴウィアが)ほとんど包囲されて、あらゆる出口と糧秣徴発を阻まれると思われたのである。
*ad hunc muniendum locum<ref>locum はβ系写本の記述で、α系写本にはない。</ref> omnes a [[w:la:Vercingetorix|Vercingetorige]] evocatos.
**この地帯の辺りを防御するために、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]により総勢が召集されていたのだ、と。
===45節===
'''ローマ勢の陽動部隊が敵を引き付け、本隊が敵の本陣を目指す'''
*① Hac re cognita Caesar mittit complures equitum turmas eodem<ref>eodem はβ系写本の記述で、α系写本では eisdem などとなっており、またモイゼル(Meusel)は eo de と解釈している。</ref> media nocte;
**この事を知って、カエサルは多数の[[w:騎兵|騎兵]]<ruby><rb>小隊</rb><rp>(</rp><rt>トゥルマ</rt><rp>)</rp></ruby>を同じところに真夜中に派遣した。
**:<span style="color:#009900;"> (訳注:騎兵小隊 turma は、ローマの同盟部族などからなる騎兵の単位で、30騎ほどからなるとされている。)</span>
*imperat his<ref>his はβ系写本の記述で、α系写本にはない。</ref> ut paulo tumultuosius omnibus locis vagarentur<ref>vagarentur はα系写本の記述で、β系写本では pervagentur となっている。</ref>.
**彼らには、いくらか騒々しく、あらゆる場所を動き回るように命令した。
*② Prima luce magnum numerum impedimentorum ex castris mulorumque produci deque his stramenta detrahi
**夜明けに、陣営から多数の荷馬や[[w:ラバ|ラバ]]を連れ出して、これらから[[w:鞍|荷鞍]]を取り去って、
*mulionesque cum cassidibus equitum specie ac simulatione collibus circumvehi iubet.
**ラバ引きの者たちを鉄兜とともに、騎兵の外見と真似をさせて、丘々を乗り回すことを命じた。
*③ His paucos addit equites, qui latius ostentationis causa vagarentur<ref>vagarentur はα系写本の記述で、β系写本では vagentur となっている。</ref>.
**彼らに少数の騎兵を付き添わせて、より広く見せびらかすために動き回らせた。
*Longo circuitu easdem omnes iubet petere regiones.
**(ラバ引きと騎兵の)皆には、長く迂回して、同じ一帯を目指すことを命じた。
*④ Haec procul ex oppido videbantur, ut erat a Gergovia despectus in castra,
**これらは<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>から遠くに望見され、ゲルゴウィアから(ローマ勢の)陣営が眺められたほどであったが、
*neque tanto spatio certi quid esset explorari poterat.
**これほどの距離のために(ガッリア勢からは)何ごとか確かなことは探り出されなかった。
*⑤ Legionem unam eodem iugo mittit
**(カエサルは)1個[[w:ローマ軍団|軍団]]を同じ尾根に派遣して、
*et paulum progressam inferiore constituit loco silvisque occultat.
**いくらか前進させて低い場所に駐留させ、森林に隠した。
*⑥ Augetur Gallis suspicio
**(これらを見た)ガッリア人には疑念が増されて、
*atque omnes illo ad munitionem copiae traducuntur.
**軍勢のすべてがあそこ(=無人にしていた急所の丘陵)へ防御のために移動した。
*⑦ Vacua castra hostium Caesar conspicatus
**カエサルは敵たちの(ゲルゴウィア山頂の)陣営が空であると気付いて、
*tectis insignibus suorum occultatisque signis militaribus
**配下の者たちの標章を覆い隠し、軍旗を隠して、
*raros milites, ne ex oppido animadverterentur, ex maioribus castris in minora traducit
**兵士たちをまばらに、城塞都市から気付かれないように、大きい方の陣営から小さい方に移動させた。
*legatisque, quos singulis legionibus praefecerat, quid fieri velit, ostendit;
**個々の軍団を指揮させていた<ruby><rb>[[w:レガトゥス|副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>たちに、何がなされることを欲しているかを示した。
*⑧ in primis monet ut contineant milites,
**第一に、兵士たちを抑え留めるように戒めた。
*ne studio pugnandi aut spe praedae longius progrediantur;
**(兵士たちが)戦うことの熱意、あるいは略奪の希望により、より遠くまで進み出ないように、と。
*⑨ quid iniquitas loci habeat incommodi proponit;
**地勢の不利がどれほど敗北を生じるかを示した。
*hoc una celeritate posse vitari<ref>vitari はβ系写本の記述で、α系写本では mutari となっている。</ref>;
**迅速さのみがこれを避けることができる。
*occasionis esse rem, non proelii.
**事の成否は、戦闘にではなく、好機にかかっている。
*⑩ His rebus expositis signum dat
**これらの事柄を説明して、(副官たちに進軍の)号令を出した。
*et ab dextra parte alio ascensu eodem tempore Haeduos mittit.
**右の方面からは、別の登り道を(ローマ軍本隊と)同時に[[w:ハエドゥイ族|ハエドゥイー族]](の騎兵)を派遣した。
===46節===
'''ローマ軍の本隊が防壁を越えて、敵陣の一部を占拠'''
*① Oppidi murus ab<ref>ab はB・M・L・N写本の記述で、β系写本では a となっている。</ref> planitie atque initio ascensus recta regione,
**(ゲルゴウィアの)<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の城壁は、平地や登り道の始まりから真っ直ぐに(=直線距離で)、
*si nullus amfractus<ref>amfractus はα系写本の記述で、β系写本では anfractus となっている。</ref> intercederet, mille CC(mille ducenti)<ref>mille CC(=1200) はα系写本の記述で、β系写本では CC(=200)となっている。</ref> passus aberat;
**もし何らの湾曲が間になければ、1200[[w:パッスス|パッスス]](=約1.8km)離れていた。
*② quicquid huc circuitus ad molliendum clivum accesserat<ref>accesserat は写本(ω)の記述だが、オットー・ゼール [[w:de:Otto Seel|Otto Seel]] の校訂では accesserit としている。</ref>,
**ここに(山の斜面の)傾斜を緩和するために、何らかの回り道が付け加わっていて、
*id spatium itineris augebat.
**その道のりの距離を増していた。
*③ A medio fere colle in longitudinem, ut natura montis ferebat,
**丘陵のほぼ真ん中から、山の地形が作り出したかのように、長きにわたって、
*ex grandibus saxis sex pedum murum qui nostrum<ref>nostrum は中世の写本(ω)の記述だが、近世の版では nostrorum となっている。</ref> impetum tardaret,
**大きな石垣からなる6[[w:ペース (長さ)|ペース]](=約1.8m)もの、我が方(ローマ勢)の突進を遅らせる防壁を、
*praeduxerant Galli,
**ガッリア人は引いて来ており、
*atque inferiore omni spatio vacuo relicto
**(その石垣の防壁)より下方のすべての空間は人気なく残されていて、
*superiorem partem collis usque ad murum oppidi densissimis castris compleverant.
**丘陵のより上方の部分を、城塞都市の城壁の方へ続けざまに、とても密集した(各部族ごとの)陣営で満たしていた。
*④ Milites dato signo celeriter ad munitionem perveniunt
**(ローマ人の)兵士たちは号令を与えられて、速やかに(石垣の)防壁のところへ到達して、
*eamque transgressi trinis castris potiuntur;
**それを越えて行って、3つの(部族ごとの)陣営を占拠した。
*⑤ ac tanta fuit in castris capiendis<ref>castris capiendis はα系写本の記述で、β系写本では capiendis castris となっている。</ref> celeritas,
**(3つの)陣営を奪取することにおいて、これほどにも迅速さがあったので、
*ut Teutomatus, rex Nitiobrogum, subito in tabernaculo oppressus,
**その結果、[[w:ニティオブロゲス族|ニティオブロゲス族]]の王[[w:テウトマトゥス|テウトマトゥス]]は、[[w:テント|天幕]]において突然に襲われて、
*ut meridie conquieverat, superiore corporis parte nudata<ref>nudata はα系写本の記述で、β系写本では nuda となっている。</ref>
**昼寝をしていたが、上半身は裸のままで、
*vulnerato equo vix se ex manibus praedantium militum eriperet.
**傷付けられた馬によって、略奪している(ローマ人)兵士の手から、やっと自らを救い出した。
===47節===
'''血気にはやるローマ兵たちの猪突猛進、ガッリア女たちの命乞い'''
*① Consecutus id quod animo proposuerat
**心に決めていたことを達成したので、
*Caesar receptui cani iussit
**カエサルは退却ラッパを吹くことを命じた。
*legionique decimae, quacum erat, contionatus signa constituit.
**彼とともにいた[[w:第10軍団エクェストリス|第10軍団]]に呼びかけて、軍旗を停止した。
**:<span style="color:#009900;">(訳注:第10軍団はガッリア戦争初期からの最古参の軍団。軍旗を停止するとは、進軍を止めること。)</span>
*② Ac<ref>ac はα系写本の記述で、β系写本では at となっている。</ref> reliquarum legionum milites non exaudito<ref>exaudito はα系写本の記述で、β系写本では audito となっている。</ref> sono tubae,
**ほかの[[w:ローマ軍団|軍団]]の兵士たちは、ラッパの響きを聞き取れなかった。
*quod satis magna valles intercedebat,
**というのは、十分に大きな峡谷が間にあったからである。
*tamen ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> tribunis militum legatisque, ut erat a Caesare praeceptum, retinebantur;
**しかしながら、<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>たちや<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>たちにより、カエサルから指図されていたように、制止されていた。
*③ Sed elati spe celeris victoriae et hostium fuga et superiorum temporum secundis proeliis
**だが(兵士たちは)迅速な勝利の希望や、敵たちの逃亡や、それ以前のときの順調な戦闘により、高慢になっていて、
*nihil adeo arduum sibi esse existimaverunt<ref>esse existimaverunt はα系写本の記述で、β系写本では existimabant となっている。</ref>, quod non virtute consequi possent,
**自分たちにとって、武勇で達することができないほどの困難なものはまったく何もない、と考えており、
*neque finem prius sequendi fecerunt quam muro oppidi portisque adpropinquarunt.
**(ゲルゴウィアの)城塞都市の城壁や城門に近付くまでは、追及を終結させなかった。
*④ Tum vero ex omnibus urbis partibus orto clamore,
**すると、まさに(ゲルゴウィアの)町のあらゆる方面から叫び声が発せられて、
*qui longius aberant, repentino tumultu perterriti,
**(城内の)遠い方に離れていた者たちは、予期せぬ騒ぎに脅えており、
*cum hostem intra portas esse existimarent,
**敵(=ローマ人)が城門の内側にいると考えたので、
*sese ex oppido eiecerunt.
**城塞都市から急ぎ出た。
*⑤ Matres familiae de muro vestem argentumque iactabant
**家庭の母親たちは、城壁から衣類や貨幣をたびたび投げやった。
*et pectore nudo prominentes passis manibus obtestabantur Romanos,
**そして胸を裸にして(城壁の上に)進み出て、手を伸ばしてローマ人たちに哀願した。
*ut sibi parcerent
**自分たちを容赦するように、
*neu, sicut Avarici fecissent, ne a mulieribus quidem atque infantibus abstinerent;
**(ローマ人が)アウァーリクムでしたように女たちや子供たちでさえも赦免しないことのないように、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
**:<span style="color:#009900;">(訳注:ローマ人がアウァーリクムでした行為については、[[#28節|28節]]④項を参照。)</span>
*⑥ nonnullae de muris<ref>muris はα系写本の記述で、β系写本では mure となっている。</ref> per manus demissae sese militibus tradebant.
**少なからぬ者たちは、城壁から手で降ろされて、(ローマ人)兵士たちに身を任せた。
[[画像:Gergovie_mur_pano2.jpg|thumb|center|700px|ゲルゴウィア([[w:la:Gergovia|Gergovia]])すなわち現在のジェルゴヴィ高地([[w:fr:Plateau de Gergovie|Plateau de Gergovie]])で発掘された城壁の遺構。]]
*⑦ L.(Lucius) Fabius centurio legionis VIII(octavae),
**[[w:第8軍団アウグスタ|第8軍団]]の<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby>であるルキウス・ファビウスは、
*quem inter suos eo die dixisse constabat
**配下の者たちの間で、その日、(以下のように)言ったことが知られていた。
*excitari se Avaricensibus praemiis neque commissurum, ut prius quisquam murum ascenderet,
**自分はアウァーリクムの恩賞に奮い立たせられて、何者かが(自分)より早く城壁を登るようなことは生じさせない、と。
*tres suos nactus manipulares
**(ファビウスは)同じ隊の兵士である3人の配下と遭遇して、
**:<span style="color:#009900;">(訳注:manipulares は「[[w:マニプルス|歩兵中隊]]の」とも解されるが、ここでは「同じ隊の兵士」という意味であろう。)</span>
*atque ab his sublevatus murum ascendit,
**彼らによって持ち上げられて城壁を登った。
*hos<ref>hos はα系写本の記述で、π系写本では eos 、ρ系写本では eo となっている。</ref> ipse rursus singulos exceptans in murum extulit.
**彼らは(ファビウス)自身が再び1人ずつ引き出して、城壁に導き上げた。
===48節===
'''ガッリア勢が城塞都市に引き返して、防戦に努める'''
*① Interim hi<ref>hi はα系・π系・R写本の記述で、U写本では ii となっている。</ref> qui ad alteram partem oppidi, ut supra demonstravimus, munitionis causa convenerant,
**その間に、前に述べたように、<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の別の方面へ、防御のために集結していた(ガッリア勢の)者たちは、
**:<span style="color:#009900;">(訳注:[[#45節|45節]]⑥項で述べられている。)</span>
*primo exaudito clamore,
**初めに叫び声を聞き取り、
*inde etiam crebris nuntiis incitati oppidum ab Romanis teneri,
**さらに、城塞都市がローマ人たちによって占領されたという頻繁な知らせにさえも駆り立てられて、
*praemissis equitibus magno concursu<ref>concursu はα系写本の記述で、β系写本では cursu となっている。</ref> eo contenderunt.
**[[w:騎兵|騎兵]]たちを先遣して、(歩兵たちも)駆けに駆けて、そこ(=城塞都市)へ急いだ。
[[画像:Auvergne_Gaul_coin_CdM.jpg|thumb|right|300px|[[w:アルウェルニ族|アルウェルニー族]]の兵士が刻まれた貨幣([[w:ビブリオテーク・ナショナル|仏国立図書館]]貨幣部所蔵)]]
*② Eorum ut quisque primus venerat,
**彼らの(城塞都市に)到着した者から順々に
**:<span style="color:#009900;">(訳注:quisque primus「最初の者ごとに;順々に」)</span>
*sub muro consistebat suorumque pugnantium numerum augebat.
**城壁の下に陣取って、味方の戦う者たちの数を増した。
*③ Quorum cum magna multitudo convenisset,
**その者たちの大群集が集結したときに、
*matres familiae quae paulo ante Romanis de muro manus tendebant,
**少し前にはローマ人たちに城壁から手を差し出していた家庭の母親たちが
*suos obtestari
**味方に哀願して、
*et more Gallico passum capillum ostentare liberosque in conspectum proferre coeperunt.
**ガッリアの風習により、髪を広げて示し、子供たちを(男たちの)眼前に運び始めた。
*④ Erat Romanis nec loco nec numero aequa contentio;
**ローマ人たちにとっては、地の利でも(兵の)数でも、対等な闘いはなかった。
*simul et cursu et spatio pugnae defatigati
**と同時に、戦いの疾走や時間(の長さ)に疲弊させられていて、
*non facile recentes atque integros sustinebant.
**(ガッリア勢の)新来かつ無傷の者たちに、容易に持ちこたえられなかった。
===49節===
'''カエサルが劣勢の自軍に副官セクスティウスを増援する'''
*① Caesar cum iniquo loco pugnari hostiumque augeri copias videret,
**カエサルは(戦闘が自軍に)不利な場所で戦われていること、かつ敵方の軍勢が増やされていることを見たので、
*praemetuens suis
**配下の者たちを気遣って、
*ad T.(Titum) Sextium legatum, quem minoribus castris praesidio reliquerat, misit,
**小さい方の陣営に守備として残しておいた<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>ティトゥス・セクスティウスのところへ(伝令を)遣わして、
**:<span style="color:#009900;">(訳注:セクスティウスについては、すでに副官として[[ガリア戦記 第6巻#1節|第6巻1節]]で言及されている。)</span>
*ut cohortes ex castris celeriter educeret
**陣営から(いくつかの)<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>を速やかに進発させるように、
*et sub infimo colle ab dextro latere hostium constitueret,
**かつ丘陵のふもとの下方で、敵方の右の側面に布陣するように、と。
*② ut, si nostros loco depulsos vidisset, quominus libere hostes insequerentur terreret.
**もし我が方が(戦闘の)場所から追いやられたのを見たら、敵方が自由に追撃することにならぬよう脅かすためである。
*③ Ipse paulum ex eo loco cum legione progressus, ubi constiterat,
**(カエサル)自身は、停止していた場所から、軍団とともに少し前進して、
**:<span style="color:#009900;">([[#47節|47節]]①項で既述のように、カエサルとともに停止していたのは[[w:第10軍団エクェストリス|第10軍団]]である。)</span>
*eventum pugnae exspectabat.
**戦いの決着を待っていた。
===50節===
'''激戦の末、敗勢に陥るローマ軍'''
*① Cum acerrime comminus pugnaretur, hostes loco et numero, nostri virtute confiderent,
**(両軍により)激烈に格闘して戦われていて、敵方は地の利と(兵の)数を、我が方(ローマ軍)が武勇を頼りとしていたときに、
*subito sunt Haedui visi ab latere nostris aperto,
**突如として、我が方にとって開けた側面(=右側)から、[[w:ハエドゥイ族|ハエドゥイー族]]の者たち(の姿)が見られた。
**:<span style="color:#009900;">(訳注:「開けた側面から」ab latere aperto とは、兵士の[[w:スクトゥム|長盾]]で覆われていない右側を指す。)</span>
*quos Caesar ab dextra parte alio ascensu manus distinendae causa miserat.
**カエサルがその者たちを右の方面から別の登り道により(敵の)部隊を分散しておくために派遣していたのだ。
**:<span style="color:#009900;">(訳注:この事は、[[#45節|45節]]⑩項で述べられている。)</span>
*② Hi similitudine armorum vehementer nostros perterruerunt,
**彼らの武具が(ガッリア勢のものと)似ていることが、我が方(の兵士たち)を極度に怖れさせた。
*ac tametsi dextris humeris<ref>humeris が写本(ω)の記述であるが、umeris とするのも一般的となっている。</ref> exsertis animadvertebantur, quod insigne pactum<ref>pactum はHellerによる修正提案で、写本(ω)では pacatum となっており、研究者たちにより他の修正も提案されている。</ref> esse consuerat,
**(ハエドゥイー勢は)右の肩を脱いでいるのが視認され、その印は(味方として)定められているのが常であったが、
*tamen id ipsum sui fallendi causa milites ab hostibus factum existimabant.
**けれども(ローマ人の)兵士たちは、それ自体が自分たちを欺くために、敵方によりなされたと考えたのだ。
[[画像:Dorf_La_Roche_Blanche.JPG|thumb|right|300px|ゲルゴウィア([[w:la:Gergovia|Gergovia]])すなわち現在のジェルゴヴィ高地([[w:fr:Plateau_de_Gergovie|Plateau de Gergovie]])の遠景(南方のル・クレスト [[w:fr:Le_Crest|Le Crest]] から撮影)。画像中央がローマ軍が小さい方の陣営を設置していたと推定されているラ・ロシュ=ブランシュ([[w:fr:La_Roche-Blanche_(Puy-de-Dôme)|La Roche Blanche]])の丘陵で、山頂からこの丘陵の辺りが激戦地だったと思われる。現在は山麓にかけて住宅地が広がっている。]]
*③ Eodem tempore L.(Lucius) Fabius centurio quique una murum ascenderant,
**同じ時に、<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby>ルキウス・ファビウスおよび一緒に城壁を登っていた者たちは、
**:<span style="color:#009900;">(訳注:ファビウスらについては、[[#47節|47節]]⑦項で述べられている。)</span>
*circumventi atque interfecti de<ref>de はβ系写本の記述で、α系写本にはない。</ref> muro praecipitabantur.
**(ガッリア勢に)取り囲まれ、殺害されて、城壁から突き落とされた。
*④ M.(Marcus) Petronius, eiusdem legionis centurio,
**同じ[[w:ローマ軍団|軍団]]の百人隊長マルクス・ペトロニウスは、
**:<span style="color:#009900;">(訳注:ファビウスと同じ軍団とは、[[#47節|47節]]⑦項で述べられているように[[w:第8軍団アウグスタ|第8軍団]]である。)</span>
*cum portas<ref>portas は写本(ω)の記述だが、portam と単数形にする修正も提案されている。</ref> excidere conatus esset,
**城門を突き破って出ることを試みていたときに、
*a multitudine oppressus ac sibi desperans multis iam vulneribus acceptis,
**(敵の)大勢によって圧倒されて、すでに多くの傷を受けて自分に絶望しており、
*manipularibus suis, qui illum secuti erant<ref>secuti erant はα系写本の記述で、β系写本では erant secuti となっている。</ref>,
**彼に付き従っていた同じ隊の配下の者たちに、
*"quoniam" inquit "me una vobiscum servare non possum,
**曰く「私と諸君を一緒に救うことはできないのだから、
*vestrae quidem certe vitae prospiciam, quos cupiditate gloriae adductus in periculum deduxi.
**せめて、栄誉の欲に引き寄せられて危険に引きずり込んでしまった諸君の生命にはきっと見通しを与えるであろう。
*⑤ Vos data facultate vobis consulite."
**諸君は(生き延びる)可能性が与えられているから、諸君(自身)を助けたまえ。」
*Simul in medios hostes inrupit duobusque interfectis reliquos a porta paulum submovit.
**と同時に、敵方の真ん中に押し入って、2名を殺害して、ほかの者たちを城門からいくらか退けた。
*⑥ Conantibus auxiliari suis
**(ペトロニウスは自分の)支援を試みる配下の者たちに、
*"frustra" inquit "meae vitae subvenire conamini, quem iam sanguis viresque deficiunt.
**曰く「もはや血も活力も尽き果てた私の生命を助けることを試みているのは無益だ。
*Proinde abite, dum est facultas, vosque ad legionem recipite."
**ゆえに(生き延びる)可能性がある間に立ち去れ。諸君は軍団のところへ退却せよ。」
*Ita pugnans post paulum<ref>paulum はα系・ρ系写本の記述で、π系写本では paululum となっており、paulo という修正提案もされている。</ref> concidit ac suis saluti fuit.
**こうして(ペトロニウスは)戦って少し後で斃れ、配下の者たちにとっては救いとなった。
===51節===
[[画像:Monument_gergovie_fr.jpg|thumb|right|290px|[[w:ゲルゴウィアの戦い|ゲルゴウィア戦勝]]記念碑。[[w:1903年|1903年]]に[[w:クレルモン=フェラン|クレルモン=フェラン市]]出身の建築家ジャン・テラール([[w:fr:Jean Teillard|Jean Teillard]])が、侵略者カエサルを撃退した郷土の英雄[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]に捧げるためにジェルゴヴィ高地([[w:fr:Plateau_de_Gergovie|Plateau de Gergovie]])に建立したものである。]]
[[画像:Plaque_Napoléon_III_Gergovie.jpg|thumb|right|300px|[[w:ゲルゴウィアの戦い|ゲルゴウィア]]の地に残る銘板。フランス語で「[[w:ナポレオン3世|ナポレオン3世]]は、1862年のゲルゴウィアの[[w:オッピドゥム|城塞都市]](跡)訪問の結果、メルドーニュ(Merdogne)の住民たちの要求に対して、1865年1月11日の政令によって、彼らの村にジェルゴヴィ([[w:fr:Gergovie|Gergovie]])の名を与えることを決定した。」<!-- «A la suite de sa visite sur l'oppidum de Gergovia en 1862, Napoléon III, à la demande des habitants de Merdogne, décida d'attribuer à leur village le nom de Gergovie, par décret du 11 janvier 1865.»-->]]
'''カエサルが一敗地に塗れる'''
*① Nostri cum undique premerentur,
**我が方(ローマ軍)は、至る所で圧倒されたので、
*XLVI(sex et quadraginta)<ref>XLVI はα系写本の記述で、β系写本では sex et XL となっている(どちらも46)。</ref> centurionibus amissis deiecti sunt loco.
**46名の<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby> を失い、(激戦の)場所から追いやられた。
*Sed intolerantius Gallos insequentes
**けれども、容赦なく追撃して来るガッリア人たちを
*legio decima tardavit, quae pro subsidio paulo aequiore loco constiterat.
**予備部隊(もしくは要撃部隊)として、いくらか平らな所に陣取っていた[[w:第10軍団エクェストリス|第10軍団]]が妨げた。
**:<span style="color:#009900;">(訳注:[[#47節|47節]]①項で既述のように、第10軍団はカエサルとともに待機していた。)</span>
*② Hanc rursus XIII(tertiae decimae) legionis cohortes exceperunt,
**これ(=第10軍団)をさらに、第13軍団の諸<ruby><rb>[[w:コホルス|大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>が支えた。
*quae ex castris minoribus eductae cum T.(Tito) Sextio legato ceperant locum<ref>ceperant locum はα系写本の記述で、β系写本では locum ceperant となっている。</ref> superiorem.
**それらは<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>ティトゥス・セクスティウスとともに小さい方の陣営から進発してより高い所を占めていたのだ。
**:<span style="color:#009900;">(訳注:[[#49節|49節]]を参照。)</span>
*③ Legiones ubi primum planitiem attigerunt,
**諸[[w:ローマ軍団|軍団]]は、平野に達するや否や、
*infestis contra hostes signis constiterunt.
**敵方に抗して戦備を整えて陣取った。
*④ [[w:la:Vercingetorix|Vercingetorix]] ab radicibus collis suos intra munitiones reduxit.
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、配下の者たちを丘陵の麓から(ゲルゴウィアの)防備の内側に連れ戻した。
*Eo die milites sunt paulo minus [[wikt:la:Septingenti|septingenti]] desiderati.
**その日、(ローマ軍は)700名よりいくらか少ない兵士を失った。
<br>
:<span style="color:#009900;">(訳注:カエサルとウェルキンゲトリークスは、たびたび交えた騎兵戦ではカエサルが勝っているが、</span>
:<span style="color:#009900;">両軍の主力部隊である歩兵どうしが激突したこの戦闘は、地の利もあって、ウェルキンゲトリークスが完勝した。</span>
:<span style="color:#009900;">カエサルは第8軍団など古参の部隊を投入しながら、歴戦の百人隊長と兵士たちを多く失った。)</span>
===52節===
'''敗軍の将カエサルが兵士たちを責める'''
*① Postero die Caesar contione advocata
**翌日にカエサルは(兵士たちの)集会を召集して、
*temeritatem cupiditatemque militum<ref>cupiditatemque militum はα系写本の記述で、β系写本では militum cupiditatemque となっている。</ref> reprehendit,
**兵士たちの無思慮や功名心をとがめた。
*quod sibi ipsi iudicavissent, quo procedendum aut quid agendum videretur,
**というのは、どこへ進み出るべきか、あるいは何がなされるべきと思われるのか、自分たちに対し自分たちで判断してしまったからだ。
*neque signo recipiendi dato constitissent
**退却することの合図を与えられても留まりもせず、
*neque ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> tribunis militum legatisque retineri potuissent.
**<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>や<ruby><rb>[[w:レガトゥス|総督副官]]たち</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>により制止されることもできなかったからだ。
*② Exposuit quid iniquitas loci posset, quod<ref>quod は写本(ω)では quid となっているが、近世以降の校訂者たちは quod と修正提案している。</ref> ipse ad [[w:la:Avaricum Biturigum|Avaricum]] sensisset,
**地の利のなさがどれほど影響するのか、(カエサル)自身がアウァーリクムで判断したことを説明した。
*cum sine duce et sine equitatu deprehensis hostibus
**将帥もなく騎兵隊もない敵たちを探し当てたときに、
**:<span style="color:#009900;">(訳注:[[#18節|18節]]~[[#19節|19節]]を参照。そのときガッリア勢は、ウェルキンゲトリークスが騎兵隊を連れて出て不在であった。)</span>
*exploratam victoriam dimisisset,
**確実であった勝利を諦めたのだ。
*ne parvum modo detrimentum in contentione propter iniquitatem loci accideret.
**地の利のなさのために、闘いにおいてほんのわずかな損害も生じないように(勝利を諦めたのだ)。
*③ Quanto opere<ref>Quanto opere はα系写本の記述で、β系写本では Quantopere となっている。</ref> eorum animi magnitudinem admiraretur,
**彼ら(兵士たち)の大胆さに(カエサルが)驚嘆すればするほど、
**:<span style="color:#009900;">(訳注:quanto opere ~ tanto opere …/quantopere ~ tantopere …「~すればするほど、ますます…」)</span>
*quos non castrorum munitiones, non altitudo montis, non murus oppidi tardare potuisset,
**彼らのことを(ガッリア勢の)陣営の防備も、山の高さも、[[w:オッピドゥム|城塞都市]]の城壁も妨げることができなかったのではあるが、
*tanto opere<ref>tanto opere はα系・T・ρ系写本の記述で、V写本では tantopere となっている。</ref> licentiam arrogantiamque reprehendere,
**それだけにますます(兵士たちの)勝手気ままさや高慢さを(カエサルは)非難する(と言った)。
*quod plus se quam imperatorem de victoria atque exitu rerum sentire existimarent;
**というのは、自分たちが将軍(カエサル)よりも勝利と事の結末についてよく判断していると考えていたからだ。
*④ nec<ref>nec はα系写本の記述で、β系写本では non となっている。</ref> minus se ab<ref>ab はα系写本の記述で、β系写本では in となっている。</ref> milite modestiam et continentiam quam virtutem atque animi magnitudinem desiderare.
**自分(カエサル)は兵士たちに、武勇や大胆さよりも、慎重さや自制心を望んでいるのだ。
*:<span style="color:#009900;">(訳注:カエサルは兵士たちを上のように責めたが、兵士たちを統制できなかった責任は最高司令官にある。)</span>
===53節===
'''カエサルとローマ軍がゲルゴウィアから撤退'''
*① Hac habita contione et ad extremam orationem confirmatis militibus,
**(カエサルは)このような熱弁を振るって、演説の最後に、兵士たちを元気付けた。
*ne ob hanc causam animo permoverentur
**このような理由のために心をかき乱されないように、
*neu, quod iniquitas loci attulisset, id virtuti hostium tribuerent,
**かつ、地の利のなさが引き起こしたことを、敵方の武勇に転嫁しないように、と。
*eadem de profectione cogitans, quae ante senserat,
**(ゲルゴウィアからの)出発については、以前から判断していたのと同じことを考えていて、
**:<span style="color:#009900;">(訳注:[[#43節|43節]]⑤項を参照。ゲルゴウィアからの撤退が敗走同然に見られないようにと、考えていたのであろう。)</span>
*legiones ex castris eduxit aciemque idoneo loco constituit.
**諸[[w:ローマ軍団|軍団]]を陣営から進発させて、適切な場所に戦列を整えた。
*② Cum [[w:la:Vercingetorix|Vercingetorix]] nihilo minus < intra munitiones remaneret neque > in aequum locum descenderet,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]が、防備の内側に留まったばかりか、平らな場所に降りてこなかったので、
**:<span style="color:#009900;">(訳注:< intra munitiones remaneret neque > は、写本になく、近代に挿入提案された修正案の一つ。)</span>
*levi facto equestri proelio, atque secundo, in castra exercitum reduxit.
**軽微な騎兵戦を行なって、順調のうちに軍隊を陣営に連れ戻した。
*③ Cum hoc idem postero die fecisset,
**翌日もこれと同じことを行なって、
*satis ad Gallicam ostentationem minuendam militumque animos confirmandos factum existimans
**ガッリア人の誇示を弱めること、および(ローマ人)兵士の心を強固にすることが十分になされたと考えたので、
*in [[w:la:Haedui|Haeduos]] movit castra.
**[[w:ハエドゥイ族|ハエドゥイー族]]のところに陣営を移(すために出発)した。
*④ Ne tum quidem insecutis hostibus
**そのとき、敵方は決して追撃して来なかったので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*tertio die ad flumen [[w:la:Elaver|Elaver]] pontes<ref>pontes はα系写本の記述で、β系写本では pontem となっている。</ref> reficit<ref>reficit はχ系・B・M・L・N写本の記述で、S写本では refecit となっている。</ref> eoque exercitum<ref>eoque exercitum はα系写本の記述で、β系写本では exercitumque となっている。</ref> traducit<ref>traducit はα系写本の記述で、β系写本では traduxit となっている。</ref>.
**3日目にはエラウェル川(=現在の[[w:アリエ川|アリエ川]])のところで橋を再建して、そこで軍隊を渡らせた。
===54節===
'''ハエドゥイー族のエポレドリクスとウィリドマルスらがカエサルのもとから立ち去る'''
*① Ibi a Viridomaro atque [[w:la:Eporedorix|Eporedorige]] [[w:la:Haedui|Haeduis]] appellatus discit
**そこで(カエサルが)[[w:ハエドゥイ族|ハエドゥイー族]]の[[w:ウィリドマルス|ウィリドマルス]]と[[w:エポレドリクス|エポレドリクス]]から話しかけられて知ったことには、
**:<span style="color:#009900;">(訳注:[[#39節|39節]]~[[#40節|40節]]を参照。ウィリドマルスとエポレドリクスはカエサルの軍勢に従軍していたと思われる。)</span>
*cum omni equitatu Litaviccum ad sollicitandos Haeduos profectum;
**[[w:リタウィックス|リタウィックス]]がすべての騎兵隊とともに、ハエドゥイー族の者たちをそそのかすために出発したという。
**:<span style="color:#009900;">(訳注:[[#40節|40節]]を参照。リタウィックスは謀計が破れたので、ゲルゴウィアに逃れていた。)</span>
*opus esse ipsos antecedere ad confirmandam civitatem.
**部族の支持を固めるために、(彼ら)自身が(リタウィックスより)先行することが必須であるというのだ。
*② Etsi multis iam rebus perfidiam Haeduorum<ref>perfidiam Haeduorum はα系写本の記述で、β系写本では Haeduorum perfidiam となっている。</ref> Caesar<ref>Caesar はβ系写本の記述で、α系写本にはない。</ref> perspectam habebat
**カエサルは、すでに多くの事により、ハエドゥイー族の背信行為を目にして来ており、
**:<span style="color:#009900;">(訳注:Etsi ~, tamen …「~としても、しかしながら…」)</span>
*atque horum discessu admaturari defectionem civitatis existimabat,
**この者たちが(カエサルのもとから)立ち去ることで、(ハエドゥイー)部族の背反が一層促進されると考えていたのだが、
*tamen eos retinendos non censuit<ref>censuit はπ系写本の記述で、α系・ρ系写本では constituit となっている。</ref>,
**しかしながら、彼ら(2人)を束縛するべきではないと考慮した。
*ne aut inferre iniuriam videretur aut dare<ref>dare はα系写本の記述で、β系写本では daret となっている。</ref> timoris aliquam<ref>timoris aliquam はα系写本の記述で、β系写本では aliquam timoris となっている。</ref> suspicionem.
**(カエサルが)無法行為を起こすと思われないように、あるいは(彼らを)怖れているという何らかの疑念を与えないように。
*③ Discedentibus his breviter sua in Haeduos merita exposuit,
**(カエサルは)立ち去る彼らに、ハエドゥイー族における自分の功績を手短に説明した。
*quos et quam humiles accepisset, compulsos in oppida, multatos agris,
**彼らが、どれほど無力であったのを引き受けたことか、[[w:オッピドゥム|城塞都市]]に押し込められ、耕地を台無しにされて、
**:<span style="color:#009900;">(訳注:et ~, et …「~でもあり、…でもある。」)</span>
*omnibus ereptis sociis<ref>sociis「同盟者たち」 はβ系写本の記述で、α系写本では copiis「軍勢」となっている。</ref>, imposito stipendio, obsidibus summa cum contumelia extortis,
**すべての同盟者たちを奪い取られ、貢物を課せられて、たいへんな侮辱とともに人質をもぎ取られていたことか。
*④ et quam in fortunam quamque in amplitudinem deduxisset,
**かつ、どれほどの境遇に、どれほどの高位に(カエサルが)引き上げもしたことか。
*ut non solum in pristinum statum redissent,
**その結果(ハエドゥイー族は)かつての地位に戻っただけでなく、
*sed omnium temporum dignitatem et gratiam antecessisse viderentur.
**(以前の)あらゆる時期の品格や信望をも越えていると思われる。
*His datis mandatis eos ab se dimisit.
**このような訓示を与えて、彼ら(2人)を自分のもとから送り出した。
===55節===
'''エポレドリクスとウィリドマルスらがローマの拠点ノウィオドゥーヌムで寝返る'''
[[画像:Nevers_-_Vue_depuis_la_rive_sud_de_la_Loire.jpg|thumb|center|700px|ノウィオドゥーヌム([[w:la:Nivernum|Noviodunum]])=現・[[w:ヌヴェール|ヌヴェール]]([[w:fr:Nevers|Nevers]])における、リゲル川([[w:la:Liger|Liger]])=現・[[w:ロワール川|ロワール川]]([[w:fr:Loire (fleuve)|Loire]])の岸辺の景観]]
*① [[w:la:Nivernum|Noviodunum]] erat oppidum [[w:la:Haedui|Haeduorum]] ad ripas [[w:la:Liger|Ligeris]] opportuno loco positum.
**ノウィオドゥーヌムは、[[w:ハエドゥイ族|ハエドゥイー族]]の[[w:オッピドゥム|城塞都市]]で、リゲル川(現[[w:ロワール川|ロワール川]])岸の好都合な所に位置していた。
**:<span style="color:#009900;">(訳注:『ガリア戦記』には同名の都市が計3か所載っているが、こちらは現在の[[w:ヌヴェール|ヌヴェール]] Nevers である。<br> 「[[ガリア戦記/ガリア語の名前#Nouio-dūnon|ガリア語の名前 #Nouio-dūnon]]」を参照せよ。)</span>
*② Huc Caesar omnes obsides Galliae, frumentum, pecuniam publicam,
**ここに、カエサルは、ガッリアのすべての人質たちや、糧食、公金、
*suorum atque exercitus impedimentorum magnam partem contulerat;
**および自分と軍隊の[[w:輜重|輜重]]の大部分を運び集めていた。
*③ huc magnum numerum equorum huius belli causa in [[w:la:Italia|Italia]] atque [[w:la:Hispania|Hispania]] coemptum miserat.
**ここに、この戦争のためにイタリアと[[w:ヒスパニア|ヒスパニア]]から買い集めた馬匹の多数を送っておいた。
*④ Eo cum [[w:la:Eporedorix|Eporedorix]] Viridomarusque venissent et de statu civitatis cognovissent,
**そこに、[[w:エポレドリクス|エポレドリクス]]と[[w:ウィリドマルス|ウィリドマルス]]がやって来て、(以下のような)部族の情勢について察知したときに、
[[画像:Bibracte333_crop.JPG|thumb|right|400px|[[w:ビブラクテ|ビブラクテ]]の[[w:オッピドゥム|城塞都市]]跡に整備された城壁の遺構]]
*Litaviccum [[w:la:Bibracte|Bibracti]] ab Haeduis receptum,
**(すなわち)リタウィックスが、ハエドゥイー族の者たちによって[[w:ビブラクテ|ビブラクテ]]に迎え入れられ、
*─ quod est oppidum apud eos maximae auctoritatis ─,
**それ(ビブラクテ)は彼ら(ハエドゥイー族)のもとで最大の影響力を持つ城塞都市であるが、
*Convictolitavem<ref>Convictolitavem はβ系・N写本の記述で、χ系・B・M・S・L写本では Convictolitabim となっている。</ref> magistratum magnamque partem senatus ad eum convenisse,
**統領コンウィクトリタウィスと評議会の大半の者たちが彼(リタウィックス)のもとへ参集し、
*legatos ad [[w:la:Vercingetorix|Vercingetorigem]] de pace et<ref>et は α系・U写本の記述で、π系・R写本では et de となっている。</ref> amicitia concilianda publice missos,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]のところへ和平と友好を仲介するべく公けに使節たちが遣わされた(ことを知った)ので、
*non praetermittendum instans<ref>instans はβ系写本の記述で、α系写本にはない。</ref> tantum commodum existimaverunt.
**(エポレドリクスとウィリドマルスは)眼前にあるこれほどの好機を放置するべきではないと考えたのだ。
*⑤ Itaque interfectis Novioduni custodibus quique eo negotiandi aut itineris<ref>aut itineris はβ系写本の記述で、α系写本にはない。</ref> causa convenerant,
**こうして(2人は)ノウィオドゥーヌムの(ローマ側の)番兵たちや商用や旅行のために来訪していた者たちを殺害し、
*pecuniam atque equos inter se partiti sunt;
**金銭および馬匹を互いに分け合った。
*⑥ obsides civitatum Bibracte ad magistratum deducendos curaverunt;
**(ガッリアの)部族の人質たちをビブラクテの統領のところへ連れて行くように手配した。
*⑦ oppidum, quod a<ref>a はα系写本の記述で、β系写本では ab となっている。</ref> se teneri non posse iudicabant,
**(ノウィオドゥーヌムの)城塞都市は、自分たちによって固守することはできないと判断したので、
*ne cui esset usui Romanis, incenderunt;
**ローマ人たちの有益になることがないように、焼き打ちした。
*⑧ frumenti quod subito potuerunt navibus avexerunt,
**糧食のうち、急いで(運ぶことが)できるものを船団で運び去って、
*reliquum flumine atque incendio corruperunt.
**残りのものを川(に流すこと)により、および焼き打ちにより、役立たないようにした。
*⑨ Ipsi ex finitimis regionibus copias cogere,
**(彼ら)自身は、近隣の地方から軍勢を徴集して、
*praesidia custodiasque ad ripas Ligeris disponere
**リゲルの川岸のたもとへ守備隊や番兵を分配して、
*equitatumque omnibus locis iniciendi timoris causa ostentare coeperunt,
**(ローマ人に)恐怖(の感情)を起こさせるために、[[w:騎兵|騎兵隊]]に誇示をさせ始めた。
*si ab re frumentaria Romanos excludere
**もし、ローマ人たちが糧食調達することを阻止するなら、
*† aut adductos inopia in provincia<ref>in provincia は、α系写本では ex provincia「属州から」、β系写本では provincia となっているが、コンスタン Constans やクロッツ A.Klotz らにより in provincia「属州に」と修正提案されている。</ref> expellere<ref>expellere「駆逐する」 はα系写本の記述で、β系写本では excludere「阻止する、妨げる」 となっている。</ref> † possent.
**あるいは(糧食などの)欠乏により、属州に駆逐することができるなら、と。
**:<span style="color:#009900;">(訳注:† ~ † は、写本の文章が崩れて校訂者を迷わせていることを表す記号。修正提案されている。)</span>
*⑩ Quam ad spem multum eos adiuvabat,
**そのような希望へ、彼らを大いに励まし助けたのは、
*quod Liger ex nivibus creverat,
**リゲル川(の水位)が雪水により増したことで、
*ut omnino vado non posse transiri videretur.
**すべての浅瀬が渡らせられることができないと思われたのである。
===56節===
'''カエサルが属州へは戻らず、増水したリゲル川の渡河を敢行'''
*① Quibus rebus cognitis Caesar maturandum sibi censuit,
**それらの事態を知ると、カエサルは自らにとって(以下のことを)急ぐべきだと考慮した。
*si esset in perficiendis pontibus periclitandum,
**もし、橋を造り上げる最中に(敵勢と闘うという)危険を冒すのであれば、
*ut prius, quam essent maiores eo coactae copiae, dimicaret.
**そこに(敵方の)より多くの軍勢が集結するよりも早く闘うように(急ぐべきだと)。
*② Nam ut commutato consilio iter in provinciam converteret,
**なぜなら、作戦を変更して、属州([[w:ガリア・ナルボネンシス|ガッリア・トラーンサルピーナ]])に進路を方向転換するようにと、
*ne metu quidem<ref>ne metu quidem はα系写本の記述で、β系写本では nemo tunc quidem 、そのほか近代の校訂者によって修正提案が行なわれている。</ref> necessario faciendum<ref>faciendum はβ系写本の記述で、α系写本では faciundum となっている。</ref> existimabat;
**(ガッリア勢への)怖れによって行なうことは決して必要ではない、と考えたのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*cum infamia atque indignitas rei
**(属州に撤退するという)事の不名誉や恥辱が、
**:<span style="color:#009900;">(訳注:cum ~ tum …「~であるのと同様に特に…である」)</span>
*et oppositus mons Cevenna<ref>Cevenna はχ系・U写本の記述で、π系・R写本の記述では Cebenna、φ系写本では Cevennae となっている。</ref> viarumque difficultas impediebat,
**およびケウェンナ山地が相対して道の(通行の)困難なことが、(属州への撤退を)妨げていたし、
**:<span style="color:#009900;">(訳注:ケウェンナ山地 mons Cevenna は現在のセヴェンヌ山地。[[#8節|8節]]を参照。)</span>
*tum maxime quod abiuncto [[w:la:Titus_Labienus|Labieno]] atque iis legionibus, quas una miserat, vehementer timebat.
**同様に、とりわけ[[w:ティトゥス・ラビエヌス|ラビエーヌス]]と一緒に派遣していた諸[[w:ローマ軍団|軍団]]から遠ざけられて、非常に心配してもいたのだ。
*③ Itaque admodum magnis diurnis nocturnisque itineribus confectis
**こうして、昼間も夜間も非常な強行軍を成し遂げて、
*contra omnium opinionem ad [[w:la:Liger|Ligerem]]<ref>Ligerem はα系写本の記述で、β系写本では Ligerim となっている。</ref> venit
**皆の予想に反して、リゲル川(=現[[w:ロワール川|ロワール川]])の辺りにやって来た。
*④ vadoque per equites invento pro rei necessitate opportuno,
**事態の緊急性に見合う好都合な浅瀬を、[[w:騎兵|騎兵]]たちを通じて見出して、
*ut brachia modo atque humeri<ref>humeri はA・φ系・ρ系写本の記述で、Q写本では umeri となっている。</ref> ad sustinenda arma liberi ab aqua esse possent,
**やっと腕と肩を、武器を差し上げるために、水から自由になることができた。
*disposito equitatu, qui vim fluminis refringeret,
**川の流れの圧力を妨げるべく、騎兵隊を分けて置いて、
*atque hostibus primo aspectu perturbatis,
**敵方は(ローマ勢を)初めに一見するや狼狽していたので、
*⑤ incolumem exercitum traduxit
**(カエサルは)軍隊を無傷のまま渡河させた。
*frumentumque in agris et pecoris copiam nactus
**耕地の穀物、および大量の家畜を獲得して、
*repleto his rebus exercitu
**これらの物を軍隊に補充して、
*iter in Senones facere instituit.
**セノネース族のところに行軍することを決めた。
**:<span style="color:#009900;">(訳注:セノネース族の方面には、副官ラビエーヌスと4個軍団を派遣していた。)</span>
==ラビエーヌスのルテティア遠征==
===57節===
'''副官ラビエーヌスがルテティア制圧に向かう'''
*① Dum haec apud Caesarem geruntur,
**これらがカエサルのもとで遂行されている間に、
*[[w:la:Titus Labienus|Labienus]] eo supplemento, quod nuper ex Italia venerat,
**[[w:ティトゥス・ラビエヌス|ラビエーヌス]]は、最近イタリアから来ていた補充兵(予備兵)を
**:<span style="color:#009900;">(訳注:[[#34節|34節]]で既述のようにラビエーヌスはカエサルから4個軍団とともにガッリア北部の制圧を委ねられていた。</span>
**:<span style="color:#009900;">また、[[#1節|1節]]で既述のようにカエサルはイタリア(属州[[w:ガリア・キサルピナ|ガッリア・キサルピーナ]])で部隊を徴兵していた。)</span>
*relicto [[w:la:Agedincum|Agedinci]], ut esset impedimentis praesidio,
**アゲディンクムに、[[w:輜重|輜重]]にとっての守備隊となるように、残留させて、
**:<span style="color:#009900;">(訳注:[[#10節|10節]]で既述のように、カエサルはアゲディンクム(現在の[[w:サンス|サンス]])に全軍の輜重を残していた。)</span>
*cum quattuor legionibus Luteciam<ref>Luteciam はα系写本の記述で、π系写本では Luceciam 、ρ系写本では Lucetiam となっている。[[ガリア戦記 第6巻#3節|第6巻3節]]では Lutetia(m) とも綴られている。</ref> proficiscitur.
**4個軍団とともに[[w:ルテティア|ルテティア]]に出発した。
**:<span style="color:#009900;">(訳注:ルテティア Lutetia は写本ではルテキア Lutetia とも綴られる。[[ガリア戦記 第6巻#3節|第6巻3節]]を参照。)</span>
*Id est oppidum Parisiorum, quod positum est<ref>quod positum est はα系写本の記述で、β系写本では単に positum となっている。</ref> in insula fluminis [[w:la:Sequana|Sequanae]].
**それ(ルテティア)は[[w:パリシイ族|パリスィイ族]]の<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>で、セクアナ川(=現[[w:セーヌ川|セーヌ川]])の中洲に位置している。
*② Cuius adventu ab hostibus cognito
**彼(ラビエーヌス)の到来が敵方により知られると、
*magnae ex finitimis civitatibus copiae convenerunt.
**近隣の諸部族から大軍勢が集結していた。
*③ Summa imperii traditur Camulogeno Aulerco,
**(北部ガッリア勢の)最高司令権は、[[w:アウレルキ族|アウレルキ族]]の[[w:カムロゲヌス|カムロゲヌス]]に託された。
*qui prope confectus aetate
**その者はかなり年老いていたが、
*tamen propter singularem scientiam rei militaris ad eum est honorem evocatus.
**けれども、彼の卓越した軍事の知識のために、顕職に召集されたのだ。
*④ Is cum animadvertisset perpetuam esse paludem,
**彼(カムロゲヌス)は、沼地が絶え間なくあることに気付いていたので、
*quae influeret in Sequanam atque illum omnem locum magnopere impediret,
**それはセクアナ(川)に流れ込み、かの一帯すべてを大いに近付きにくくしていたので、
*hic consedit nostrosque transitu prohibere instituit.
**ここに陣取って、我が方(ローマ勢)が渡河するのを妨げることに決めた。
===58節===
'''ラビエーヌスがメトロセドゥムを陥落させ、ルテティアのガッリア勢と対峙'''
*① [[w:la:Titus Labienus|Labienus]] primo vineas agere, cratibus atque aggere paludem explere
**[[w:ティトゥス・ラビエヌス|ラビエーヌス]]は初めに、<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby>を駆ること、柴や土砂で沼地を埋め立てること、
*atque iter munire conabatur.
**および道を築くこと、を試みた。
*② Postquam id difficilius confieri<ref>confieri はχ系・β系写本の記述で、Q写本では confici となっている。</ref> animadvertit,
**それが成し遂げられることが困難だと気付いた後で、
*silentio e castris tertia vigilia egressus
**(敵に知られないように)静けさのうちに第三夜警時に陣営から進発して、
*eodem, quo venerat, itinere Metlosedum<ref>Metlosedum はコンスタン L.-A. Constans による修正で、π系・U写本では Metiosedum 、α系・ρ系写本では Mellodunum などとなっており、写本により表記がさまざまである。</ref> pervenit.
**やって来たのと同じ道程により、メトロセドゥムに到達した。
**:<span style="color:#009900;">(訳注:メトロセドゥム Metlosedum は、写本によりメティオセドゥム Metiosedum とも綴られ、</span>
**:<span style="color:#009900;">後にはメロドゥーヌム [[w:la:Melodunum|Melodunum]] として知られる。現在の[[w:ムラン|ムラン]] [[w:fr:Melun|Melun]] である。)</span>
*③ Id est oppidum [[w:la:Senones|Senonum]] in insula [[w:la:Sequana|Sequanae]] positum, ut paulo ante de [[w:la:Lutetia|Lutecia]] diximus.
**それはセノネース族の城塞都市で、少し前に[[w:ルテティア|ルテティア]]について述べたように、セクアナ川の[[w:中州|中州]]に位置している。
**:<span style="color:#009900;">(訳注:ルテティアすなわち現在の[[w:パリ|パリ]]の中心部に[[w:シテ島|シテ島]]や[[w:サン=ルイ島|サン=ルイ島]]という[[w:セーヌ川|セーヌ川]]の中州があるように、</span>
**:<span style="color:#009900;">現在のムランの中心部にもサン=テティエンヌ島 [[w:fr:Île Saint-Étienne|Île Saint-Étienne]] というセーヌ川の中州がある。)</span>
*④ Deprensis<ref>deprensis という語形はα系写本の記述で、β系写本では deprehensis となっている。</ref> navibus circiter quinquaginta celeriterque coniunctis
**約50隻の船を探し出して、速やかに結び合わせて(舟橋として)、
*atque eo militibus iniectis
**そこに兵士たちを投入して、
*et rei novitate perterritis oppidanis,
**事の新奇さに<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の者たちは脅えて、
*quorum magna pars erat ad bellum evocata,
**彼ら(住民)の大部分は戦争へ徴集されていた(ため不在であった)ので、
*sine contentione oppido potitur.
**(ラビエーヌスは)闘うことなしに(中州にあるメトロセドゥムの)城塞都市を掌握した。
*⑤ Refecto ponte, quem superioribus diebus hostes resciderant, exercitum traducit
**それ以前の日々に敵方が破却していた橋を再建して、軍隊を(中州から対岸へ)渡らせて、
*et secundo flumine ad Luteciam iter facere coepit.
**川に沿ってルテティアの方へ行軍を始めた。
*⑥ Hostes re cognita ab iis, qui Metlosedo<ref>Metlosedo はコンスタン L.-A. Constans による修正で、β系・S写本では Metiosedo 、χ系写本では Melloduno 、B・M・L・N写本では Ametlodone(あるいは Ametclodone)などとなっている。</ref> fugerant,
**敵方は、メトロセドゥムから逃げて来た者たちから事態を知って、
*Luteciam incendi pontesque eius oppidi rescindi iubent;
**ルテティアを焼打ちすること、その城塞都市の橋を破却すること、を命じた。
*ipsi profecti a palude ad ripas<ref>ad ripas はχ系・B・M・L・N写本の記述で、S・Vおよびρ系写本では in ripas 、T写本では in ripa となっている。</ref> Sequanae
**彼ら自身は、沼地からセクアナの川岸へ出発して、
*e regione Luteciae contra Labieni castra considunt.
**ルテティア(の対岸)に向かってラビエーヌスの陣営に対抗して陣取った。
===59節===
'''ガッリア諸部族が迫り、ラビエーヌスが作戦変更を決断'''
*① Iam Caesar a [[w:la:Gergovia|Gergovia]] discessisse audiebatur,
**すでに、カエサルが[[w:ゲルゴウィア|ゲルゴウィア]]から撤退したことが聞かれていたし、
*iam de [[w:la:Haedui|Haeduorum]] defectione et secundo Galliae motu rumores adferebantur,
**もはや、[[w:ハエドゥイ族|ハエドゥイー族]]の背反や、ガッリアの動乱の順調さについての噂がもたらされていた。
*Gallique in conloquiis
**(当地の)ガッリア人たちは会話の中で、
*interclusum itinere et [[w:la:Liger|Ligeri]] Caesarem inopia frumenti coactum in provinciam contendisse confirmabant.
**カエサルが行軍やリゲル(渡河)を遮られて、糧食の欠乏により属州([[w:ガリア・ナルボネンシス|ガッリア・トラーンサルピーナ]])に急ぐことを強いられた、と確言した。
*② Bellovaci autem defectione Haeduorum cognita,
**一方で、ベッロウァキ族もハエドゥイー族の背反を知って、
**:<span style="color:#009900;">(訳注:ベッロウァキ族は、ハエドゥイー族の仲介によりカエサルに降伏していた。[[ガリア戦記 第2巻#14節|第2巻14節]]~15節を参照。)</span>
*qui iam<ref>qui iam は古典学者 ニコラエス・ハインシウス1世 [[w:en:Nikolaes_Heinsius_the_Elder|Nikolaes Heinsius the Elder]] による修正提案で、χ系・S・β系写本では qui 、B・M・L・N写本では quia となっている。</ref> ante erant per se infideles,
**彼ら自身もすでに以前から(カエサルやローマ人に)忠誠的でなかったが、
*manus cogere atque aperte bellum parare coeperunt.
**手勢を徴集して、公けに戦争を準備することを始めた。
*③ Tum [[w:la:Titus Labienus|Labienus]] tanta rerum commutatione
**そこで、[[w:ティトゥス・ラビエヌス|ラビエーヌス]]はこれほどの事態の変動により、
*longe aliud sibi capiendum consilium, atque antea senserat, intellegebat,
**自分にとって、以前に判断していたのとはまったく別の作戦が立てられるべきだ、と考えた。
**:<span style="color:#009900;">(訳注:aliud ~ atque …「…とは別の~」)</span>
*④ neque iam, ut aliquid adquireret proelioque hostes lacesseret,
**もはや、何らかのものを獲得したり、敵方に戦闘を挑むようにではなく、
**:<span style="color:#009900;">(訳注:neque ut ~, sed ut …「~ようにではなく、…ように」)</span>
*sed ut incolumem exercitum Agedincum reduceret, cogitabat.
**軍隊を無傷のままでアゲディンクム(=現[[w:サンス|サンス]])に連れ戻すように、と考えた。
**:<span style="color:#009900;">(訳注:アゲディンクムには輜重と守備隊が残されていた。[[#10節|10節]]・[[#57節|57節]]を参照。)</span>
*⑤ Namque altera ex parte Bellovaci,
**実際、一方の側からはベッロウァキ族が、
*quae civitas in Gallia maximam habet opinionem virtutis, instabant,
**ガッリアにおいて武勇に最大の評判を持つその部族が、迫りつつあった。
*alteram Camulogenus parato atque instructo exercitu tenebat:
**他方からは、カムロゲヌスが軍隊を準備し、整列させて、進んでいた。
*tum legiones a praesidio atque impedimentis interclusas
**そのとき、(ラビエーヌス麾下の)諸軍団は(アゲディンクムにいる)守備隊や輜重から遮られて、
*maximum flumen distinebat.
**とても大きな(セクアナ)川が阻んでいた。
*⑥ Tantis subito difficultatibus obiectis
**突然に、これほどの困難が投げ出されたので、
*ab animi virtute auxilium petendum videbat.
**武勇の心構えに救いを求めるべきだと(ラビエーヌスは)思った。
===60節===
'''ラビエーヌスが陽動戦術に努める'''
*① Itaque<ref>Itaque はS・β系写本の記述で、α系写本にはない。</ref> sub vesperum consilio convocato
**こうして([[w:ティトゥス・ラビエヌス|ラビエーヌス]]は)夕方に会議を召集して、
*cohortatus, ut ea, quae imperasset, diligenter industrieque administrarent,
**(彼が)命令したことを入念かつ勤勉に従事するように鼓舞した。
*naves, quas [[w:la:Melodunum|Metlosedo]]<ref>Metlosedo はコンスタン L.-A. Constans による修正で、χ系・S・β系写本では Metiosedo 、B・M写本では ameclodone 、L・N写本では a mellodone 、<i>etc</i>. となっている。</ref> deduxerat, singulas equitibus Romanis attribuit,
**[[w:ムラン|メトロセドゥム]]から引いて来ていた船団を、ローマ人騎士たち1人ずつに配分して、
*et prima confecta vigilia IIII(quattuor) milia passuum secundo flumine silentio progredi
**第一夜警時が終わる頃に、4ローママイル(6km弱)下流に静けさのうちに進発すること、
*ibique se exspectari<ref>exspectari はα系・T・ρ系写本の記述で、S・V写本では exspectare などとなっている。</ref> iubet.
**かつ、そこで自分(ラビエーヌス)を待つことを命じた。
*② Quinque cohortes, quas minime firmas ad dimicandum esse existimabat,
**(白兵戦を)闘うためにはあまり強くないと(ラビエーヌスが)考えていた5個<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>
*castris praesidio relinquit;
**陣営にとっての守備隊として残留させた。
*quinque eiusdem legionis reliquas
**同じ軍団の残りの5個(歩兵大隊)を
*de media nocte cum omnibus impedimentis adverso flumine magno tumultu proficisci imperat.
**真夜中から、すべての[[w:輜重|輜重]]とともに、上流の方に大きな喧騒でもって出発することを命令した。
*④ Conquirit etiam lintres;
**小舟さえも探し集めて、
*has magno sonitu remorum incitatas in eandem partem mittit.
**これらを大きな音とともに[[w:櫂|櫂]]を駆って、同じ方面に派遣した。
*Ipse post paulo silentio egressus cum tribus legionibus
**(ラビエーヌス)自身は、少し後で静けさのうちに3個[[w:ローマ軍団|軍団]]とともに進発して、
*eum locum petit, quo naves appelli iusserat.
**船団が停められることを命じていた地点へ行った。
===61節===
'''ラビエーヌスの陽動により、敵将カムロゲヌスが兵力を分散'''
*① Eo cum esset ventum,
**(ラビエーヌスの軍勢が)そこにやって来たときに、
*exploratores hostium, ut omni fluminis parte erant dispositi,
**敵方の偵察者たちが(セクアナ)川の至る所に分けて置かれていたが、
*inopinantes, quod magna subito erat coorta tempestas,
**突然に大きな嵐が生じたので(ローマ勢の襲撃を)予期していなかった者たちは、
*ab<ref>ab はχ系・B・M・L・N写本の記述で、S・β系写本では a となっている。</ref> nostris opprimuntur;
**我が方(ローマ勢)によって不意を襲われたのだ。
*② exercitus equitatusque equitibus Romanis administrantibus, quos ei negotio praefecerat,
**歩兵隊と騎兵隊が、(ラビエーヌスが)任務を指揮させていたローマ人騎士たちの指導により、
*celeriter transmittitur.
**速やかに(セクアナ川を)渡らせられた。
*③ Uno fere tempore sub lucem hostibus nuntiatur
**夜明け前のほぼ一時に(以下のことが)敵方に報知された。
*in castris Romanorum praeter consuetudinem tumultuari
**ローマ人の陣営において、通例に反して、騒がれていること、
*et magnum ire agmen adverso flumine
**大きな隊列が上流の方へ行軍していること、
*sonitumque remorum in eadem parte exaudiri
**(船を漕ぐ)櫂の音が同じ方面で聞き取られたこと、
*et paulo infra milites navibus transportari.
**少し下流で兵士たちが船で(セクアナ川を)渡されたこと、である。
*④ Quibus rebus auditis,
**それらの事態が聞かれて、
*quod existimabant tribus locis transire legiones atque omnes perturbatos defectione [[w:la:Haedui|Haeduorum]] fugam parare,
**(ローマ勢の)諸軍団が3か所で渡河したこと、[[w:ハエドゥイ族|ハエドゥイー族]]の背反により総勢が取り乱して逃亡を準備していること、を考えたので、
*suas quoque copias in tres partes distribuerunt.
**自分たちの軍勢をも3方面に分配した。
*⑤ Nam praesidio e regione castrorum relicto
**すなわち(一隊がローマ勢の)陣営の真向かいに守備隊として残され、
*et parva manu Metlosedum<ref>Metlosedum はQ写本の記述で、χ系・β系写本では Metiosedum 、などとなっている。</ref> versus missa,
**(別の)わずかな手勢が[[w:ムラン|メトロセドゥム]]の方面へ派遣され、
*quae tantum progrediatur<ref>progrediatur はα系写本の記述で、Q・S・β系写本では progrederetur となっている。</ref>, quantum naves processissent,
**(ローマ勢の)船団が進み出るだけ、(ガッリア兵も)前進するようにした。
*reliquas copias contra Labienum duxerunt.
**残りを軍勢をラビエーヌスに対して(カムロゲヌス自身が)率いて行った。
===62節===
'''ラビエーヌスがカムロゲヌス麾下のガッリア勢を各個撃破して、カエサルと合流'''
*① Prima luce et nostri omnes erant transportati
**夜明けに、我が方(ローマ勢)は総勢が(セクアナ川の左岸に)渡されていたし、
*et hostium acies cernebatur.
**敵方の戦列も見分けられた。
*② [[w:la:Titus Labienus|Labienus]] milites cohortatus,
**[[w:ティトゥス・ラビエヌス|ラビエーヌス]]は兵士たちを(以下のように)鼓舞した。
*ut suae pristinae virtutis et tot<ref>tot はS・β系写本の記述で、α系写本にはない。</ref> secundissimorum proeliorum retinerent memoriam<ref>retinerent memoriam はχ系・B・M・L・N写本の記述で、S・β系写本では memoriam retinerent となっている。</ref>
**自分たちのかつての武勇とこのようにとてもうまくいっている諸戦闘を記憶に留めるように、
*atque ipsum Caesarem, cuius ductu saepe numero hostes superassent, praesentem adesse existimarent,
**かつ、その指揮によって何度もしばしば敵方を打ち破って来たカエサル当人が目下居合わせていると考えるように、と。
*dat signum proelii.
**(それから)戦闘の号令を発した。
*③ Primo concursu ab dextro cornu, ubi septima legio constiterat,
**最初の激突は、[[w:第7軍団クラウディア・ピア・フィデリス|第7軍団]]が布陣していた(ローマ軍の)右翼からで、
*hostes pelluntur atque in fugam coniciuntur;
**敵方は撃退されて、逃亡に追いやられた。
*④ ab sinistro, quem locum duodecima legio tenebat,
**第12軍団が場所を占めていた左翼からは、
*cum primi ordines hostium transfixi pilis<ref>pilis はβ系写本の記述で、α系写本では telis となっている。</ref> concidissent,
**敵方の最前列(の兵たち)が投げ槍で突き通されて斃れたのだが、
*tamen acerrime reliqui resistebant
**けれども残りの者たちがとても激烈に抵抗していて、
*nec dabat suspicionem fugae quisquam.
**誰も逃亡の予兆を示さなかった。
*⑤ Ipse dux hostium Camulogenus suis aderat atque eos cohortabatur.
**敵方の将帥カムロゲヌス自身は、麾下の者たちに居合わせて、彼らを激励していた。
*⑥ At<ref>cohortabatur. At はχ系写本などの記述で、別の写本では記述が異なる。</ref> incerto nunc etiam<ref>nunc etiam はB・M・L・N写本の記述で、χ系・S・β系写本では etiamnunc となっている。</ref> exitu victoriae,
**勝敗の帰趨は今もなお不確実だったが、
*cum septimae legionis tribunis esset nuntiatum, quae in sinistro cornu gererentur,
**第7軍団の<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>たちに、左翼で<ruby><rb>出来</rb><rp>(</rp><rt>しゅったい</rt><rp>)</rp></ruby>したことが報告されたときに、
*post tergum hostium legionem ostenderunt signaque intulerunt.
**敵方の背後に(第7)軍団を差し向けて、軍旗を進めた(=進撃した)。
*⑦ Ne eo quidem tempore quisquam loco cessit,
**その時でさえ、(ガッリア勢の)誰も(戦闘の)場から退却しなかった
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*sed circumventi omnes interfectique sunt.
**けれども、総勢が包囲されて(ローマ軍により)殺戮された。
*Eandem fortunam tulit Camulogenus.
**同じ不幸をカムロゲヌスも蒙った。
*⑧ At ii<ref>ii はχ系写本の記述で、他の写本では記述が異なる。</ref>, qui praesidio contra castra Labieni erant relicti,
**これに対して、ラビエーヌスの陣営に対して守備隊として残されていた(ガッリア勢の)者たちは、
*cum proelium commissum audissent, subsidio suis ierunt collemque ceperunt,
**(両軍が)戦闘を交えているのを聞き付けたので、味方の援兵として出て行って、丘陵を占めていたが、
*neque nostrorum militum victorum impetum sustinere potuerunt.
**勝勢の我が方(ローマ軍)の兵士たちの突撃を持ちこたえることができなかった。
*⑨ Sic cum suis fugientibus permixti,
**このようにして、敗走している味方と混じり合ったときに、
*quos non silvae montesque texerunt, ab equitatu sunt interfecti.
**森林や山岳が覆い隠すことのなかったその者たちは、(ローマ側の)騎兵隊によって殺戮された。
*⑩ Hoc negotio confecto Labienus revertitur Agedincum,
**この戦役が成し遂げられると、ラビエーヌスは[[w:サンス|アゲディンクム]]に引き返した。
*ubi impedimenta totius exercitus relicta erant;
**そこには軍隊全体の[[w:輜重|輜重]]が残されていたのだ。
*inde die Ⅲ.<ref>inde die Ⅲ. は近代の校訂者による修正提案で、Q・M・S・N・β系写本では単に inde 、他の写本では別の記述になっている。</ref> cum omnibus copiis ad Caesarem pervenit.
**そこから3日目(=2日後)にすべての軍勢とともにカエサルのところへ到着した。
==ガッリア戦乱の拡大==
===63節===
'''ハエドゥイー族がウェルキンゲトリークスに主導権争いを挑む'''
*① Defectione [[w:la:Haedui|Haeduorum]] cognita bellum augetur.
**[[w:ハエドゥイ族|ハエドゥイー族]]の背反が知られて、戦乱は拡大された。
*② Legationes in omnes partes circummittuntur;
**(ハエドゥイー族らにより)使節たちがあらゆる方面に遣わされまくり、
*quantum gratia, auctoritate, pecunia valent, ad sollicitandas civitates nituntur;
**信望、勢力や金銭によってできる限り、諸部族をそそのかすことに努めた。
**:<span style="color:#009900;">(訳注:quantum ~ valere「~によってできる限り」)</span>
*③ nacti obsides, quos Caesar apud eos deposuerat,
**カエサルが彼ら(ハエドゥイー族)のもとに預けて置いた人質たちを手に入れて、
*horum supplicio dubitantes territant.
**彼ら(人質たち)の処刑(を示唆すること)によって、決心がつかぬ者たちを恐れさせた。
*④ Petunt a [[w:la:Vercingetorix|Vercingetorige]] Haedui, ut ad se veniat rationesque belli gerendi communicet;
**ハエドゥイー族は、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]に、自分たちのところへ来て戦争遂行の戦略を協議するように要求した。
*re impetrata contendunt, ut ipsis summa imperii tradatur.
**その事が成し遂げられると、(ハエドゥイー族)自身に最高司令権が委ねられるように頑張った。
*Et re<ref>et re は近代の校訂者による修正提案で、β系写本では re 、α系写本では et rem となっている。</ref> in controversiam deducta totius Galliae concilium [[w:la:Bibracte|Bibracte]] indicitur.
**その事が論争の状態に置かれて、[[w:ビブラクテ|ビブラクテ]]でのガッリア全体の会合が公示された。
*Eodem conveniunt<ref>Eodem conveniunt はα系写本の記述で、β系写本では単に conveniunt 、etc.となっている。</ref> undique frequentes.
**同じところに至る所からたくさんの者たちが集まって来た。
*⑥ Multitudinis suffragiis res permittitur;
**(最高司令権の)事は衆人の票決に任せられて、
*ad unum omnes Vercingetorigem probant imperatorem.
**衆議一決により、ウェルキンゲトリークスを将軍(最高司令官)として承認した。
**:<span style="color:#009900;">(訳注:ad unum omnes「最後の一人に至るまですべて」)</span>
*⑦ Ab hoc concilio Remi, Lingones, Treveri afuerunt,
**この会合へは、[[w:レミ族|レーミー族]]、リンゴネス族、トレウェリ族が不在であった。
*illi quod amicitiam Romanorum sequebantur,
**前者(レーミー族とリンゴネス族)は、ローマ人との友好を遵守したので(不在であった)。
*Treveri quod aberant longius et ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> [[w:la:Germani|Germanis]] premebantur,
**トレウェリ族は、はるか遠くに離れており、[[w:ゲルマニア|ゲルマニア]]人により圧迫されていた。
*quae fuit causa quare toto abessent bello
**それが、何ゆえに(ウェルキンゲトリークスによる)戦争全体に関与しなかったかの理由であり、
*et neutris auxilia mitterent.
**(ウェルキンゲトリークスとカエサルの)どちら側にも援軍を派遣しなかった。
*⑧ Magno dolore Haedui ferunt se deiectos principatu,
**ハエドゥイー族は、自分たちが盟主の座から遠ざけられて、とても憤懣やるかたなかったし、
*queruntur fortunae commutationem
**境遇の変わりようを嘆いて、
*et Caesaris indulgentiam in se<ref>indulgentiam in se はα系写本の記述で、β系写本では in se indulgentiam となっている。</ref> requirunt
**カエサルの自分たちへの寛大さを惜しんだ。
*neque tamen suscepto bello suum consilium ab reliquis separare audent.
**けれども戦争を引き受けてしまったので、あえて自分たちの作戦計画をほか(の諸部族)と異にしなかった。
*⑨ Inviti summae spei adulescentes Eporedorix et Viridomarus Vercingetorigi parent.
**たいへんな野心を持つ青年たち[[w:エポレドリクス|エポレドリクス]]と[[w:ウィリドマルス|ウィリドマルス]]は、意に反してウェルキンゲトリークスに服従した。
===64節===
'''ウェルキンゲトリークスがガッリア諸部族の誘降・服従を謀る'''
*① Ipse<ref>ipse はα系写本の記述で、β系写本では ille となっている。</ref> imperat reliquis civitatibus obsides denique ei rei constituit diem;
**(ウェルキンゲトリークス)自身は、ほかの諸部族に人質(の供出)を命令して、のみならずその事の期日を決めた。
*huc omnes equites, [[wikt:la:quindecim|XV(quindecim)]] milia numero, celeriter convenire iubet.
**そこに、1万5000名の数のすべての[[w:騎兵|騎兵]]に、速やかに集結することを命じた。
*② Peditatu quem antea habuerit se fore contentum dicit
**(歩兵については)自分は、以前から持っていた[[w:歩兵|歩兵隊]]で満足するであろうと言った。
*neque fortunam temptaturum aut in acie<ref>in acie はα系写本の記述で、β系写本では単に acie となっている。</ref> dimicaturum,
**(歩兵で)武運を試すことはしないであろうし、あるいは野戦で(白兵戦を)闘うこともないであろう、と。
*sed quoniam abundet equitatu,
**しかし、騎兵隊は豊富であるから、
*perfacile esse factu frumentationibus pabulationibusque Romanos prohibere;
**ローマ人たちの糧食・糧秣徴発を妨げることは、とても容易である、と。
*③ aequo modo animo sua ipsi frumenta corrumpant aedificiaque incendant,
**ただ平静な心で、自分たちの穀物を自身で傷めて、(穀物の)建屋を焼打ちするように。
*qua rei familiaris iactura perpetuum imperium libertatemque se consequi videant.
**資産の犠牲により、永久の領有権と自由を自分たちが獲得することを思え、と。
*④ His constitutis rebus
**これらの事が決定されると、
*[[w:la:Haedui|Haeduis]] Segusiavisque, qui sunt finitimi provinciae, decem milia peditum imperat;
**[[w:ハエドゥイ族|ハエドゥイー族]]および(ローマ人の)属州に隣接するセグスィアウィ族には1万の歩兵(の供出)を命令していたが、
*huc addit equites [[wikt:la:octingenti|octingentos]].
**この中に、800騎の騎兵たち(の供出)を付け加えた。
*⑤ His praeficit fratrem Eporedorigis bellumque inferri<ref>inferri はα系写本の記述で、β系写本では inferre となっている。</ref> Allobrogibus iubet.
**彼らをエポレドリクスの兄弟に指揮させて、アッロブロゲス族に戦争をしかけることを命じた。
*⑥ Altera ex parte Gabalos proximosque <u>[[wikt:en:pagus#Latin|pagos]]</u> Arvernorum in Helvios,
**別の方面から、ガバリ族および近隣のアルウェルニー族の諸<u>郷</u>に、ヘルウィイ族のところに(攻め入るように)、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''pagus'' (郷) はここでは、部族の領土の農村区画を指す行政用語<ref name="pagus">''[[w:en:Pagus]]'' 等を参照。</ref>。)</span>
*item Rutenos Cadurcosque ad fines Volcarum Arecomicorum depopulandos mittit.
**同様に、ルテーニー族およびカドゥルキー族に、ウォルカエ・アレコミキ族の領土を荒らしまわるべく派遣した。
*⑦ Nihilo minus clandestinis nuntiis legationibusque Allobrogas<ref>Allobrogas はα系写本の記述で、β系写本では Allobroges となっている。</ref> sollicitat,
**それにもかかわらず、隠密に伝令たちや使節たちにより、アッロブロゲス族を(蜂起を)そそのかした。
*quorum mentes nondum ab<ref>ab はβ系写本の記述で、α系写本では ab となっている。</ref> superiore bello resedisse sperabat.
**彼ら(アッロブロゲス族)の心がかつての戦争からまだ静まっていないことを期待したのだ。
**:<span style="color:#009900;">(訳注:アッロブロゲス族は、BC61年にローマに反旗を翻し、翌BC60年に鎮圧されていた。[[ガリア戦記 第1巻#6節|第1巻6節]]を参照。)</span>
*⑧ Horum principibus pecunias,
**彼らの領袖たちに金銭を(約束し)、
*civitati autem imperium totius provinciae pollicetur.
**さらに部族には(カエサル統治下の)属州全体の支配権をも約束したのだ。
===65節===
'''カエサルと同盟諸部族の防戦。ゲルマニア騎兵を呼び寄せる'''
*① Ad hos omnes casus provisa erant praesidia cohortium duarum et viginti,
**これらすべての出来事に対して、(カエサルは)22個<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>からなる守備隊を用意していた。
*quae ex ipsa coacta<ref>coacta はχ系・β系写本の記述で、φ系写本にはない。</ref> provincia ab L.(Lucio) Caesare legato
**それらは、<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>ルキウス・カエサルによって属州全体から徴集されたもので、
**:<span style="color:#009900;">(訳注:ここでいう属州とは、[[w:ガリア・ナルボネンシス|ガッリア・トラーンサルピーナ]]を指すと思われる。</span>
**:<span style="color:#009900;">ルキウス・ユリウス・カエサル4世 [[w:en:Lucius Julius Caesar IV|Lucius Julius Caesar IV]] は本書の著者カエサルと4代前の高祖父を共有する元執政官。[[w:en:Julii Caesares|Julii Caesares]] を参照。)</span>
*ad omnes partes opponebantur.
**あらゆる方面に対して配置された。
*② Helvii sua sponte cum finitimis proelio congressi pelluntur
**[[w:ヘルウィイ族|ヘルウィイ族]]は、自分たちの意思により、近隣(の諸部族)と戦闘で争って撃退され、
**:<span style="color:#009900;">(訳注:この部族については[[#7節|7節]]~8節を参照。)</span>
*et C.(Gaio) Valerio Domnotauro<ref>Domnotauro はS・L・N写本の記述で、A・B・N写本では Donnotauro 、χ系・π系写本では Donotauro となっており、ρ系写本には記述がない。</ref>, Caburi filio, principe civitatis,
**カブルスの息子で、部族の領袖であるガイウス・ウァレリウス・ドムノタウルス
**:<span style="color:#009900;">(訳注:彼は、ローマとの友好により、ローマ人風の名前を与えられていたのであろう。)</span>
*compluribusque aliis interfectis intra oppida ac muros<ref>ac muros はα系写本の記述で、β系写本では murosque となっている。</ref> compelluntur.
**および他のかなりの者たちが殺戮されて、<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>と城壁の内側に追い込まれた。
*③ Allobroges crebris ad [[w:la:Rhodanus|Rhodanum]] dispositis praesidiis
**[[w:アッロブロゲス族|アッロブロゲス族]]は、ロダヌス(=現[[w:ローヌ川|ローヌ川]])のところへ密に守備隊を分け置いて、
*magna cum cura et diligentia suos fines tuentur.
**たいへんな注意と入念さにより、自分たちの領土を守った。
*④ Caesar quod hostes equitatu superiores esse intellegebat
**カエサルは、敵方が[[w:騎兵|騎兵隊]]で(自軍より)優っていると認識していたので、
*et interclusis omnibus itineribus nulla re ex provincia atque Italia sublevari poterat,
**かつ、すべての道が遮られて、属州やイタリアから何ら支援されることができなかったので、
**:<span style="color:#009900;">(訳注:属州 provincia とはガッリア・トラーンサルピーナ、イタリア Italia とは[[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]のことであろう。)</span>
*trans [[w:la:Rhenus|Rhenum]] in [[wikt:la:Germania|Germaniam]] mittit ad eas civitates, quas superioribus annis pacaverat,
**レヌス(=現[[w:ライン川|ライン川]])の向こう側の[[w:ゲルマニア|ゲルマニア]]に、先年に平定していた諸部族のところへ(使節を)遣わした。
**:<span style="color:#009900;">(訳注:ゲルマニア遠征や平定については、[[ガリア戦記 第4巻#16節|第4巻16節]]~19節、[[ガリア戦記 第6巻#9節|第6巻9節]]~10節を参照。)</span>
*equitesque ab his arcessit et levis armaturae pedites,
**彼らから、騎兵たち、および[[w:ウェリテス|軽い武装の歩兵]]たちを呼び寄せた。
*qui inter eos proeliari consuerant.
**その者ら(軽装歩兵)は、彼ら(騎兵)の間で戦闘することが常であったのだ。
*⑤ Eorum adventu, quod minus idoneis equis utebantur,
**彼ら(ゲルマニア騎兵)が到着すると、(戦闘に)あまり適していない馬を使役していたので、
**:<span style="color:#009900;">(訳注:ゲルマニア人の馬の使用については、[[ガリア戦記 第4巻#2節|第4巻2節]]を参照。)</span>
*a tribunis militum reliquisque equitibus Romanis atque evocatis equos sumit
**<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>たちやほかのローマ人騎士たちや<ruby><rb>再徴集兵</rb><rp>(</rp><rt>エウォカティ</rt><rp>)</rp></ruby>たちから、馬匹を取り上げて、
*[[w:la:Germani|Germanis]]que distribuit.
**ゲルマニア人たちに分配した。
===66節===
'''属州へと南下するカエサル、迎え撃とうとするウェルキンゲトリークス'''
*① Interea dum haec geruntur,
**その間に、これらが出来している間に、
*hostium copiae ex Arvernis
**敵方の(歩兵の)軍勢が(滞陣していたゲルゴウィアの)[[w:アルウェルニ族|アルウェルニー族]]のところから、
*equitesque qui toti Galliae erant imperati conveniunt.
**および全ガッリアの命令されていた[[w:騎兵|騎兵]]たちが、(ウェルキンゲトリークスのところに)集結して来た。
*② Magno horum coacto numero,
**これらの(ガッリア兵の)多数が徴集されて、
*cum Caesar in Sequanos per extremos Lingonum fines iter faceret,
**カエサルが、[[w:セクアニ族|セクアニ族]]のところに(向かって)[[w:リンゴネス族|リンゴネス族]]の領土の外縁を通って行軍していたときに、
**:<span style="color:#009900;">(訳注:属州へは、リンゴネス族と後述のマンドゥビイ族の間を通ってセクアニ族領を通らねばならなかった。)</span>
*quo facilius subsidium provinciae ferri<ref>ferri はα系写本の記述で、β系写本では ferre となっている。</ref> posset,
**(それは)属州(ガッリア・トラーンサルピーナ)に援兵をより容易にもたらせるようにするためであったが、
*circiter milia passuum X(decem) ab Romanis trinis castris [[w:la:Vercingetorix|Vercingetorix]] consedit
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、ローマ人たちから約10ローママイル(15km)のところに、3つの陣営にて陣取った。
*③ convocatisque ad concilium praefectis equitum
**(ウェルキンゲトリークスは)騎兵の指揮官たちを会合へ召集して、
*venisse tempus victoriae demonstrat;
**勝利の時が来たと、明言した。
*fugere in provinciam Romanos Galliaque excedere.
**ローマ人たちは属州に逃亡して、ガッリアから立ち退きつつある、と。
*④ Id sibi ad praesentem obtinendam libertatem satis esse;
**それは、自分たちにとって目下のところ、自由を維持するためには十分であるが、
*ad reliqui temporis pacem atque otium parum profici;
**将来の平和と平穏は不充分にしか得られない。
*maioribus enim coactis copiis reversuros
**なぜなら(ローマ人たちは)より大きな軍勢を徴集して(ガッリアに)戻って来るであろうし、
*neque finem bellandi facturos.
**戦争することに結末をつけることはないであろう。
*Proinde agmine impeditos adorirentur<ref>adorirentur はA・β系写本の記述で、M・L・N写本では adoriantur 、S写本では adorantur 、Q・B・M写本ではadorientur となっている。</ref>.
**それゆえに、(ローマ勢の)行軍によって重荷となっている(輜重隊の)者たちを襲撃するのだ。
*⑤ Si pedites suis auxilium ferant atque in eo morentur, iter facere<ref>facere はα系写本の記述で、β系写本では confici となっている。</ref> non posse;
**もし(ローマ勢の)歩兵たちが味方を支援し、そのことで滞留するならば、(属州へ)行軍することはできない。
*si ─id quod magis futurum confidat─
**もし、─(我は)むしろそうなるであろうと期待することであるが─
*relictis impedimentis suae saluti consulant,
**(ローマ歩兵たちが)[[w:輜重|輜重]]を残して、自分たちの身の安全に意を用いるならば、
*et usu rerum necessariarum et dignitate spoliatum iri.
**必需品の使用や(ローマ人としての)品格をはぎ取られることになる。
*⑥ Nam de equitibus hostium,
**なぜなら、敵方の騎兵については
**<span style="color:#009900;">:(訳注:著者カエサルはここでは、間接話法でありながら、ローマ勢について hostium「敵方の」と表現している。)</span>
*quin nemo eorum progredi modo extra agmen audeat,
**彼ら(ローマ騎兵)のうち誰も、<ruby><rb>行軍縦隊</rb><rp>(</rp><rt>アグメン</rt><rp>)</rp></ruby>の外にすら、あえて進み出ようとしないこと、
*et ipsos quidem non<ref>et ipsos quidem non はα系写本の記述で、β系写本では ne ipsos quidem となっている。</ref> debere dubitare.
**(そのことを、諸君ら)自身は決して疑念を持つことなかれ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*Id quo maiore faciant animo,
**それ(=輜重隊への襲撃)を、より大胆な心構えで実行してもらうために、
*copias se omnes pro castris habiturum et terrori hostibus futurum.
**自分(ウェルキンゲトリークス)が軍勢すべてを陣営の前に保持しておくであろうし、敵方の心胆を寒からしめるであろう。
*⑦ Conclamant equites
**(ガッリア勢の)騎兵たちは(以下のように)叫んだ。
*sanctissimo iure iurando confirmari oportere,
**最も神聖な誓約によって確証されなければならぬ。
*ne tecto recipiatur, ne ad liberos, ne ad parentes, ad<ref>ne ad …, ne ad …, ad が写本(ω)の記述であるが、モイゼル Meusel は ne ad …, ad …, ad と修正提案をしている。</ref> uxorem aditum habeat,
**(以下の者は)家に迎え入れられたり、子供たちや親たちや妻女たちのところへ近づくことがないように。
*qui non bis per agmen hostium perequitasset<ref>perequitasset はα系写本の記述で、β系写本では perequitarit となっている。</ref>.
**敵方(ローマ勢)の隊列を越えて(往復の)2度、騎馬で駆け抜けることがなかった者は。
**:<span style="color:#009900;">(訳注:敵中突破と生還を成し遂げなかった騎兵は、復員してはならない、と誓約したのである。)</span>
===67節===
'''カエサル麾下のゲルマニア騎兵がウェルキンゲトリークスを一蹴'''
*① Probata re atque omnibus iure iurando adactis
**これが賛同されて、(ガッリア騎兵の)皆が誓約させられて、
*postero die in tres partes distributo equitatu
**翌日に、[[w:騎兵|騎兵隊]]を3つの分隊に分配した。
*duae se acies ab duobus lateribus ostendunt,
**2隊は(ローマ勢の左右)2つの側面から<ruby><rb>戦闘隊形</rb><rp>(</rp><rt>アキエス</rt><rp>)</rp></ruby>として現われた。
*una a<ref>a はβ系写本の記述で、α系写本にはない。</ref> primo agmine iter impedire coepit.
**1隊は(ローマ勢の)前衛から行軍を妨げ始めた。
*② Qua re nuntiata
**その事が報告されて、
*Caesar suum quoque equitatum tripertito divisum contra hostem ire iubet.
**カエサルは麾下の騎兵隊おのおのを3つに配分して、敵に対して向かって行くことを命じた。
*Pugnatur una omnibus in partibus.
**(騎兵戦が)同時にすべての方面で戦われた。
*③ Consistit agmen;
**(ローマ勢の)<ruby><rb>行軍縦隊</rb><rp>(</rp><rt>アグメン</rt><rp>)</rp></ruby>は一歩も引かなかった。
*impedimenta intra legiones recipiuntur.
**[[w:輜重|輜重]]は諸[[w:ローマ軍団|軍団]]の内側に後退した。
*④ Si qua in parte nostri laborare aut gravius premi videbantur,
**もし、我が方(ローマ勢)のある部隊が苦戦したり、またはひどく押されぎみだと思われたならば、
*eo signa inferri Caesar aciemque constitui<ref>constitui はα系写本の記述で、β系写本では converti 、T写本では conferri となっている。</ref> iubebat;
**カエサルはそこに進撃して戦列を組織することを命じた。
**:<span style="color:#009900;">(訳注:signa inferre「軍旗を進める、進撃する」)</span>
*quae res et hostes ad insequendum tardabat et nostros spe auxilii confirmabat.
**その事が、敵方が追撃して来るのを遅らせもしたし、我が方が支援の希望により元気付けられもした。
*⑤ Tandem Germani ab dextro latere summum iugum nacti hostes loco depellunt,
**ついに、ゲルマニア人(騎兵)たちが右の側面から尾根の頂きを掌握して、敵方をその場から追いやった。
*fugientes usque ad flumen,
**逃亡する(ガッリア騎兵の)者たちを川の辺りまで(追って)、
*ubi [[w:la:Vercingetorix|Vercingetorix]] cum pedestribus copiis consederat,
**そこには[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]が[[w:歩兵|歩兵]]の軍勢とともに陣取っていたのだが、
*persecuntur<ref>persecuntur はα系写本の記述で、β系写本では persequuntur となっている。</ref> compluresque interficiunt.
**(ゲルマニア騎兵が敵を川辺まで)追撃して、かなりの者たちを殺戮した。
*⑥ Qua re animadversa
**その事が(敵方に)気付かれて、
*reliqui ne circumirentur<ref>circumirentur はA・φ系写本の記述で、Q・β系写本では circumvenirentur となっている。</ref> veriti se fugae mandant.
**(ガッリア勢の)残りの者たちは、包囲されないようにと怖れて、逃亡に身を任せた。
*Omnibus locis fit caedes.
**(こうしてローマ方により)あらゆる場所で虐殺が行なわれた。
*⑦ Tres nobilissimi [[w:la:Haedui|Haedui]] capti ad Caesarem perducuntur:
**[[w:ハエドゥイ族|ハエドゥイー族]]の3人の高位の貴族が捕らえられて、カエサルのところへ連行されて来た。
*Cotus, praefectus equitum, qui controversiam cum Convictolitavi proximis comitiis habuerat,
**コトゥスは騎兵指揮官で、最近の会議でコンウィクトリタウィスと(統領の座をめぐって)係争した。
**:<span style="color:#009900;">(訳注:[[#32節|32節]]~33節を参照。)</span>
*et Cavarillus, qui post defectionem Litavicci pedestribus copiis praefuerat,
**カウァリッルスは、リタウィックスの背反の後に、歩兵の軍勢を指揮していた。
*et Eporedorix, quo duce ante adventum Caesaris Haedui cum Sequanis bello contenderant.
**エポレドリクスは、カエサルの到来以前にハエドゥイー族の将帥としてセクアニ族と戦争を闘っていた。
**:<span style="color:#009900;">(訳注:この人物は、ウィリドマルスとともにカエサルを裏切ったエポレドリクスとは同名異人である。)</span>
==アレスィア攻囲戦==
===68節===
[[画像:Alésia.jpg|thumb|right|300px|[[w:アレシアの戦い|アレスィア古戦場]]であるとほぼ確実視されている仏アリーズ=サント=レーヌ村([[w:fr:Alise-Sainte-Reine|Alise-Sainte-Reine]])近郊のオソワ山(Mont Auxois)という丘陵の西端にある[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]像(<small>[[w:fr:Vercingétorix_(statue d'Aimé Millet)|Statue de Vercingétorix]]</small>)。<small>[http://maps.google.co.jp/?ie=UTF8&ll=47.538579,4.490544&spn=0.001172,0.002401&t=h&z=19&brcurrent=3,0x0:0x0,1 Googleマップ]</small>の航空写真にもこの巨像が写っている。<br>当地はフランス東部[[w:ブルゴーニュ地域圏|ブルゴーニュ地方]][[w:コート=ドール県|コート=ドール県]](<small>[[w:fr:Côte-d'Or|Côte-d'Or]]</small>)のオソワ地域(<small>[[w:fr:Auxois (région)|L'Auxois]]</small>)にあり、県都[[w:ディジョン|ディジョン]]市街から西北西へ約4.5kmの地点に位置する。ディジョン方面から県道905号(D905)を北西に進んで行くと、ヴナレ=レ=ローム(<small>[[w:fr:Venarey-les-Laumes|Venarey-les-Laumes]]</small>)から東の郊外にかけて古戦場跡が広がる。<br>オソワ(Auxois)という地域名・山名は、ラテン語の Alesiensis pagus「アレスィア郷」が転訛し、アリーズ(Alise)の名もアレスィア(Alesia)に由来すると考えられている。サント=レーヌ([[w:fr:Sainte Reine|Sainte Reine]] 聖レグニア)とはこの地でAD252年に殉教したキリスト教徒ガッリア人女性で、カトリック教会から聖人に列せられている。]]
'''ウェルキンゲトリークスがアレスィア入城、カエサルは攻囲を決断'''
*① Fugato omni equitatu
**すべての[[w:騎兵|騎兵隊]]が逃げてしまったので、
*[[w:la:Vercingetorix|Vercingetorix]] copias suas<ref>suas はβ系写本の記述で、α系写本にはない。</ref>, ut pro castris conlocaverat, reduxit
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、陣営の前に配置するようにしていた麾下の(歩兵の)軍勢を呼び戻して、
*protinusque [[w:la:Alesia|Alesiam]], quod est oppidum Mandubiorum, iter facere coepit
**すぐに、マンドゥビイ族の<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>である[[w:アレシア|アレスィア]]へ行軍し始めた。
*celeriterque impedimenta ex castris educi et se subsequi iussit.
**かつ、速やかに陣営から[[w:輜重|輜重]]を進発させること、および自分に追随すること、を命じた。
*② Caesar impedimentis in proximum collem deductis,
**カエサルは、輜重を近隣の丘陵に移させて、
*duabus legionibus praesidio relictis,
**2個[[w:ローマ軍団|軍団]]を(輜重の)守備隊として(その丘陵に)残留させた。
*secutus quantum diei tempus est passum,
**日中の時間が許される限り(ガッリア勢を)追跡して、
*circiter tribus milibus hostium ex novissimo agmine interfectis
**敵方の後衛のうちから約3000人を殺戮して、
*altero die ad Alesiam castra fecit.
**翌日には、アレスィアの辺りに陣営を張った。
*③ Perspecto urbis situ
**(アレスィアの)都市の地勢を吟味して、
*perterritisque hostibus, quod equitatu, qua maxime parte exercitus confidebant, erant pulsi,
**敵方は、部隊の大部分において頼りにしていた騎兵隊が撃退されていたので、怖れおののいていたから、
*adhortatus ad laborem milites circumvallare instituit.
**(カエサルは)兵士たちを労役に駆り立てて、(敵陣を)[[w:堡塁|堡塁]]で囲むことを決断した。
===69節===
[[画像:Alise2.jpg|thumb|right|300px|[[w:アレシア|アレスィア]]にあったローマ時代の[[w:フォルム|フォルム]](広場)や[[w:バシリカ|バシリカ]](教会堂)などと思われる遺跡([http://maps.google.co.jp/?ie=UTF8&t=h&brcurrent=3,0x0:0x0,1&ll=47.539477,4.5008&spn=0.002343,0.004801&z=18 Googleマップ]の航空写真を参照)。現在、オソワ山(Mont Auxois)と呼ばれているこの丘陵は、頂きが平坦な台地状になっており、その中央のさらに高い所に[[w:オッピドゥム|オッピドゥム]](城塞都市)があったと思われる。<br>上の画像からは、同等の高さの丘陵が周囲を取り巻いていることが見て取れる。<br>『ガリア戦記』に書かれたアレスィアの所在地については諸説があって永らく不明であったが、ゲルゴウィアと同様に19世紀のウジェーヌ・ストッフェル大佐(colonel Eugène Stoffel)の発掘調査によってローマ軍の遺構などが発見され、地勢もカエサルの記述にかなり合っていると見なされて、オソワ山とその中腹にあるアリーズ=サント=レーヌが有力視されることになった。]]
'''アレスィアの地勢、ローマ軍の攻囲線'''
*① Ipsum erat oppidum [[w:la:Alesia|Alesia]] in colle summo admodum edito loco,
**[[w:アレシア|アレスィア]]の<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>そのものは、丘陵の頂きにおいて、ひときわ高い地点にあって、
*ut nisi obsidione expugnari non posse videretur.
**攻囲(包囲)以外には攻略されることができないと思われた。
*② Cuius collis radices duo duabus ex partibus flumina subluebant.
**その丘陵のふもとを2つの方面から、2つの川が流れていた。
*③ Ante id<ref>id はα系写本の記述で、β系写本にはない。</ref> oppidum planities circiter milia passuum Ⅲ(tria) in longitudinem patebat;
**その城塞都市の前に、約3ローママイル(4.5km)の間隔で、平地が広がっていた。
*④ reliquis ex omnibus partibus colles mediocri interiecto spatio
**ほかのすべての方面からは(いくつかの)丘陵が適度な空間を置いており、
*pari altitudinis fastigio oppidum cingebant.
**同等の高さの頂上で(アレスィアの)城塞都市を取り巻いていた。
*⑤ Sub muro, quae pars collis ad orientem solem spectabat,
**(アレスィアの)丘陵の日が昇る方(=東方)へ面していた部分の城壁の下には、
*hunc omnem locum copiae Gallorum compleverant
**このすべての場所を、ガッリア人たちの軍勢が満たしていて、
*fossamque et maceriam sex in altitudinem pedum praeduxerant.
**堀、および高さ6[[w:ペース (長さ)|ペース]](約1.8m)の防壁を前に引いていた。
**:<span style="color:#009900;">(訳注:[[wikt:en:maceria|maceria]] は、軍事用語としては、立てこもるための城壁<ref><i>muraille (pour se retrancher)</i>(ラルース社の羅仏辞典 <small>“Dictionnaire MaxiPoche Plus latin-français et français-latin”</small> を参照)</ref>を指す。)</span>
*⑥ Eius munitionis quae ab Romanis instituebatur circuitus XI<ref>XI はα系写本の記述で、β系写本では X となっている。</ref> milia passuum tenebat.
**ローマ人たちによって建てられようとしていた塁壁の周囲は、11ローママイル(約16km)を占めていた。
**:<span style="color:#009900;">(訳注:α系写本では 11マイル=約16km、β系写本では 10マイル=約15km となっている。)</span>
*⑦ Castra opportunis locis erant posita
**(ローマ勢の)陣営は(戦略上)都合良い地点に設置されていて、
**:<span style="color:#009900;">(訳注:歩兵・騎兵の陣営が計8か所に置かれていたようである。)</span>
*ibique<ref>ibique はα系写本の記述で、β系写本では itemque となっている。</ref> castella XXIII(viginti tria) facta,
**同じく23基の砦が造られた。
*quibus in castellis interdiu stationes ponebantur,
**それらの砦には、昼間は、歩哨たちが置かれて、
*ne qua subito eruptio fieret;
**不意に何らかの突撃がなされないようにした。
*haec eadem noctu excubitoribus ac firmis praesidiis tenebantur.
**この同じところが、夜間は、寝ずの番兵および強力な守備隊により固守された。
===70節===
'''カエサル麾下のゲルマニア騎兵が、再びガッリア騎兵を虐殺'''
*① Opere instituto
**(ローマ人により)[[w:堡塁|堡塁]]が建てられだして、
*fit equestre proelium in ea planitie,
**かの平地において[[w:騎兵|騎兵]]戦がなされた。
*quam intermissam collibus tria milia passuum in longitudinem patere supra demonstravimus.
**それ(平地)は(周囲の)丘陵から3ローママイル(約4.5km)の間隔を空けて広がっていることを、[[#69節|前]]に述べた。
*Summa vi ab utrisque contenditur.
**(騎兵戦は)双方の主力によって闘われた。
*② Laborantibus nostris Caesar Germanos submittit
**苦戦している我が方(ローマ騎兵)に対して、カエサルは[[w:ゲルマニア|ゲルマニア]]人(騎兵)を援けに派遣した。
*legionesque pro castris constituit, ne qua subito inruptio ab hostium peditatu fiat.
**諸[[w:ローマ軍団|軍団]]を陣営の前に駐留させて、不意に何らかの突入が敵方の[[w:歩兵|歩兵隊]]によってなされないようにした。
*③ Praesidio legionum addito nostris animus augetur;
**軍団の守備が加わって、我が方(ローマ勢の)勇気が増された。
*hostes in fugam coniecti se ipsi multitudine impediunt
**敵方(の騎兵)は敗走に追いやられて、彼ら自身が自分たち(の敗走)を大勢であることにより妨げた。
*atque angustioribus portis relictis coacervantur<ref>coacervantur は近世の写本(ς)の記述で、α系写本では coacervati tum 、β系写本では coartantur となっている。</ref>.
**さらに(ガッリア陣地の)諸門がとても狭いままにしておかれたので(騎兵たちが)積み重ねられた。
*④ Germani acrius usque ad munitiones sequuntur.
**ゲルマニア人(騎兵)たちは(ガッリア騎兵たちを)苛烈に、防塁のところまで追撃した。
*⑤ Fit magna caedes.
**(こうして)大虐殺が起こった。
*Nonnulli relictis equis fossam transire et maceriam transcendere conantur.
**(ガッリア騎兵の)幾人かは、馬を置き去りにして、堀を越えること、および防壁を登り越えることを試みた。
*Paulum legiones Caesar quas pro vallo constituerat promoveri iubet.
**カエサルは、防柵の前に駐留させていた諸軍団に、いくらか前進することを命じた。
*⑥ Non minus qui intra munitiones erant perturbantur Galli:
**防塁の内側にいたガッリア人たちも(騎兵たちに)劣らず狼狽した。
*veniri ad se confestim existimantes ad arma conclamant;
**(ローマ勢により)自分たちのところへ直ちにやって来られると考えた者たちは、防具を取れと叫んだ。
*nonnulli perterriti in oppidum inrumpunt.
**(ガッリア勢の)幾人かは、怖れおののいて(丘陵の頂きにある)城塞都市の中に押し入った。
*⑦ [[w:la:Vercingetorix|Vercingetorix]] iubet portas claudi, ne castra nudentur.
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、陣営が無防備にされないように、(防塁の)諸門が閉じられることを命じた。
*Multis interfectis, compluribus equis captis Germani sese recipiunt.
**(ガッリア騎兵の)多くが殺戮され、おびただしい馬が捕獲されて、ゲルマニア人(騎兵)たちは退却した。
===71節===
[[画像:Statue_Vercingetorix_st_germain_en_laye.JPG|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の立像(<small>パリ郊外の[[w:サン=ジェルマン=アン=レー|サン=ジェルマン=アン=レー]] [[w:fr:Saint-Germain-en-Laye|Saint-Germain-en-Laye]]</small>)。[[w:アレシアの戦い|アレスィア古戦場]](<small>現在のアリーズ=サント=レーヌ</small>)にある巨大な銅像と同様に彫刻家エメ・ミレ([[w:fr:Aimé Millet|Aimé Millet]])によって建立された。]]
[[画像:Napoleon3.PNG|thumb|right|250px|ウジェーヌ・ストッフェル大佐(colonel Eugène Stoffel)をして[[w:アレシア|アレスィア]]およびゲルゴウィアの発掘調査をさせた立役者・皇帝[[w:ナポレオン3世|ナポレオン3世]]の肖像。[[w:ガリア起源説|ガッリア起源説]]により、王政に反感を持つフランスの共和派や庶民は、旧[[w:ブルボン家|ブルボン王朝]]を[[w:クロヴィス1世|クロヴィス]]や[[w:ユーグ・カペー|カペー]]にさかのぼるゲルマン系の[[w:フランク人|フランク人]]と見なし、自分たちのルーツを[[w:ケルト人|ケルト系]]の古代[[w:ガリア人|ガッリア人]]に求めた。ナポレオン3世はこのような国民の意識を利用して、[[w:ナショナリズム|ナショナリズム]]の高揚および帝政の基盤強化を図ったのである。]]
'''ウェルキンゲトリークスが援兵召集のため騎兵を放ち、籠城策を定める'''
*① [[w:la:Vercingetorix|Vercingetorix]], priusquam munitiones ab Romanis perficiantur,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、ローマ人たちによって塁壁が完成されるより前に、
*consilium capit omnem ab se equitatum noctu dimittere.
**自分のところから[[w:騎兵|騎兵隊]]のすべてを夜間に送り出すことを計画した。
*② Discedentibus mandat
**(アレスィアから)退去する(騎兵の)者たちに(以下のように)指図した。
*ut suam quisque eorum civitatem adeat
**彼ら(騎兵)のおのおのが自らの部族に行くように、
*omnesque qui per aetatem arma ferre possint ad bellum cogant.
**かつ、年齢により武器を手に取ることができる者たちの皆を戦争へ徴集するように、と。
*③ Sua in illos merita proponit obtestaturque
**(ウェルキンゲトリークスは)彼ら(ガッリア人たち)における自分の功績に言及して(以下のように)懇願した。
*ut suae salutis rationem habeant
**自分の身の安全を顧慮してくれるように、
*neu se optime de communi libertate meritum in cruciatum hostibus<ref>in cruciatum hostibus はβ系写本の記述で、α系写本では hostibus in cruciatum となっている。</ref> dedant.
**かつ(ガッリア)共通の自由について功績が最上である自分を、敵方の責め苦に渡すことがないように、と。
*Quod si indiligentiores fuerint,
**ところが、もし(騎兵たちがウェルキンゲトリークスたちの安全に)無関心であったならば、
*milia hominum delecta octoginta una secum interitura demonstrat.
**選りすぐりの兵員8万名が自分と一緒に滅びるであろう、と明言した。
*④ Ratione inita frumentum se exigue dierum XXX(triginta) habere<ref>frumentum ~ habere はβ系写本の記述で、χ系・φ系あるいはモイゼル H. Meusel の修正提案など、写本や校訂者により語順が異なっていたり、単語が欠けていたりする。</ref>,
**見積もったところ、自分たちはわずかに30日分の穀物を保有しているが、
*sed paulo etiam longius tolerari posse parcendo.
**しかし節約することにより、なおいくらか長く耐え忍ぶことができる、と。
*⑤ His datis mandatis,
**これらの指図を与えてから、
*qua erat nostrum opus<ref>erat nostrum opus はβ系写本の記述で、α系写本では単に opus erat となっている。</ref> intermissum, secunda vigilia silentio equitatum mittit<ref>mittit はχ系・B・M・S写本の記述で、β系写本では dimittit となっている。</ref>.
**我が方(ローマ勢)の構築物が中断しているところから、第二夜警時に静けさのうちに、騎兵隊を送り出した。
*⑥ Frumentum omne ad se referri iubet,
**穀物をすべて自分のところへ運んで来ることを命じて、
*capitis poenam iis qui non paruerint constituit;
**服従しなかった者たちを極刑に処すと決めた。
*⑦ pecus, cuius magna erat copia a Mandubiis<ref>a Mandubiis はβ系写本の記述で、α系写本では ab Manduviis となっている。</ref> compulsa, viritim distribuit;
**家畜は、マンドゥビイ族によって大量に集められていたが、個々に分配した。
*frumentum parce et paulatim metiri instituit;
**穀物を節約して少しずつ量り分けることを定めた。
*⑧ copias omnes quas pro oppido collocaverat in oppidum recepit.
**<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の前に駐留させていた(歩兵の)軍勢すべてを城塞都市の中に退却させた。
*⑨ His rationibus auxilia Galliae exspectare et bellum parat administrare<ref>parat administrare はα系写本の記述で、β系写本では administrare parat となっている。</ref>.
**これらの手段により、ガッリア(諸部族)の援軍を待つこと、および戦争を指導しようとしたのである。
===72節===
'''カエサルが、より大掛かりな攻囲陣地を構築する'''
*① Quibus rebus cognitis<ref>cognitis がこの位置にあるのはα系写本の記述で、β系写本では captivis の後となっている。</ref> ex perfugis et captivis
**それらの事情を脱走兵たちや捕虜たちから知って、
*Caesar haec genera munitionis instituit.
**カエサルは以下の類いの塁壁工事に取りかかった。
<br>
*'''前線の切り立った空堀'''
*Fossam pedum XX(viginti) derectis lateribus duxit,
**20[[w:ペース (長さ)|ペース]](約6m)の(幅の)垂直な側面の堀を引いた。
*ut eius fossae<ref>fossae がこの位置にあるのはβ系写本の記述で、α系写本では summa(e) の後になっている。</ref> solum tantundem pateret, quantum summa<ref>summa はβ系写本の記述で、α系写本では summae となっている。</ref> labra distarent<ref>distarent はα系写本の記述で、β系写本では distabant となっている。</ref>.
**その堀(の底)は、頂きの縁が離れているのとちょうど同じ分だけ広がるようにした。
**:<span style="color:#009900;">(訳注:上辺と底の幅が等間隔になるような切り立った空堀にした。)</span>
*② Reliquas omnes munitiones ab ea fossa pedes<ref>pedes はα系写本の記述で、β系写本では pedibus となっている。</ref> CCCC(quadringentos) reduxit.
**ほかのすべての塁壁は、その堀から400ペース(約120m)後ろに引いた。
**:<span style="color:#009900;">(訳注:写本にあるこの数字は、19世紀のウジェーヌ・ストッフェル大佐(colonel Eugène Stoffel)の</span>
**:<span style="color:#009900;">発掘調査によって400[[w:パッスス|パッスス]](約600m)と修正された。この堀は、アレスィアの西方に引かれたと思われる。)</span>
*Id hoc consilio,
**それは、以下の考えによる。
*quoniam tantum spatium necessario esset<ref>spatium necessario esset はβ系写本の記述で、α系写本では esset necessario spatio となっている。</ref> complexus
**これほどの空間が包囲されなければならないのであるから、
*nec facile totum corpus<ref>corpus はα系写本の記述で、β系写本では opus となっており、ρ系写本にはない。</ref> corona militum cingeretur,
**すべての包囲作業が兵士たちの<ruby><rb>哨兵線</rb><rp>(</rp><rt>コロナ</rt><rp>)</rp></ruby>で取り囲まれるのは容易ではない。
*ne de improviso aut noctu ad munitiones hostium multitudo<ref>hostium multitudo はα系写本の記述で、β系写本では multitudo hostium となっている。</ref> advolaret
**不意に、あるいは夜間に、敵方の大勢が(ローマ側の)塁壁へ突進することがないように、
*aut interdiu tela in nostros operi destinatos conicere possent<ref>possent はα系写本の記述で、β系写本では posset となっている。</ref>.
**あるいは日中に、工事中の我が方(ローマ勢)に飛道具が投げ付けられることができないように。
<br>
[[画像:Fosse.Saint.Pierre.en.Chastres.png|thumb|right|300px|二重の堀およびその背後の堡塁(土塁と障壁・櫓)の模式図([[w:ウジェーヌ・エマニュエル・ヴィオレ・ル・デュク|ヴィオレ=ル=デュク]]著『中世フランス建築体系辞典』[[s:fr:Dictionnaire raisonné de l’architecture française du XIe au XVIe siècle - Tome 5, Fossé|(s)]]より)。]]
[[画像:AlesiaFortifications.JPG|thumb|right|300px|[[w:アレシアの戦い|アレスィア古戦場]]跡に再現された、二重の堀およびその背後の堡塁(土塁と鹿柴、胸壁・鋸壁、櫓)。]]
*'''二重の堀'''
*③ Hoc intermisso spatio
**この空間をあけて、
*duas fossas XV(quindecim) pedes latas eadem altitudine perduxit;
**15ペース(約4.5m)の幅の2つの堀を、同じ深さ(15ペース)で張り巡らせた。
*quarum interiorem campestribus ac demissis locis
**それらの内側(の堀)の平地で低く下がった所には、
**:<span style="color:#009900;">(訳注:内側の堀とは、アレスィアに近い東側の堀と考えられている。)</span>
*aqua ex flumine derivata complevit.
**川から導かれた水で満たした。
<br>
*'''土塁と防柵、胸壁と鋸壁、鹿柴、櫓'''
*④ Post eas aggerem ac vallum XII(duodecim) pedum exstruxit.
**それらの後ろには、12ペース(約3.6mの高さ)の<ruby><rb>[[w:土塁|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>と<ruby><rb>防柵</rb><rp>(</rp><rt>ウァッルム</rt><rp>)</rp></ruby>を築き上げた。
*Huic loricam pinnasque adiecit
**これに<ruby><rb>胸壁</rb><rp>(</rp><rt>ロリカ</rt><rp>)</rp></ruby>と<ruby><rb>鋸壁</rb><rp>(</rp><rt>ピンナ</rt><rp>)</rp></ruby>を付け加えて、
**:<span style="color:#009900;">(訳注:胸壁と鋸壁とは、[[ガリア戦記 第5巻#40節|第5巻40節]]で既出のように、凹凸形に編み込まれた柴の壁)</span>
*grandibus cervis eminentibus ad commissuras pluteorum atque aggeris,
**障壁と土塁の接合部の辺りに大きな<ruby><rb>鹿柴</rb><rp>(</rp><rt>ケルウス</rt><rp>)</rp></ruby>を突き出させて、
**:<span style="color:#009900;">(訳注:<ruby><rb>鹿柴</rb><rp>(</rp><rt>ろくさい</rt><rp>)</rp></ruby>(鹿砦または<ruby><rb>逆茂木</rb><rp>(</rp><rt>さかもぎ</rt><rp>)</rp></ruby>)とは、鹿の角のように枝分かれした杭や枝を逆立てた杭囲い。</span>
**:<span style="color:#009900;">障壁とは、防柵の前に取り付けられた胸壁と鋸壁の総称であろう。)</span>
*qui ascensum hostium tardarent,
**敵方が登って来るのを妨げようとした。
*et turres toto opere circumdedit, quae pedes LXXX(octoginta) inter se distarent.
**構築物の全体を、互いに80ペース(約24m)離れて立つ櫓で取り巻いた。
===73節===
'''カエサルは、攻囲陣地をさらに障害物で補強する'''
*① Erat eodem tempore et materiari et frumentari et tantas munitiones fieri necesse
**材木収集と糧食徴発、およびこれほどの塁壁工事がなされることが、同時に必要であった。
*deminutis nostris copiis, quae longius ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> castris progrediebantur.
**我が方の軍勢(ローマ勢)は減じており、陣営からはるか遠くに進み出ていた。
*Ac nonnumquam opera nostra Galli temptare
**いくたびか、我が方の構築物に、ガッリア人が攻撃すること(を試み)、
*atque eruptionem ex oppido pluribus portis summa vi facere conabantur.
**かつ、<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の多くの門から、主力でもって出撃することを試みた。
*② Quare ad haec rursus opera addendum Caesar putavit,
**そのゆえに、この構築物へさらに(以下の障害物が)付け加えられるべきだとカエサルは考えた。
*quo minore numero militum munitiones defendi possent.
**それによって、より少ない数の兵士で塁壁が防衛されることができるように、と。
[[画像:Archeodrome_Beaune_8.jpg|thumb|right|300px|[[w:アレシアの戦い|アレスィア古戦場]]跡に再現された攻囲陣地(上の画像と同じ物)。堡塁(土塁と障壁と櫓)の前の平地に、樹枝が突き出た「尖り杭」(奥)と落とし穴を枝で覆った「百合」(手前)が見える。]]
[[画像:Trous.de.loup.png|thumb|right|300px|サイコロの五つ目状に並べられた落とし穴「百合」(lilium)の模式図([[w:ウジェーヌ・エマニュエル・ヴィオレ・ル・デュク|ヴィオレ=ル=デュク]]著『中世フランス建築体系辞典』[[s:fr:Dictionnaire raisonné de l’architecture française du XIe au XVIe siècle - Tome 5, Fossé|(s)]]より)。図の上部が五つ目状の配列を、図の下部が落とし穴の断面図を示す。この断面図では、尖らされた樹幹の先端が、傾斜した穴の突き固められた底から4本指ほど突き出ていると解釈しているようである。カエサルの記述からは、地表から突き出ているとも解釈できる。]]
[[画像:Aiguillon.png|thumb|right|200px|鉄の鉤が固定された杭「刺」の模式図([[w:ウジェーヌ・エマニュエル・ヴィオレ・ル・デュク|ヴィオレ=ル=デュク]]著『中世フランス建築体系辞典』[[s:fr:Dictionnaire raisonné de l’architecture française du XIe au XVIe siècle - Tome 5, Fossé|(s)]]より)。]]
[[画像:Archeodrome_Beaune_2.jpg|thumb|right|300px|[[w:アレシアの戦い|アレスィア古戦場]]跡に再現された攻囲陣地(上の画像と同じ物)。いちばん手前に「刺」が再現されている。]]
:
'''尖り杭'''
*Itaque truncis arborum aut admodum firmis ramis abscisis
**こうして、樹木の幹、あるいは非常に強固な枝が切り取られて、
*atque horum delibratis ac praeacutis cacuminibus
**これらの皮がむかれて、<ruby><rb>梢</rb><rp>(</rp><rt>こずえ</rt><rp>)</rp></ruby>が<ruby><rb>尖</rb><rp>(</rp><rt>とが</rt><rp>)</rp></ruby>らされて、
*perpetuae fossae quinos pedes altae ducebantur.
**5[[w:ペース (長さ)|ペース]](約1.5m)ずつの連続した堀が引かれた。
*③ Huc illi stipites demissi
**ここに、あの樹幹が沈められて、
*et ab infimo revincti, ne revelli possent, ab ramis eminebant.
**底から固くしばられて、はぎ取ることができないようにして、枝から(地上に)突き出るようにしていた。
*④ Quini erant ordines coniuncti inter se atque implicati;
**5列ずつが、互いにつなげられて、結び合わされた。
*quo qui intraverant se ipsi acutissimis vallis induebant.
**そこに踏み込んだ者は、自身が自らをきわめて鋭い杭に陥れた。
*Hos cippos appellabant.
**(将兵たちは)これらを<ruby><rb>尖り杭</rb><rp>(</rp><rt>キップス</rt><rp>)</rp></ruby>と呼んだ。
**:<span style="color:#009900;">(訳注:[[wikt:en:cippus|cippus]]「尖り杭」は「墓標」とも訳されるが、後者は古典期以降のラテン語で長方形の墓碑を指す<ref><small>POSTCLASSIQUE</small> <i>[[w:fr:Cippe|cippe]] (colonne funéraire rectangulaire)</i>(ラルース社の羅仏辞典 <small>“Dictionnaire MaxiPoche Plus latin-français et français-latin”</small> を参照)</ref>。)</span>
:
'''百合'''
*⑤ Ante<ref>ante はβ系写本の記述で、α系写本にはない。</ref> quos<ref>quos はα系写本の記述で、β系写本では hos となっている。</ref> obliquis ordinibus in quincuncem dispositis
**それらの前に、(サイコロの)<ruby><rb>五つ目状</rb><rp>(</rp><rt>クィンクンクス</rt><rp>)</rp></ruby>に斜めの列に配置されて、
*scrobes tres in altitudinem pedes fodiebantur
**深さ3ペース(約90cm)の穴が掘られた。
*paulatim angustiore ad infimum fastigio.
**しだいに、より狭く、底の方へ傾斜を付けて。
*⑥ Huc teretes stipites [[w:la:Femur|feminis]] crassitudine
**ここに、太ももの厚さの丸みを帯びた樹幹が
*ab summo praeacuti et praeusti demittebantur,
**先端から尖らせられ、焦がされて(穴の底に)突き刺された。
*ita ut non amplius digitis quattuor ex terra<ref>ex terra はα系写本の記述で、V・ρ系写本では e terra 、T写本では contra となっている。</ref> eminerent;
**4本の指より長くないほど地中から突き出るように。
*⑦ simul confirmandi et stabiliendi causa
**同時に、強固にして固定するために、
*singuli ab infimo solo pedes terra exculcabantur;
**それぞれ底から1ペース(約30cm)だけ土で突き固められた。
*reliqua pars scrobis ad occultandas insidias viminibus ac virgultis integebatur.
**穴の残りの部分は、わなを隠すために、柳の細枝や若枝で覆われた。
*⑧ Huius generis octoni ordines ducti ternos inter se pedes distabant.
**この類いを、8列ずつ、3ペース(約90cm)ずつ互いに離して、作った。
*Id ex similitudine floris lilium appellabant.
**(将兵たちは)それを花との類似から、<ruby><rb>[[w:ユリ|百合]]</rb><rp>(</rp><rt>リリウム</rt><rp>)</rp></ruby>と呼んだ。
:
'''刺'''
*⑨ Ante haec taleae pedem longae ferreis hamis infixis totae in terram infodiebantur
**これらの前に、鉄製の鉤が打ち込まれた長さ1ペース(約30cm)の棒の全体が地中に埋め込まれた。
*mediocribusque intermissis spatiis omnibus locis disserebantur,
**適度な空間を間にあけて、至る所に配置された。
*quos stimulos nominabant.
**(将兵たちは)それらを刺と呼んだ。
{| class="wikitable"
|-
! colspan="2" | [[w:la:Obsidio Alesiae|Obsidio Alesiae]]
|-
| style="vertical-align:top; text-align:left; width:35em;" |[[画像:Fortificazioni alesia png.png|thumb|left|500px|[[w:アレシアの戦い|アレシアの戦い]]における攻囲陣地の構成(図の説明はイタリア語)。]]
|}
===74節===
'''ガッリア人の来援に備えて、外周にも同様の塁壁を張り巡らす'''
*① His rebus perfectis
**これらの物が造り上げられると、
*regiones secutus quam potuit aequissimas pro loci natura
**地勢に応じて、できるかぎり好都合な地帯を探し求めて、
*XIIII(quattuordecim) milia passuum complexus
**14ローママイル(約21km)を取り巻いて、
*pares eiusdem generis munitiones,
**(内周の塁壁と規模が)匹敵する同じ類いの塁壁を
*diversas ab his, contra exteriorem hostem perfecit,
**これら(内周)に対置させて、外側の敵に対抗して造り上げた。
*ut ne magna quidem multitudine, si ita accidat equitatus<ref>equitatus はシェーラー(Schoeller)による修正提案で、写本(ω)では eius であるが、近代の校訂者たちにより修正提案がなされている。</ref> discessu,
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
**もし[[w:騎兵|騎兵隊]]の退去によりこのようなこと(外敵との遭遇)が生じても、決して大軍により
*munitionum praesidia circumfundi possent;
**塁壁の守備隊が包囲されることができないように。
*② <ne> autem<ref>ne autem は近代の校訂者による修正提案で、α系・π系写本では aut、ρ系写本では ut となっている。</ref> cum periculo ex castris egredi cogatur,
**(ローマ勢が)危険を伴って陣営から進発することを強いられることもないように、
*dierum XXX(triginta) pabulum frumentumque habere omnes convectum iubet.
**30日分の[[w:糧秣|秣(まぐさ)や穀物]]を運び集めて保持することを皆に命じた。
===75節===
'''ガッリア同盟が各部族に動員を要請する'''
*① Dum haec apud<ref>apud はα系写本の記述で、β系写本では ad となっている。</ref> [[w:la:Alesia|Alesiam]] geruntur,
**これらが[[w:アレシア|アレスィア]]のもとで遂行されている間に、
*Galli concilio principum indicto
**ガッリア人たちは、領袖たちの会合を課して、
*non omnes hos<ref>omnes hos はα系写本の記述で、β系写本では単に omnes となっている。</ref> qui arma ferre possent, ut censuit [[w:la:Vercingetorix|Vercingetorix]], convocandos statuunt,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]が見積もったように武器を扱える者たち皆を召集するべき、ではないと判断した。
*sed certum numerum cuique ex civitate<ref>ex civitate はα系写本の記述で、β系写本では civitati となっている。</ref> imperandum,
**けれども、おのおのの部族から一定の兵数(の供出)を命令すること(を決めた)。
*ne tanta multitudine confusa nec moderari nec discernere suos nec frumentandi rationem<ref>frumentandi rationem はT・U・R写本などの記述で、V・U写本などでは frumenti rationem となっている。</ref> habere possent.
**これほどの大軍で混乱したり、味方を指揮できなかったり判別できなかったり、ということがないように。
*② Imperant [[w:la:Haedui|Haeduis]] atque eorum clientibus, Segusiavis, Ambivaretis, Aulercis Brannovicibus, Blannoviis, milia XXXV(triginta quinque);
**[[w:ハエドゥイ族|ハエドゥイー族]]とその庇護民であるセグスィアウィ族、アンビウァレティ族、アウレルキ・ブランノウィケス族、ブランノウィイ族に3万5千名を命令した。
*parem numerum Arvernis adiunctis Eleutetis, Cadurcis, Gabalis, Vellaviis,
**[[w:アルウェルニ族|アルウェルニー族]]に隣接しているエレウテティ族、カドゥルキー族、ガバリ族、ウェッラウィイ族に同等の兵数。
*qui sub imperio Arvernorum esse consuerunt;
**彼らはアルウェルニー族の支配下にいるのが常であった。
*③ Sequanis, Senonibus, Biturigibus, Santonis, Rutenis, Carnutibus duodena milia;
**セクアニ族、セノネース族、ビトゥリゲース族、サントネス族、ルテーニー族、カルヌーテース族には1万2千ずつ。
*Bellovacis X(decem); totidem Lemovicibus;
**ベッロウァキ族に1万。レモウィケス族に同じだけ多く(1万)。
*octona Pictonibus et Turonis et Parisiis et Helvetiis;
**ピクトネス族とトゥロニ族とパリスィイ族と[[w:ヘルウェティイ族|ヘルウェティイ族]]に8(千)ずつ。
*Senonibus<ref>Senonibus は写本(ω)にある記述だが、sen<a Suessi>onibus「6(千)ずつをスエッスィオニス族…に」などさまざまな修正提案がなされている。</ref>, Ambianis, Mediomatricis, Petrocoriis, Nerviis, Morinis, Nitiobrogibus quina milia;
**セノネース族、アンビアニ族、メディオマトリキ族、ペトロコリイ族、ネルウィイ族、モリニ族、ニティオブロゲス族に5千ずつ。
**:<span style="color:#009900;">(訳注:Senonibus「セノネース族」は既出のためスエッスィオネス族などに書き替える修正提案がなされ、以下は校訂版によっては兵数がずれる。</span>
**:<span style="color:#009900;">しかし、スエッスィオネス族 Suessiones は[[ガリア戦記 第2巻#12節|第2巻12節]]でレーミー族を通じてカエサルに降伏しており、</span>
**:<span style="color:#009900;">第8巻6節でも「レーミー族に委ねられていた」「同盟者」と記されているので、アレスィアには出兵していないであろう。)</span>
*Aulercis Cenomanis totidem; Atrebatibus IIII;
**アウレルキ・ケノマニ族に同じだけ多く(5千)。アトレバテス族に4(千)。
*Veliocassis, Lexoviis et Aulercis Eburovicibus terna;
**ウェリオカッセス族、レクソウィイ族とアウレルキ・エブロウィケス族に3(千)ずつ。
*Rauracis et Boiis<ref>Boiis はα系写本の記述で、β系写本では Bois となっている。</ref> bina;
**ラウラキ族とボイイ族に2(千)ずつ。
*XXX<ref>XXX はα系写本の記述で、さまざまな修正提案がなされている。</ref> milia universis civitatibus, quae Oceanum attingunt
**<ruby><rb>大洋<span style="color:#009900;">〔[[w:大西洋|大西洋]]〕</span></rb><rp>(</rp><rt>オーケアヌス</rt><rp>)</rp></ruby>に接する諸部族全体に3万。
**:<span style="color:#009900;">(訳注:この数は写本により異なっており、混乱している。)</span>
*quaeque eorum consuetudine Aremoricae appellantur,
**それらは、彼ら(ガッリア人)の慣習でアレモリカエと呼ばれており、
*quo sunt in numero Coriosolites, Redones, Ambibarii, Caletes, Osismi, Veneti, Lemovices, Unelli.
**コリオソリテス族、レドネス族、アンビバリイ族、カレテス族、オスィスミ族、ウェネティ族、レモウィケス族、ウネッリ族がそれらに数えられる。
*⑤ Ex his Bellovaci suum numerum non compleverunt<ref>compleverunt はα系写本の記述で、β系写本では contulerunt となっている。</ref>,
**これらのうちで、ベッロウァキ族は、自分たちの(割り当てられた)数を満たさなかった。
*quod se suo nomine atque arbitrio cum Romanis bellum gesturos dicebant
**というのは、彼らは自らの名と裁量でもってローマ人と交戦するであろうと言ったのだ。
*neque cuiusquam imperio obtemperaturos;
**(自分たちは)何者の命令にも服従しないであろう、と。
*rogati tamen ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> Commio pro eius hospitio duo milia una miserunt.
**けれども、[[w:コンミウス|コンミウス]]の懇願により、彼を賓客としているために、2千名を一緒に送り出した。
**:<span style="color:#009900;">(訳注:ベッロウァキ族は要求された兵数の5分の1しか出さなかったが、第8巻22節ではこの出兵をも含めてカエサルから責められる。)</span>
===76節===
'''コンミウスもガッリア同盟軍に内応、約25万の大軍が集結'''
*① Huius opera Commii, ut antea demonstravimus, fideli atque utili
**前に述べたように、この[[w:コンミウス|コンミウス]]の信頼すべき有益な働きを
**:<span style="color:#009900;">(訳注:[[ガリア戦記 第4巻#21節|第4巻21節]]・[[ガリア戦記 第4巻#27節|27節]]・[[ガリア戦記 第4巻#35節|35節]]、[[ガリア戦記 第5巻#22節|第5巻22節]]、[[ガリア戦記 第6巻#6節|第6巻6節]]を参照。)</span>
*superioribus annis erat usus in [[w:la:Britannia Maior|Britannia]] Caesar;
**カエサルは先年(BC55~54年)に[[w:ブリタンニア|ブリタンニア]]において役立てていた。
**:<span style="color:#009900;">(訳注:コンミウスは、[[w:ローマによるブリタンニア侵攻 (紀元前55年-紀元前54年)|カエサルのブリタンニア侵攻]]の先導役を務めていた。後にブリタンニアで王となる。)</span>
*quibus ille pro meritis civitatem eius immunem esse iusserat,
**彼(カエサル)はそれらの功績の見返りに、彼(コンミウス)の部族が免税となることを命じており、
*iura legesque reddiderat atque ipsi Morinos attribuerat.
**権能や法度を元に戻してやり、(コンミウス)自身にモリニ族(の統治)をも委ねていた。
*② Tamen tanta<ref>tamen tanta はα系写本の記述で、β系写本では tanta tamen となっている。</ref> universae Galliae consensio fuit libertatis vindicandae et pristinae belli laudis recuperandae,
**けれども、自主独立が求められるべきで、かつての戦争の誉れが取り戻されるべきだという、ガッリア全体の合意があった。
*ut neque beneficiis neque amicitiae memoria moverentur
**その結果、(カエサルからの)厚遇にも友情の記憶にも揺り動かされず、
*omnesque et animo et opibus in id bellum incumberent.
**(ガッリアの)皆が闘志によっても兵力によっても、その戦争に没頭していたのだ。
*③ Coactis equitum milibus VIII(octo) et peditum circiter CCL(ducenti quinquaginta)<ref>CCL はβ系写本の記述で、α系写本では CCXL または CCXXXX となっている。</ref>
**[[w:騎兵|騎兵]]8千騎と[[w:歩兵|歩兵]]およそ250(千)名が徴集されて、
**:<span style="color:#009900;">(訳注:歩兵の数は、β系写本では25万、α系写本では24万と異なっている。)</span>
*haec in Haeduorum finibus recensebantur, numerusque inibatur, praefecti constituebantur.
**これら(の軍勢)が[[w:ハエドゥイ族|ハエドゥイー族]]の領土で閲兵されて、数が見積もられて、指揮官たちが決められた。
*④ Commio Atrebati, Viridomaro et [[w:la:Eporedorix|Eporedorigi]] [[w:la:Haedui|Haeduis]],
**アトレバテス族の[[w:コンミウス|コンミウス]]、ハエドゥイー族のウィリドマルスとエポレドリクス、
*[[w:la:Vercassivellaunus|Vercassivellauno]] Arverno, consobrino Vercingetorigis, summa imperii traditur.
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の従兄弟である[[w:アルウェルニ族|アルウェルニー族]]のウェルカッスィウェッラウヌスに、最高司令権が託された。
*His delecti ex civitatibus attribuuntur, quorum consilio bellum administraretur.
**彼らに、諸部族から選ばれた者たちが付与されて、その者たちの協議により戦争が指導された。
*⑤ Omnes alacres et fiduciae pleni ad [[w:la:Alesia|Alesiam]] proficiscuntur,
**皆が、活気があって自身に満ち、[[w:アレシア|アレスィア]]へ向けて出発した。
*⑥ neque erat omnium quisquam qui adspectum modo tantae multitudinis sustineri posse arbitraretur,
**これほどの大軍を一見しただけで持ちこたえられる者は、誰一人いないと思われた。
*praesertim ancipiti proelio,
**とりわけ(内周と外周の)両面の戦闘で、
*cum ex oppido eruptione pugnaretur, foris tantae copiae equitatus peditatusque cernerentur.
**城塞都市からは出撃により戦われ、外からは騎兵と歩兵のこれほどの軍勢が視認されるのであるから。
===77節===
'''飢餓状態のアレスィアで、クリトグナトゥスが極論を唱える'''
*① At ii qui [[w:la:Alesia|Alesiae]] obsidebantur
**ところが、[[w:アレシア|アレスィア]]に包囲されていた者たちは、
*praeterita die qua auxilia suorum exspectaverant,
**味方の援軍を待ち望んでいた日も経過して、
*consumpto omni frumento,
**すべての糧食を消費し尽くして、
*inscii quid in [[w:la:Haedui|Haeduis]] gereretur,
**[[w:ハエドゥイ族|ハエドゥイー族]]のところにおいて何がなされているのかを知らず、
*concilio coacto de exitu suarum fortunarum consultabant.
**会合を召集して、自分たちの命運の結末について協議した。
*② Ac variis dictis sententiis
**そして、さまざまな意見が述べられた。
*quarum pars deditionem,
**それらの一部は降伏を、
*pars dum vires suppeterent eruptionem censebat,
**別の一部は、活動力が十分にある間に突撃することを考慮していた。
*non praetereunda oratio [[w:la:Critognatus|Critognati]] videtur propter eius singularem et nefariam crudelitatem.
**クリトグナトゥスの演説は、彼の特異で非道な残酷さのために、看過されるべきではないと思われる。
<br>
'''クリトグナトゥスの演説が始まる'''
*③ Hic summo in Arvernis ortus loco et magnae habitus auctoritatis,
**彼は、[[w:アルウェルニ族|アルウェルニー族]]において最高の身分に生まれ、大きな影響力を持つとみなされていた。
<br>
'''降伏論者は最低の輩だ'''
*"Nihil" inquit "de eorum sententia dicturus sum, qui turpissimam servitutem deditionis nomine appellant,
**「最も恥ずべき隷属を降伏という名で呼んでいる者たちの意見については、(私は)何も述べないであろう」と言った。
*neque hos habendos civium loco neque ad concilium adhibendos censeo.
**「この者たちは市民の身分を持つべきではないし、会合へ招き入れられるべきでもない、と(私は)考える。
<br>
'''突撃論者には辛抱が欠けている'''
*④ Cum his mihi res sit, qui eruptionem probant;
**突撃に賛同した者たちとともに、私の関わりはあるべきだ。
*quorum in consilio omnium vestrum consensu
**その者たちの考えには、君たち皆の同意があるだろうし、
*pristinae residere virtutis memoria videtur.
**かつての武勇の記憶が残っていることと思われる。
*⑤ Animi est ista mollitia, non virtus, paulisper inopiam ferre non posse.
**しばらくの間も(糧食の)欠乏に耐えることができない(君らの)ことは、気の弱さであって、武勇ではない。
*Qui se ultro morti offerant facilius reperiuntur quam qui dolorem patienter ferant.
**自発的に玉砕して逝った者たちは、苦痛に辛抱強く耐えた者たちよりも、より容易に見出されるのだ。
*⑥ Atque ego hanc sententiam probarem ─tantum apud me dignitas potest─,
**しかし私は(突撃という)この意見に賛同したであろう。それほど、私にとっても価値がある。
*si nullam praeterquam vitae nostrae iacturam fieri viderem;
**(ただし)もし、我々(ガッリア勢)の生命が投げ出されること以外に(方策が)何もないと思ったならばだ。
*⑦ sed in consilio capiendo omnem Galliam respiciamus, quam ad nostrum auxilium concitavimus.
**けれども、作戦を立てるに当たっては、我々のために援軍を(我々が)呼び寄せた全ガッリアを顧慮しよう。
*⑧ Quid hominum milibus LXXX(octoginta) uno loco interfectis
**(我々ガッリア勢)8万の人間が(アレスィア)1か所で殺戮されたら、
*propinquis consanguineisque nostris animi fore existimatis,
**我々の親類縁者たちの士気はどうなると(君らは)判断しているのか。
*si paene in ipsis cadaveribus proelio decertare cogentur?
**もし、ほとんど(我々)自身の亡骸の中で(味方が)決戦することを強いられたら?
*⑨ Nolite hos vestro auxilio exspoliare qui vestrae salutis causa suum periculum neglexerunt,
**君らの身の安全のために、己の危険を顧みなかった者たちのことを、君らが援助すること(の機会)を奪わないでくれ。
*nec stultitia ac temeritate vestra aut animi imbecillitate omnem Galliam prosternere et perpetuae servituti subicere.
**君らの愚かさや無思慮、または心の弱さによって、全ガッリアを滅ぼすことや永久の隷属に委ねることがないように。
<br>
'''ローマ人たちが恐れているのを見よ'''
*⑩ An quod ad diem non venerunt, de eorum fide constantiaque dubitatis?
**それとも(援軍が)期日までにやって来なかったので、彼らの誠実さや剛直さについて(君らは)疑っているのか?
*Quid ergo?
**それでは(あれは)何だ?
*Romanos in illis ulterioribus munitionibus animine causa cotidie exerceri putatis?
**ローマ人たちがあの向こう側の塁壁のところで、趣味のために毎日たえず働かされていると(君らは)思うのか?
*⑪ Si illorum nuntiis confirmari non potestis omni aditu praesaepto,
**もし、すべての出入口を(防柵で)遮られて、(援軍の到来を)彼らの伝令により(君らが)確証できないのならば、
*his utimini testibus adpropinquare eorum adventum,
**こちらの者たち(ローマ人)を、彼ら(援軍)の到来が近づいている証人として示せ。
*cuius rei timore exterriti diem noctemque in opere versantur.
**(援軍の到来という)その事態の恐れに戦慄して(ローマ人たちは)昼も夜も工事に従事しているのだ。
<br>
'''クリトグナトゥスの意見は?'''
*⑫ Quid ergo mei consilii est?
**それでは、私の考えは何であるか?
*Facere quod nostri maiores nequaquam pari bello Cimbrorum Teutonumque fecerunt:
**我々の先祖たちが(今回とは)決して比べものにならない[[w:キンブリ・テウトニ戦争|キンブリ族・テウトニ族との戦争]]でしたことをするのだ。
*qui in oppida compulsi ac simili inopia subacti
**彼ら(先祖たち)は、[[w:オッピドゥム|城塞都市]]に押し込められて、(今回と)似たような欠乏により衰弱させられて、
*eorum corporibus, qui aetate ad bellum inutiles videbantur, vitam toleraverunt
**加齢により戦争に役立たないと思われた者たちの肉体(を食べること)によって、生命を持ちこたえて、
*neque se hostibus tradiderunt.
**敵方に降伏しなかったのだ。
*⑬ Cuius rei si exemplum non haberemus,
**もし、そういう事態の先例を我々が持たなかったとしても、
*tamen libertatis causa institui et posteris prodi pulcherrimum iudicarem.
**けれども、自由のために、最も栄誉なことが決断され、子孫たちに伝えられることと、私は思いたい。
*⑭ Nam quid illi simile bello fuit?
**実際、あの戦争に(今回と)似ている何があっただろうか?
*Depopulata Gallia Cimbri magnaque inlata calamitate
**キンブリ族はガッリアを荒らしまわって、大きな災禍をもたらしたが、
*finibus quidem nostris aliquando excesserunt atque alias terras petierunt;
**あるとき我々の領土から立ち去って、他の土地を求めて行った。
*iura, leges, agros, libertatem nobis reliquerunt.
**権限、法度、耕地、自由を我々(ガッリア人)に残して行ったのだ。
*⑮ Romani vero quid petunt aliud aut quid volunt
**しかし、ローマ人たちは(以下に挙げることの)他に何を求め、何を欲しているのだろうか。
**:<span style="color:#009900;">(訳注:「しかし、ローマ人が求め、欲しているのは、以下のことである」の意。)</span>
*nisi invidia adducti quos fama nobiles potentesque bello cognoverunt,
**高貴で戦争に力強い(ガッリアの)者たちを名声で知って羨望に駆られた以外には、
*horum in agris civitatibusque considere atque his aeternam iniungere servitutem?
**彼らの土地や部族共同体に居座って、彼らを永遠の隷属を課すること以外には。
*Neque enim ulla alia condicione bella gesserunt.
**実際、(ローマ人は)他のいかなる条件でも決して戦争を遂行したことがなかった。
*⑯ Quodsi ea quae in longinquis nationibus geruntur ignoratis,
**もし、遠方の種族のところでなされていることを(君らが)知らないのであれば、
*respicite finitimam Galliam,
**ガッリアの隣人たちを見渡しなさい。
*quae in provinciam redacta,
**(彼らはローマの)[[w:属州|属州]]になることを余儀なくされ、
*iure et legibus commutatis,
**権限や法度を変えられて、
*securibus subiecta perpetua premitur servitute."
**(ローマの)権力に服属させられて、永久の隷属に苦しめられているのだ。
===78節===
'''マンドゥビイ族の投降をカエサルが拒む'''
*① Sententiis dictis
**(いくつかの)意見が述べられて、
*constituunt ut ii, qui valetudine aut aetate inutiles sunt<ref>sunt はα系写本の記述で、β系写本では sint となっている。</ref> bello, oppido excedant
**(ガッリア人たちは)健康または年齢により戦争に役立たない者たちは[[w:オッピドゥム|城塞都市]]を退去するように決めた。
*atque omnia prius experiantur quam ad Critognati sententiam descendant;
**さらに、クリトグナトゥスの意見に同意するよりも、まずあらゆることを試みるように(決めた)。
*② illo tamen potius utendum consilio,
**けれども(以下の場合には)むしろ彼(クリトグナトゥス)の意見を実行するべきだ。
*si res cogat atque auxilia morentur,
**もし、事態が強いて、援軍が遅滞させられるのならば、
*quam aut deditionis aut pacis subeundam condicionem.
**降伏あるいは講和条件を受諾することよりも(クリトグナトゥスの意見を実行するべきだ)、と。
*③ Mandubii qui eos oppido receperant,
**彼ら(ガッリア勢)を城塞都市に受け入れていたマンドゥビイ族は、
*cum liberis atque uxoribus exire coguntur.
**子供たちや妻女たちとともに(城塞都市から)出て行くことを強いられた。
*④ Hi cum ad munitiones Romanorum accessissent,
**彼らは、ローマ人たちの塁壁のところへ近づいたときに、
*flentes omnibus precibus orabant, ut se in servitutem receptos cibo iuvarent.
**自分たちを奴隷として受け入れて食糧で助けてくれるように、泣きながらあらゆる懇願で頼んだ。
*⑤ At Caesar dispositis in vallo custodibus<ref>custodibus はα系写本の記述で、β系写本では custodiis となっている。</ref> recipi prohibebat.
**だが、カエサルは、防柵の中に番兵を分けて置き、(マンドゥビイ族を)受け入れることを禁じた。
===79節===
'''ガッリア同盟軍の来援、アレスィアの歓呼'''
*① Interea Commius reliquique duces, quibus summa imperii permissa erat,
**その間に、最高司令権を任されていた[[w:コンミウス|コンミウス]]とほかの将帥たちが、
*cum omnibus copiis ad Alesiam perveniunt
**すべての軍勢とともに[[w:アレシア|アレスィア]]の辺りへ到着して、
*et colle exteriore occupato
**より外側の丘陵を占拠して、
**:<span style="color:#009900;">(訳注:現在のミュスィ=ラ=フォス村 [[w:fr:Mussy-la-Fosse|Mussy-la-Fosse]]<ref>[http://maps.google.com/maps?q=47.521944,4.438611&hl=fr&ie=UTF8&ll=47.522012,4.438648&spn=0.01849,0.027423&t=h&z=15 Google map]を参照。</ref> のある丘陵であると思われる。)</span>
*non longius mille passibus ab nostris munitionibus considunt.
**我が方(ローマ勢)の塁壁から1ローママイル(約1.5km)ほども遠くないところに陣取った。
**:<span style="color:#009900;">(訳注:現在のヴナレ=レ=ローム [[w:fr:Venarey-les-Laumes|Venarey-les-Laumes]] 市街<ref>[http://maps.google.com/maps?q=47.542778,4.445833&hl=fr&ie=UTF8&ll=47.543106,4.458475&spn=0.036965,0.054846&t=h&z=14 Google map]を参照。</ref>の周辺であると思われる。)</span>
*② Postero die equitatu ex castris educto
**翌日に、[[w:騎兵|騎兵隊]]が陣営から進発させられて、
*omnem eam planitiem quam in longitudinem milia passuum III(tria)<ref>milia passuum III はβ系写本の記述で、α系写本では quattuor milia passuum などとなっている。</ref> patere demonstravimus, complent
**3ローママイル(約4.5km)の長さにわたり広がっていることを既述した平地のすべてを、満たした。
**:<span style="color:#009900;">(訳注:[[#69節|69節]]を参照。現在のローム平原に当たると思われる。)</span>
*pedestresque copias paulum ab eo loco abditas in locis superioribus constituunt.
**[[w:歩兵|歩兵]]の軍勢を、その地からいくらか遠ざけて、より高いところに駐留させた。
**:<span style="color:#009900;">(訳注:上記の丘陵のより高い所であると思われる。)</span>
*③ Erat ex oppido Alesia despectus in campum.
**アレスィアの[[w:オッピドゥム|城塞都市]]からは(その)平地に眺望があった。
*Concurrunt<ref>concurrunt はα系写本の記述で、β系写本では concurritur となっている。</ref> his auxiliis visis;
**これらの援軍が現われると(アレスィアのガッリア人たちは)群がり集まった。
*fit gratulatio inter eos
**彼らの間で祝賀がなされて、
*atque omnium animi ad laetitiam excitantur.
**皆の心が喜びへと鼓舞された。
*④ Itaque productis copiis ante oppidum considunt
**こうして(アレスィアの)軍勢が出撃させられて、城塞都市の前に陣取って、
*et proximam fossam cratibus integunt atque aggere explent
**最も近い堀を、柴で蔽って、土砂を充満させて、
*seque ad eruptionem atque omnes casus comparant.
**突撃やあらゆる有事に戦備を整えた。
===80節===
'''ゲルマニア騎兵らローマ勢が来援ガッリア騎兵をも打ち破る'''
*① Caesar omni exercitu ad utramque partem munitionum<ref>munitionum はα系写本の記述で、β系写本では munitionis となっている。</ref> disposito,
**カエサルは、すべての[[w:歩兵|歩兵隊]]を、塁壁の(内周と外周)両側に分けて置き、
*ut, si usus veniat, suum quisque locum teneat et noverit,
**もし、必要が生じたら、おのおのが自らの部署を知って固守するようにした。
*equitatum ex castris educi et proelium committi iubet.
**[[w:騎兵|騎兵隊]]を陣営から進発させて、交戦することを命じた。
*② Erat ex omnibus castris, quae summum undique iugum tenebant, despectus
**至る所で尾根の頂きを占めていた(ローマ勢の)すべての陣営から(騎兵戦の)眺望があった。
*atque omnes milites intenti<ref>intenti はα系写本の記述で、β系写本では intenti animi、Fuchs は intentis animis と修正提案している。</ref> pugnae proventum<ref>pugnae proventum はα系写本の記述で、β系写本では proventum pugnae となっている。</ref> exspectabant.
**すべての兵士たちは(観戦に)没頭して、戦いの結果を待っていた。
*③ Galli inter equites raros sagittarios expeditosque levis armaturae interiecerant,
**ガッリア人たちは、弓兵たちと軽装歩兵たちをまばらに、騎兵たちの間に置いていて、
*qui suis cedentibus auxilio succurrerent
**その者たち(弓兵と軽装歩兵)は、味方が後退するのを支援するために馳せ寄って、
*et nostrorum equitum impetus sustinerent.
**我が方(ローマ勢)の騎兵の突撃に持ちこたえていた。
*Ab his complures de improviso vulnerati proelio excedebant.
**彼らによって(ローマ側騎兵の)かなりの者たちが、思いがけず負傷させられて、戦闘から退いた。
*④ Cum suos pugna superiores esse Galli confiderent
**ガッリア人たちが、味方が戦いで優勢であることを確信したとき、
*et nostros multitudine premi viderent,
**かつ、我が方(ローマ勢)が多勢(のガッリア騎兵)により圧倒されているのを見て取ったときに、
*ex omnibus partibus et ii qui munitionibus continebantur
**あらゆる方面から(ローマ勢の)塁壁によって囲まれていた者たちも、
*et hi<ref>hi はφ系・β系写本の記述で、χ系写本では ii となっている。</ref> qui ad auxilium convenerant
**(アレスィア)救援のために集結して来ていた者たちも、
*clamore et ululatu suorum animos confirmabant.
**大声やわめき声によって味方の闘志を強めた。
*⑤ Quod in conspectu omnium res gerebatur
**(両軍の)皆の環視の中で合戦が遂行されたので、
*neque recte ac<ref>ac はα系・π系写本の記述で、ρ系写本では aut となっている。</ref> turpiter factum celari poterat,
**立派な行為または見苦しい行為も隠されることができなかったので、
*utrosque et laudis cupiditas et timor ignominiae ad virtutem excitabant<ref>excitabant はB・M・L・N・R写本などの記述で、χ系・B・S・π系・U写本などでは excitabat となっている。</ref>.
**賞賛への功名心も、不名誉への恐れも、双方を武勇へと駆り立てた。
*⑥ Cum a meridie prope ad solis occasum dubia victoria pugnaretur,
**正午から、ほぼ日没の頃まで、勝利が不確実なまま戦われていたときに、
*Germani una in parte confertis turmis
**ゲルマニア人たちが、騎兵部隊を一か所に密集させて、
*in hostes impetum fecerunt eosque propulerunt;
**敵方に突撃を行ない、彼ら(ガッリア騎兵)を駆逐した。
*⑦ quibus in fugam coniectis
**その者たち(ガッリア騎兵)は逃亡に追いやられて、
*sagittarii circumventi interfectique sunt.
**弓兵たちは包囲されて殺戮された。
*⑧ Item ex reliquis partibus nostri cedentes usque ad castra insecuti
**我が方(ローマ勢)の残りの部隊も、撤退する(ガッリア騎兵の)者たちを陣営のところまで追撃して、
*sui colligendi facultatem non dederunt.
**立ち直る機会を与えなかった。
*⑨ At ii qui ab [[w:la:Alesia|Alesia]] processerant,
**そして、[[w:アレシア|アレスィア]]から進み出ていた者たちは、
*maesti prope victoria desperata se in oppidum receperunt.
**ほとんど絶望的な勝利に悲嘆して、城塞都市に退却した。
===81節===
'''ガッリア来援軍と籠城軍がローマ陣地に夜襲をしかける'''
*① Uno die intermisso Galli
**ガッリア人たちは一日を間に置いて、
*atque hoc spatio magno cratium, scalarum, harpagonum numero effecto
**この間に、多数の柴、[[w:梯子|梯子]]、鉤竿を調達して、
*media nocte silentio ex castris egressi
**真夜中に静けさのうちに陣営から進発して、
*ad campestres munitiones accedunt.
**平地の(ローマ勢の)塁壁の辺りへ近づいた。
*② Subito clamore sublato, qua significatione
**突然に雄叫びを上げて、それを合図として、
*qui in oppido obsidebantur de suo adventu cognoscere possent,
**[[w:オッピドゥム|城塞都市]]の中に包囲されている者たちが、自分たちの到来について認識できるようにした。
*crates proicere, fundis, sagittis, lapidibus nostros de vallo proturbare
**柴を投げ込み、投石器で、矢で、石でもって我が方(ローマ勢)を防柵から追い出すこと、
*reliquaque quae ad oppugnationem pertinent parant administrare.
**(塁壁の)攻略のために役立つほかのことに従事すること、を目論んだ。
*③ Eodem tempore clamore exaudito
**同時に(来援軍の)雄叫びを聞き取って、
*dat tuba signum suis [[w:la:Vercingetorix|Vercingetorix]] atque ex oppido educit.
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、麾下の者たちにラッパで指図を与えて、城塞都市から進発させた。
*④ Nostri, ut superioribus diebus, suus cuique<ref>suus cuique はβ系写本の記述で、χ系・B・M・S写本では ut cuique となっている。</ref> erat locus attributus, ad munitiones accedunt;
**我が方(ローマ勢)は、以前の日々に、おのおのの部署が割り当てられており、塁壁のところへ近寄った。
*fundis librilibus sudibusque, quas in opere disposuerant, ac glandibus Gallos proterrent.
**堡塁に分配されていたポンド投石器や杭、並びに玉によって、ガッリア人たちを追い払った。
**:<span style="color:#009900;">(訳注:librilis funda「ポンド投石器」;古代ローマの1ポンド [[w:la:Libra pondus|libra]] は約327グラム<ref>[[w:en:Ancient Roman units of measurement#Weight]]を参照。</ref>。)</span>
*⑤ Prospectu tenebris adempto multa utrimque vulnera accipiuntur.
**眺望が暗闇により奪われて、双方が多くの傷を蒙った。
*Complura tormentis tela coniciuntur.
**かなり多くの飛び道具が(巻上式)投石機によって投じられた。
*⑥ At [[w:la:Marcus Antonius|M.(Marcus) Antonius]] et [[w:la:Gaius Trebonius|C.(Gaius) Trebonius]] legati,
**[[w:マルクス・アントニウス|マルクス・アントニウス]]と[[w:ガイウス・トレボニウス|ガイウス・トレボニウス]] [[w:レガトゥス|両副官]]は、
*quibus hae partes ad defendendum obvenerant,
**この方面を防衛するために割り当てられていたが、
*qua ex parte nostros premi intellexerant,
**我が方(ローマ勢)が押されぎみであると見なした一帯のために、
*his auxilio ex ulterioribus castellis deductos submittebant.
**この者たちを支援するために、向こう側の砦から引き出した者たちを(援兵として)派遣した。
===82節===
'''アレスィア内外のガッリア勢が障害物に阻まれて退く'''
*① Dum longius ab munitione aberant Galli,
**ガッリア人たちは(ローマ勢の)塁壁から遠くに離れていた間は、
*plus multitudine telorum proficiebant;
**飛び道具の多さによって、前進していた。
*posteaquam propius successerunt,
**(塁壁の方へ)さらに近くに進入して来た後では、
*aut se ipsi<ref>ipsi はβ系写本の記述で、α系写本にはない。</ref> stimulis inopinantes induebant
**あるいは、思いがけず自ら「刺」に陥り、
**:<span style="color:#009900;">(訳注:stimulus「刺」については、[[#73節|73節]]⑨項を参照。)</span>
*aut in scrobes delati transfodiebantur
**あるいは、穴に陥落して(「百合」で)突き刺されたり、
**:<span style="color:#009900;">(訳注:「穴」と「百合」については、[[#73節|73節]]⑤~⑧項を参照。)</span>
*aut ex vallo ac turribus traiecti pilis muralibus interibant.
**あるいは、防柵や櫓から[[w:ピルム・ムーリアリス|防壁槍]]で射抜かれて逝った。
**:<span style="color:#009900;">(訳注:防壁槍については、[[ガリア戦記 第5巻#40節|第5巻40節]]を参照。)</span>
*② Multis undique vulneribus acceptis
**(ガッリア勢は)至る所で多くの傷を負ったが、
*nulla munitione perrupta,
**どの(ローマ側の)塁壁も突破されなかった。
*cum lux appeteret,
**<ruby><rb>暁光</rb><rp>(</rp><rt>ぎょうこう</rt><rp>)</rp></ruby>が(空を)染めたとき、
*veriti ne ab latere aperto ex superioribus castris eruptione circumvenirentur,
**開けた側面から、(ローマ勢の)高所の陣営からの突撃によって包囲されないようにと怖れて、
**:<span style="color:#009900;">(訳注:開けた側面とは、盾で守られていない右側のこと。)</span>
*se ad suos receperunt.
**味方のところへ退却した。
*③ At interiores
**それに対して、(アレスィア攻囲の)内側の者たちは、
*dum ea quae a [[w:la:Vercingetorix|Vercingetorige]] ad eruptionem praeparata erant<ref>praeparata erant は、写本(ω)ではpraeparaverant だが、このように修正提案されている。あるいは、a Vercingetorige が削除提案されている。</ref> proferunt,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]により、突撃のために準備していたものを運び出して
*priores fossas explent,
**一番前の堀を埋めている間に、
*diutius in his rebus administrandis morati
**これらの事に従事することに、より長く妨げられて、
*prius suos discessisse cognoverunt quam munitionibus adpropinquarent.
**塁壁に近づくよりも前に味方(=来援軍)が退去したことを知ったのだ。
*Ita re infecta in oppidum reverterunt.
**こうして、事は達成されていないものの、[[w:オッピドゥム|城塞都市]]に引き返した。
===83節===
'''ウェルカッスィウェッラウヌスが兵6万を率いて急所の丘へ向かう'''
*① Bis magno cum detrimento repulsi Galli
**大きな損害とともに二度も撃退されたガッリア人たちは、
*quid agant consulunt;
**何をなすべきかを協議した。
*locorum peritos adhibent;
**(その)土地に熟知した者たちを招いた。
*ex his superiorum castrorum situs munitionesque cognoscunt.
**この者たちから、(ローマ勢の)高いところの陣営の位置や塁壁を調べ上げた。
*② Erat a septentrionibus collis,
**(アレスィアの)北方に丘陵があって、
**:<span style="color:#009900;">(訳注:これは現在のレア山 le Mont Réa であると思われ、山頂にはメネルー=ル=ピトワ村<ref>[[w:fr:Ménétreux-le-Pitois]]や[http://maps.google.fr/maps?f=q&hl=fr&geocode=&q=m%C3%A9n%C3%A9treux+le+pitois&sll=42.423457,8.789063&sspn=23.611541,40.957031&ie=UTF8&t=h&hq=&hnear=M%C3%A9n%C3%A9treux-le-Pitois,+C%C3%B4te-d'Or,+Bourgogne&ll=47.55475,4.460106&spn=0.018507,0.010042&z=15 Google map]などを参照。</ref>がある。)</span>
*quem propter magnitudinem circuitus
**その周囲の大きさのために、
*opere circumplecti non potuerant nostri,
**我が方(ローマ勢)は、堡塁により囲い込むことができずにいた。
*necessarioque<ref>-que はβ系写本の記述で、α系写本にはない。</ref> paene iniquo loco et leniter<ref>leniter はπ系写本の記述で、α系・ρ系写本では leviter となっている。</ref> declivi castra fecerunt<ref>fecerunt はα系写本の記述で、β系写本では fecerant となっている。</ref>.
**やむをえず、ほとんど不利でゆるやかに傾斜した地点に陣営を造った。
*③ Haec C.(Gaius) Antistius Reginus et C.(Gaius) Caninius Rebilus legati
**これを、ガーイウス・アンティスティウス・レーギーヌスとガイウス・カニニウス・レビルス [[w:レガトゥス|両副官]]が
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''[[w:fr:Caius Antistius Reginus|Gaius Antistius Reginus]]'' は[[ガリア戦記_第6巻#1節|第6巻1節]]で既出。[[#90節|90節]]で後出。)</span>
*cum duabus legionibus obtinebant.
**2個軍団とともに占めていた。
*④ Cognitis per exploratores regionibus duces hostium
**敵方の将帥たちは、偵察者たちを通じて一帯を調べ上げて、
*LX(sexaginta) milia ex omni numero deligunt
**総員のうちから6万名を選抜した。
*earum civitatum quae maximam virtutis opinionem habebant;
**武勇において大きな評判を得ている部族のうち(から選抜した)。
*⑤ quid quoque pacto agi placeat, occulte inter se constituunt;
**何が、どんな方法で行なわれるのがよいか、互いに密かに取り決めた。
*adeundi tempus definiunt, cum meridie<ref>meridie は中世の写本(ω)の記述であるが、近世の写本(ς)では meridies となっている。</ref> esse videatur.
**正午であると思われる頃を突撃する時と定めた。
*⑥ His copiis Vercassivellaunum Arvernum,
**この軍勢を、[[w:アルウェルニ族|アルウェルニー族]]のウェルカッスィウェッラウヌス、
*unum ex quattuor ducibus, propinquum [[w:la:Vercingetorix|Vercingetorigis]], praeficiunt.
**(すなわち)4人の将帥たちの1人で、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の親族である者に、指揮させた。
*⑦ Ille ex castris prima vigilia egressus
**彼(ウェルカッスィウェッラウヌス)は、陣営から第一夜警時に進発して、
*prope confecto sub lucem itinere
**夜明け前にほぼ行軍が成し遂げられて、
*post montem se occultavit
**山の後ろに身を隠して、
*militesque ex nocturno labore sese reficere iussit.
**兵士たちに夜間の疲労を回復しておくことを命じた。
*⑧ Cum iam meridies adpropinquare videretur,
**すでに正午に近付いていると思われたときに、
*ad ea castra, quae supra demonstravimus, contendit;
**前に述べた陣営のところへ急いだ。
**:<span style="color:#009900;">(訳注:本節②項を参照。)</span>
*eodemque tempore equitatus ad campestres munitiones accedere
**同時に(ガッリア来援軍の)[[w:騎兵隊|騎兵隊]]が平地の(ローマ勢の)塁壁のところへ近付き、
*et reliquae copiae pro castris sese ostendere coeperunt.
**残りの軍勢が陣営の前に姿を現わし始めた。
===84節===
'''ウェルキンゲトリークスらアレスィア籠城軍も善戦する'''
*① [[w:la:Vercingetorix|Vercingetorix]] ex arce [[w:la:Alesia|Alesiae]] suos conspicatus ex oppido egreditur;
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、[[w:アレシア|アレスィア]]の高台から味方を望見して、[[w:オッピドゥム|城塞都市]]から進発した。
*a castris<ref>a castris はβ系写本の記述で、α系写本では単に castris となっている。</ref>, longurios, musculos, falces
**陣営から、長い竿、小屋、破城鎌や、
**:<span style="color:#009900;">(訳注:falx「破城鎌」については、[[ガリア戦記 第5巻#42節|第5巻42節]]を参照。)</span>
*reliquaque quae eruptionis causa paraverat profert.
**(塁壁を)突破するために準備していたほかのものを運び出した。
*② Pugnatur uno tempore omnibus locis atque omnia temptantur;
**一時にあらゆる場所で戦われて、あらゆることが試みられた。
*quae minime visa pars firma est, huc concurritur.
**あまり堅固ではないと思われる部分、ここへ襲いかかった。
*③ Romanorum manus tantis munitionibus distinetur
**ローマ人の手勢は、これほどの(長大な)塁壁により離して置かれていて、
*nec facile pluribus locis occurrit.
**より多くの場所には容易に駆け付けられなかった。
*④ Multum ad terrendos nostros valet clamor qui post tergum pugnantibus exstitit,
**戦っている者たちの背後で生じた雄叫びは、我が方(ローマ勢)を怖れさせるために大いに力があった。
*quod suum periculum in aliena vident virtute<ref>virtute「武勇」 はβ系写本の記述で、α系写本では salute「安全」 となっている。</ref> constare;
**というのは、自分たち(ローマ勢)の危険が他人(ガッリア勢)の武勇に依拠していると思ったから。
*omnia enim plerumque, quae absunt, vehementius hominum mentes perturbant.
**なぜなら(そこに)不在であるものすべてはたいてい、人間の心を激しく混乱させるものであったからである。
===85節===
'''ウェルカッスィウェッラウヌスが急所の丘を攻める'''
*① Caesar idoneum locum nactus
**カエサルは適当な場所を得て,
*quid quaque in<ref>quaque in はβ系写本の記述で、α系写本では qua ex となっている。</ref> parte geratur cognoscit;
*何が各方面でなされているのかを認識した。
*laborantibus submittit.
**苦戦している者たちに(援兵を)派遣した。
*② Utrisque ad animum occurrit unum esse illud tempus, quo maxime contendi conveniat:
**双方にとって、最も雌雄を決するべきはこの時のみであるということが、心に生じた。
*③ Galli, nisi perfregerint munitiones, de omni salute desperant;
**ガッリア人たちは、(ローマ人の)塁壁を突破しない限り、あらゆる身の安全に絶望することになる。
*Romani, si rem obtinuerint, finem laborum omnium exspectant.
**ローマ人は、もし事を成就したら、すべての労苦の終わるということを期待した。
*④ Maxime ad superiores munitiones laboratur, quo [[w:la:Vercassivellaunus|Vercassivellaunum]] missum demonstravimus.
**ウェルカッスィウェッラウヌスが派遣されたと既述した、より高い塁壁の辺りで(ローマ勢は)とりわけ苦戦した。
*Iniquum loci ad declivitatem fastigium magnum habet momentum.
**けわしい地形の不利な傾斜が(ローマ勢にとって)大きな影響力を持った。
*⑤ Alii tela coniciunt, alii testudine facta subeunt;
**(ガッリア勢の)ある者は飛び道具を投げやって、ある者は[[w:テストゥド|亀甲陣形]]を形成して突き進んだ。
*defatigatis invicem integri succedunt.
**疲労させられた者たちに対しては、新手の者たちが交代した。
*⑥ Agger ab universis in munitionem coniectus
**土が総勢により(ローマ人の)塁壁に投じられて、
*et ascensum dat Gallis
**ガッリア人たちに登り道を与えもしたし、
*et ea, quae in terra occultaverant Romani, contegit;
**ローマ人たちが地中に隠しておいたもの(障害物)を埋め込んでしまった。
*nec iam arma nostris nec vires suppetunt.
**我が方(ローマ勢)には、もはや武器も活力も十分になかった。
===86節===
'''危急存亡の秋、両軍の苦闘'''
*① His rebus cognitis
**これらの事態を知って、
*Caesar [[w:la:Titus Labienus|Labienum]] cum cohortibus sex subsidio laborantibus mittit;
**カエサルは、[[w:ティトゥス・ラビエヌス|ラビエーヌス]]を6個<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>とともに援兵として苦戦している者たちへ派遣した。
*② imperat, si sustinere non possit<ref>possit はχ系・B・M・S・β系写本の記述で、L・N写本では posset となっている。</ref>, deductis cohortibus eruptione pugnaret<ref>pugnaret はα系写本の記述で、β系写本では pugnet となっている。</ref>;
**もし(塁壁の防衛が)持ちこたえられなかったならば、諸大隊を引率して突撃によって戦うように、と命令していた。
*id nisi necessario ne faciat.
**それは、やむをえないのでなければ行なわないように(と命じていた)。
*③ Ipse adit reliquos, cohortatur ne labori succumbant;
**(カエサル)自身は、ほかの者たちを訪れて、労苦に屈服しないようにと鼓舞した。
*omnium superiorum dimicationum fructum in eo die atque hora docet consistere.
**これまでのあらゆる奮闘の結実がこの日、この時にかかっていることを説いた。
*④ Interiores desperatis campestribus locis propter magnitudinem munitionum
**(アレスィアに包囲されている)内側の者たちは、塁壁の大規模さのために、平坦な地点(での突破)を断念して、
*loca praerupta ex ascensu temptant;
**けわしい場所を登り坂から攻撃してみた。
*huc ea quae paraverant conferunt.
**ここに、準備していたものを運び集めた。
*⑤ Multitudine telorum ex turribus propugnantes deturbant,
**たくさんの飛び道具によって、防戦している者たちを櫓から駆逐した。
*aggere et cratibus fossas explent,
**土砂や柴で堀を埋めて、
*falcibus vallum ac loricam rescindunt.
**破城鎌によって防柵や胸壁を切り裂いた。
**:<span style="color:#009900;">(訳注:falx「破城鎌」については、[[ガリア戦記 第5巻#42節|第5巻42節]]を参照。)</span>
===87節===
'''カエサルの救援、ラビエーヌスの作戦'''
*① Mittit primo<ref>primo はφ系・ρ系写本の記述で、χ系・π系写本では primum となっている。</ref> [[w:la:Decimus Iunius Brutus Albinus|Brutum adulescentem]] cum cohortibus Caesar,
**カエサルは、初めに[[w:デキムス・ユニウス・ブルトゥス・アルビヌス|青年ブルトゥス]]を諸<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>とともに派遣して、
**:<span style="color:#009900;">(訳注:デキムス・ブルトゥスには[[ガリア戦記 第3巻#14節|第3巻14節]]で艦隊を、本巻[[#9節|9節]]②項では騎兵隊を指揮させている。)</span>
*post cum aliis C.(Gaium) Fabium legatum;
**後に副官のガイウス・ファビウスをほかの隊とともに(派遣した)。
*postremo ipse, cum vehementius pugnaretur,
**最後には(カエサル)自身が、激しく戦われていたので、
*integros subsidio adducit.
**新手の者たちを援兵として率いて行った。
*② Restituto proelio ac repulsis hostibus
**戦況が回復され、敵方が撃退されると、
*eo quo Labienum miserat contendit;
**ラビエーヌスを派遣していたところに急いだ。
*cohortes IIII(quattuor) ex proximo castello deducit,
**近隣の砦から4個歩兵大隊を引き出して、
*equitum partem se<ref>se はβ系写本の記述で、α系写本にはない。</ref> sequi,
**[[w:騎兵|騎兵]]のある一部には、自らに随行することを、
*partem circumire exteriores munitiones et ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> tergo hostes adoriri iubet.
**別の一部には、外側の塁壁を取り囲んで、敵方を背後から襲撃することを命じた。
*③ Labienus, postquam neque aggeres neque fossae vim hostium sustinere poterant,
**ラビエーヌスは、土塁も堀も敵方の武力に持ちこたえることができなかった後で、
*coactis una XL(quadraginta) cohortibus, quas ex proximis praesidiis deductas fors obtulit,
**近隣の宿営地から、はからずも引き出しておいた40個歩兵大隊を集結させて、
**:<span style="color:#009900;">(訳注:この数は、写本によって異なり、モイゼルらは undecim「11個」と提案している。)</span>
*Caesarem per nuntios facit certiorem, quid faciendum existimet.
**何がなされるべきと考えたのかを、カエサルに伝令を通じて報告した。
*Accelerat Caesar, ut proelio intersit.
**カエサルは、戦闘(の場)に居合わせるように急いで行った。
===88節===
'''雌雄決し、ガッリア来援軍が敗走'''
*① Eius adventu ex colore vestitus cognito, quo insigni in proeliis uti consuerat,
**彼(カエサル)の到来が、(彼が)戦闘において目印として用いるのが常であった衣服の色から認識され、
**:<span style="color:#009900;">(訳注:カエサルは、真紅の外套を着用していたようである。)</span>
*turmisque equitum et cohortibus visis quas se sequi iusserat,
**(カエサルが)自らに随行することを命じていた諸<ruby><rb>[[w:騎兵|騎兵]]小隊</rb><rp>(</rp><rt>トゥルマ</rt><rp>)</rp></ruby>や諸<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>が望見されて、
*ut de locis superioribus haec declivia et devexa cernebantur,
**(ウェルカッスィウェッラウヌスらが派遣された)高地から、これらの斜面や急坂が見分けられたので、
*hostes proelium committunt.
**敵方(ガッリア勢)は戦端を開いた。
*② Utrimque clamore sublato
**(ガッリア来援軍とアレスィア籠城軍の)双方から雄叫びが上げられて、
*excipit rursus ex vallo atque omnibus munitionibus clamor.
**さらに、防柵やすべての塁壁から(ローマ勢の)雄叫びが続いた。
*Nostri omissis pilis gladiis rem gerunt.
**我が方(ローマ勢)は<ruby><rb>[[w:ピルム|投槍]]</rb><rp>(</rp><rt>ピルム</rt><rp>)</rp></ruby>を放棄して、<ruby><rb>[[w:グラディウス (武器)|長剣]]</rb><rp>(</rp><rt>グラディウス</rt><rp>)</rp></ruby>で合戦した。
*③ Repente post tergum equitatus cernitur;
**不意に(ガッリア勢の)背後に(ローマ勢の)騎兵隊が見分けられた。
**:<span style="color:#009900;">(訳注:87節②項で、カエサルは騎兵隊に外壁を迂回して敵を背後から襲撃するように命じていた。)</span>
*cohortes aliae adpropinquant.
**別の諸<ruby><rb>歩兵大隊</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>も接近して来た。
*Hostes terga vertunt;
**敵方(ガッリア勢)は、(ローマ勢に)背を向けた。
*fugientibus equites occurrunt.
**逃げる者たち(ガッリア勢)を(ローマ勢の)騎兵たちが追撃した。
*Fit magna caedes.
**大虐殺が起こった。
*④ Sedullus, dux et princeps Lemovicum, occiditur;
**レモウィケス族の将帥で領袖であるセドゥッルスが斃された。
*[[w:la:Vercassivellaunus|Vercassivellaunus]] Arvernus vivus in fuga comprehenditur;
**[[w:アルウェルニ族|アルウェルニー族]]のウェルカッスィウェッラウヌスは逃亡中に生きたまま捕らえられた。
*signa militaria LXXIIII(septuaginta quattuor) ad Caesarem referuntur;
**(ガッリア勢の)74本の軍旗がカエサルのところへ運んで来られた。
*pauci ex tanto numero se incolumes<ref>se incolumes はα系写本の記述で、β系写本では incolumes se となっている。</ref> in castra recipiunt.
**これほどの兵数のうち、わずかな者たち(だけ)が無傷のまま陣営に退却した。
*⑤ Conspicati ex oppido caedem et fugam suorum
**(アレスィアの)[[w:オッピドゥム|城塞都市]]から味方の虐殺や逃亡を視認した者たちは、
*desperata salute copias a munitionibus reducunt.
**身の安全に絶望して、軍勢を塁壁から(城塞都市に)呼び戻した。
*⑥ Fit protinus hac re audita ex castris Gallorum fuga.
**この事態が聞かれるとただちに、(来援に来ていた)ガッリア人たちの陣営から逃亡が生じた。
*Quodnisi crebris subsidiis ac totius diei labore milites essent defessi,
**もし、たびたびの(味方への)支援や一日中の働きにより兵士たちが疲れ果てていなかったならば、
*omnes hostium copiae deleri potuissent.
**敵方(ガッリア来援軍)の全軍勢が壊滅させられることが可能であっただろう。
*⑦ De media nocte missus equitatus novissimum agmen consequitur;
**真夜中の頃に、派遣されていた(ローマ勢の)騎兵隊が(ガッリア勢の)後衛に追いついて、
*magnus numerus capitur atque interficitur;
**(ガッリア勢の)大多数が捕らえられ、かつ殺戮された。
*reliqui ex fuga in civitates discedunt.
**(ガッリア来援軍の)残りの者たちは、逃亡して諸部族のところに逃げのびた。
==ガッリア同盟軍主力の降伏==
===89節===
[[画像:Vercingétorix se rend à César 1886 HPMotte.jpg|thumb|right|330px|「カエサルの陣営に投降するウェルキンゲトリークス」<br>“Vercingétorix se rendant au camp de César”、<br>アンリ=ポール・モット([[w:fr:Henri-Paul_Motte|Henri-Paul Motte]])画、1886年。<br>[[w:ル・ピュイ=アン=ヴレ|ル・ピュイ=アン=ヴレ]]のクロザティエ美術館([[w:fr:Musée Crozatier au Puy-en-Velay|Musée Crozatier]] au [[w:fr:Le Puy-en-Velay|Puy-en-Velay]])蔵。]]
[[画像:Lionel Royer - Vercingetorix Throwing down His Weapons at the feet of Julius Caesar.jpg|thumb|right|330px|「ウェルキンゲトリークスが彼の武器をユリウス・カエサルの足元に投げ捨てる」“Vercingétorix jette ses armes aux pieds de Jules César”、リオネル=ノエル・ロワイエ([[w:fr:Lionel Royer|Lionel-Noël Royer]])
画、1899年。[[w:ル・ピュイ=アン=ヴレ|ル・ピュイ=アン=ヴレ]]のクロザティエ美術館([[w:fr:Musée Crozatier au Puy-en-Velay|Musée Crozatier]] au [[w:fr:Le Puy-en-Velay|Puy-en-Velay]])蔵。]]
[[画像:Coin_Vercingetorix.jpg|thumb|right|300px|ローマがBC48年に発行した[[w:デナリウス|デナリウス銀貨]]。ウェルキンゲトリークスの横顔が刻まれているとも言われ、[[w:マメルティヌスの牢獄|トゥッリアヌム牢獄]]に虜囚となっているかつてのガッリアの盟主を見せしめにしたものとも考えられる。彼はBC46年に処刑されたが、カエサルもBC44年に暗殺された。]]
'''ウェルキンゲトリークスとアレスィア籠城軍の降伏'''
*① Postero die [[w:la:Vercingetorix|Vercingetorix]] concilio convocato
**(来援軍が敗走した)翌日に、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は会合を召集して、
*id bellum se suscepisse<ref>se suscepisse はα系写本の記述で、β系写本では suscepisse se となっている。</ref>
**この戦争を引き受けたことは
*non suarum necessitatum<ref>necessitatum はχ系・S・L・N・β系写本の記述で、B・M写本では necessitatium となっている。</ref>, sed communis libertatis causa demonstrat,
**自らの(野心の)必要性からではなく、(ガッリア)共通の自由のためだ、と明言した。
*② et quoniam sit fortunae cedendum,
**運命には従うべきものなのであるから、
*ad utramque rem se illis offerre,
**(敗軍の将として、以下の)どちらの事にも、自ら(の処遇)を彼ら(ガッリア人たち)に委ねよう。
*seu morte sua Romanis satisfacere
**あるいは(ウェルキンゲトリークス)自らの死によってローマ人たちに償うこと(を欲する)にせよ、
*seu vivum tradere velint.
**あるいは生きたまま(ローマ人たちに)引き渡すことを欲するにせよ、と。
*③ Mittuntur de his rebus ad Caesarem legati.
**これらの事柄について、カエサルのところへ使節たちが遣わされた。
*Iubet arma tradi, principes produci.
**(カエサルは)武器が引き渡されること、領袖たちが連行されて来ることを命じた。
*④ Ipse in munitione pro castris consedit;
**(カエサル)自身は、陣営の前の塁壁のところに腰掛けた。
*eo duces producuntur.
**そこに(アレスィアに籠城していた)将帥たちが連行されて来た。
*Vercingetorix deditur, arma proiciuntur.
**ウェルキンゲトリークスが引き渡されて、武器が投げ捨てられた。
*⑤ Reservatis [[w:la:Haedui|Haeduis]] atque Arvernis,
**(カエサルは)[[w:ハエドゥイ族|ハエドゥイー族]]と[[w:アルウェルニ族|アルウェルニー族]](の将兵たち)を保持しておいた。
*si per eos civitates reciperare<ref>reciperare はχ系・B<sup>1</sup>・S・U写本の記述で、B<sup>c</sup>・M・L・N・π系・R写本では recuperare となっている。</ref> posset,
**彼らによって両部族国家を(同盟国として)回復できないだろうかと(考えたのだ)。
*ex reliquis captivis toto exercitui capita singula praedae nomine distribuit.
**残りの(諸部族の)捕虜たちから、全軍(のローマ人)に一名ずつを戦利品という名目で分配した。
===90節===
[[画像:Autun_porte_Saint-André.JPG|thumb|right|300px|[[w:オータン|オータン市]]に遺されたローマ時代からの聖アンドレ門。[[w:ビブラクテ|ビブラクテ]]を首邑としていた[[w:ハエドゥイ族|ハエドゥイー族]]は、ローマ帝政初期に東方の平地に移り、「[[w:アウグストゥス|アウグストゥス]]の砦」を意味するアウグストドゥーヌム([[w:la:Augustodunum|Augustodunum]])を建設して首邑とした。これが現在のオータン(Autun)となっている。]]
[[画像:Clermont_vu_de_Montjuzet.JPG|thumb|right|300px|[[w:クレルモン=フェラン|クレルモン=フェラン市]]の街並み。ローマに降伏した[[w:アルウェルニ族|アルウェルニー族]]は、後に首邑のゲルゴウィアを廃城とされ、北方の平野にあるネメトゥム(Nemetum)に移住させられた。帝政初期に[[w:アウグストゥス|アウグストゥス]]に由来するアウグストネメトゥム([[w:la:Augustonemetum|Augustonemetum]])に改称して、[[w:クレルモン教会会議|クレルモン教会会議]]が開かれるなど宗教的中心地として栄え、現在のクレルモン=フェランに至る。]]
'''ハエドゥイー族とアルウェルニー族の降伏、諸軍団の冬営'''
*① His rebus confectis in [[w:la:Haedui|Haeduos]] proficiscitur;
**これらの事が成し遂げられて、(カエサルは)[[w:ハエドゥイ族|ハエドゥイー族]]のところに出発した。
*civitatem recipit.
**同部族を(同盟国として)回復した。
*② Eo legati ab Arvernis missi:
**そこに、[[w:アルウェルニ族|アルウェルニー族]]から使節たちが遣わされて来て、
*quae imperaret, se facturos pollicentur.
**自分たちは(カエサルが)命令したことを行なうであろう、と約束した。
*Imperat magnum numerum obsidum.
**(カエサルは)多数の人質(の供出)を命令した。
*③ Legiones in hiberna mittit.
**(カエサルは)諸[[w:ローマ軍団|軍団]]を冬営地に派遣した。
*Captivorum circiter XX(viginti) milia Haeduis Arvernisque reddit.
**捕虜たち約2万人をハエドゥイー族とアルウェルニー族に返還した。
*④ [[w:la:Titus Labienus|T.<small>(Titum)</small> Labienum]] duabus cum<ref>duabus cum はχ系・B・M・S写本の記述で、L・N・β系写本では cum duabus となっている。</ref> legionibus et equitatu in Sequanos proficisci iubet;
**[[w:ティトゥス・ラビエヌス|ティトゥス・ラビエーヌス]]を2個軍団および[[w:騎兵|騎兵隊]]とともにセクアニ族のところに出発することを命じた。
*huic M.<small>(Marcum)</small> Sempronium Rutilum attribuit.
**彼には、マルクス・[[w:センプロニウス氏族|センプロニウス]]・ルティルスを付属させた。
*⑤ C.<small>(Gaium)</small> Fabium legatum et L.<small>(Lucium)</small> Minucium Basilum cum legionibus duabus in Remis conlocat,
**副官 ガーイウス・ファビウスとルキウス・ミヌキウス・バスィルスを2個軍団とともにレーミー族のところに配置した。
**:<span style="color:#009900;">(訳注:バスィルスは[[ガリア戦記 第6巻#29節|第6巻29節]]で騎兵隊を指揮した。)</span>
*ne quam ab<ref>ab はφ系写本の記述で、χ系・β系写本では a となっている。</ref> finitimis Bellovacis calamitatem accipiant.
**(レーミー族が)近隣のベッロウァキ族から何らかの災禍を蒙らないようにしたのである。
*⑥ C.<small>(Gaium)</small> Antistium Reginum in Ambivaretos,
**ガーイウス・アンティスティウス・レーギーヌスをアンビウァレティ族のところに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''[[w:fr:Caius Antistius Reginus|Gaius Antistius Reginus]]'' は[[ガリア戦記_第6巻#1節|第6巻1節]]、[[#83節|本巻83節]]で既出。)</span>
*T.<small>(Titum)</small> Sextium in Bituriges,
**ティトゥス・セクスティウスをビトゥリゲース族のところに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[w:en:Titus Sextius|Titus Sextius]] も[[ガリア戦記_第6巻#1節|第6巻1節]]で既出。第6巻の年からカエサルの副官、<br> [[w:三頭政治#第二回三頭政治|第二回三頭政治]]では[[w:アフリカ属州|アフリカ属州]]の総督を務め、[[w:マルクス・アエミリウス・レピドゥス|レピドゥス]]に引き継ぐ。)
*C.<small>(Gaium)</small> Caninium Rebilum in Rutenos cum singulis legionibus mittit.
**ガーイウス・カニニウス・レビルスをルテーニー族のところに、それぞれ1個軍団とともに派遣した。
*⑦ [[w:la:Quintus Tullius Cicero|Q.<small>(Quintum)</small> Tullium Ciceronem]] et P.<small>(Publium)</small> Sulpicium
**[[w:クィントゥス・トゥッリウス・キケロ|クィーントゥス・トゥッリウス・キケロー]]とプーブリウス・スルピキウス(・ルーフス)を
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:カエサルの副官 ''[[w:en:Sulpicia_gens#Sulpicii_Rufi|Publius Sulpicius Rufus]] は、<br> [[ガリア戦記_第4巻#22節|第4巻22節]]で既述。[[内乱記_第1巻#74節|『内乱記』第1巻74節]]でも言及される。<br> [[w:紀元前48年|BC48年]]に[[w:プラエトル|法務官]]、[[w:紀元前42年|BC42年]]に[[w:ケンソル|監察官]]に任官する。)</span>
*[[w:la:Cabillonum|Cavilloni]]<ref>Cavilloni はβ系写本の記述で、α系写本などでは Cabilloni となっている。</ref> et [[w:la:Matisco|Matiscone]] in Haeduis ad Ararim rei frumentariae causa conlocat.
**ハエドゥイー族のところのアラル川沿いのカウィッロヌムとマティスコに、糧秣調達のために配置した。
**:<span style="color:#009900;">(訳注:カウィッロヌムは現在の[[w:シャロン=スュル=ソーヌ|シャロン=スュル=ソーヌ]]、マティスコは現在の[[w:マコン|マコン]]。)</span>
*Ipse [[w:la:Bibracte|Bibracte]] hiemare constituit.
**(カエサル)自身は、[[w:ビブラクテ|ビブラクテ]]で冬営することを決めた。
*⑧ His litteris<ref>his litteris「これらが書簡により(知られると)」はα系写本の記述で、β系写本では huius anni rebus「この年の事績が(知られると)」と異なっており、huius anni rebus <ex Caesaris> litteris「この年の事績が<カエサルの>書簡により(知られると)」 などと修正提案されている。」</ref> cognitis Romae dierum viginti supplicatio redditur.
**これらが(カエサルの)書簡により知られると、ローマで20日間の感謝祭が許された。
**:<span style="color:#009900;">(訳注:[[ガリア戦記 第2巻#35節|第2巻35節]]では、かつてない15日間の感謝祭が決議されたが、今回はそれを超えるものであった。)</span>
----
*<span style="background-color:#99ff99;">「ガリア戦記 第7巻」了。「[[ガリア戦記 第8巻]]」へ続く。</span>
==脚注==
<references />
==参考リンク==
'''ウィキペディア英語版など'''
*'''[[w:en:Category:Tribes of ancient Gaul|Category:Tribes of ancient Gaul]]'''('''[[w:Category:ガリアの部族|Category:ガリアの部族]]''')- [[w:fr:Catégorie:Personnalité gauloise|fr:Catégorie:Personnalité gauloise]]
**[[w:en:Allobroges|Allobroges]](アッロブロゲス族)
**'''[[w:en:Arverni|Arverni]]'''('''[[w:アルウェルニ族|アルウェルニー族]]''')
**:'''[[w:en:Vercingetorix|Vercingetorix]]'''('''[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]''')- '''<span style="background-color:#ffff00;">[[w:la:Vercingetorix|la:Vercingetorix]]</span>'''
**:[[w:fr:Celtillos|fr:Celtillos]](ケルティッルス);ウェルキンゲトリークスの父
**:[[w:fr:Gobannitio|fr:Gobannitio]](ゴバンニティオ);ウェルキンゲトリークスのおじ
**:[[w:en:Vercassivellaunos|Vercassivellaunos]](ウェルカッスィウェッラウヌス) - <span style="background-color:#ffff00;">[[w:la:Vercassivellaunus|la:Vercassivellaunus]]</span>
**:Critognatus(クリトグナトゥス)- <span style="background-color:#ffff00;">[[w:la:Critognatus|la:Critognatus]]</span>
**[[w:en:Atrebates|Atrebates]](アトレバテス族)
**:[[w:en:Commius|Commius]]([[w:コンミウス|コンミウス]]):ガッリアとブリタンニアにおけるアトレバテス族の王
**[[w:en:Aedui|Aedui]]([[w:ハエドゥイ族|ハエドゥイー族]])- '''<span style="background-color:#ffff00;">[[w:la:Haedui|la:Haedui]]</span>''';ガッリア中部の有力部族 - [[w:fr:Éduens|fr:Éduens]] <[[w:fr:Catégorie:Éduens|fr:Catégorie:Éduens]]
**:[[w:en:Convictolitavis|Convictolitavis]](コンウィクトリタウィス)- [[w:fr:Convictolitavis|fr:Convictolitavis]]
**:[[w:fr:Cotos|fr:Cotos]](コトゥス)
**:[[w:fr:Litaviccos|fr:Litaviccos]](リタウィックス)
**:エポレドリクス - <span style="background-color:#ffff00;">[[w:la:Eporedorix|la:Eporedorix]]</span>
**:ウィリドマルス
**[[w:en:Andes (Andecavi)|Andes (Andecavi)]](アンデス族);現在の[[w:アンジェ|アンジェ]](Angers)周辺の部族
**[[w:en:Aulerci|Aulerci]](アウレルキ族);現在のフランス北西部に居住していた部族連合
**[[w:en:Bellovaci|Bellovaci]](ベッロウァキ族)
**[[w:en:Bituriges|Bituriges]](ビトゥリゲース族);現在の[[w:ブールジュ|ブールジュ]](Bourges)周辺の部族。[[#5節|5節]]でガッリア同盟軍に寝返る。
**[[w:en:Boii|Boii]](ボイイ族)- <span style="background-color:#ffff00;">[[w:la:Boii|la:Boii]]</span>;[[w:ボヘミア|ボヘミア]]([[w:la:Bohemia|la:Bohemia]])から移住してきた部族
**Cadurci(カドゥルキー族);現在の[[w:カオール|カオール]](Cahors)周辺の部族 - [[w:fr:Cadurques|fr:Cadurques]]
**:[[w:en:Lucterius|Lucterius]](ルクテリウス);カドゥルキー族の指導者、[[#5節|5節]]を参照。
**[[w:en:Carnutes|Carnutes]](カルヌーテース族);現在の[[w:シャルトル|シャルトル]](Chartres)周辺の部族
**[[w:en:Gabali|Gabali]](ガバリ族)
**Haedui ⇒ Aedui
**[[w:en:Helvii|Helvii]](ヘルウィイ族);ガッリア南部にいたローマの同盟部族
**[[w:en:Lemovices|Lemovices]](レモウィケス族);現在の[[w:リモージュ|リモージュ]](Limoges)周辺の部族
**:[[w:en:Sedullos|Sedullos]](セドゥッルス Sedullus);レモウィケス族の将帥・領袖
**[[w:en:Lingones|Lingones]](リンゴネス族)- [[w:fr:Lingons|fr:Lingons]];現在のラングル([[w:en:Langres|Langres]])周辺の部族
**[[w:en:Mandubii|Mandubii]](マンドゥビイ族);[[w:アレシア|アレスィア]]周辺にいた部族
**Nitiobroges(ニティオブロゲス族)- [[w:fr:Nitiobroges|fr:Nitiobroges]]
**:[[w:fr:Ollovico|fr:Ollovico]](オッロウィコ);ローマ元老院から友人と呼ばれた王
**:[[w:fr:Teutomatos|fr:Teutomatos]](テウトマトゥス);王で、オッロウィコの子
**[[w:en:Parisii (Gaul)|Parisii (Gaul)]]([[w:パリシイ族|パリスィイ族]]);現在の[[w:パリ|パリ]]周辺の部族
**[[w:en:Pictones|Pictones]](ピクトネス族);現在の[[w:ポワチエ|ポワティエ]](Poitiers)周辺の部族
**[[w:en:Remi|Remi]](レーミー族)
**[[w:en:Ruteni|Ruteni]](ルテーニー族)
**[[w:en:Segusiavi|Segusiavi]](セグスィアウィ族)
**[[w:en:Senones|Senones]](セノネース族)- <span style="background-color:#ffff00;">[[w:la:Senones|la:Senones]]</span>;現在の[[w:サン (ヨンヌ県)|サン]](Sens)周辺の部族
***[[w:en:Acco|Acco]](アッコー)
**[[w:en:Sequani|Sequani]](セクアニ族)
**[[w:en:Treveri|Treveri]](トレウェリ族)
**[[w:en:Turones|Turones]](トゥロニ族/トゥロネス族);現在の[[w:トゥール (アンドル=エ=ロワール県)|トゥール]](Tours)周辺の部族
**[[w:en:Volcae|Volcae]](ウォルカエ族)
*<span style="background-color:#ffff00;">[[w:la:Germani|la:Germani]]</span>(ゲルマニア人)
*'''ガッリアの地名''' - '''[[w:la:Categoria:Urbes Franciae|la:Categoria:Urbes Franciae]]'''(フランスの都市)
**<span style="background-color:#ffff00;">[[w:la:Agedincum|la:Agedincum]]</span>(アゲディンクム);現在の[[w:サンス|サンス]]([[w:en:Sens|Sens]])
**[[w:en:Alesia_(city)|Alesia (city)]]([[w:アレシア|アレスィア]])- <span style="background-color:#ffff00;">[[w:la:Alesia|la:Alesia]]</span>:現在のアリーズ=サント=レーヌ([[w:fr:Alise-Sainte-Reine|fr:Alise-Sainte-Reine]])
**:'''[[w:en:Battle_of_Alesia|Battle of Alesia]]'''('''[[w:アレシアの戦い|アレスィアの戦い]]''')- '''<span style="background-color:#ffff00;">[[w:la:Alesiae_pugna|la:Alesiae pugna]]</span>'''
**[[w:en:Avaricum|Avaricum]] ⇒ [[w:en:Bourges|Bourges]](アウァーリクム - 現在の[[w:ブールジュ|ブールジュ]])- <span style="background-color:#ffff00;">[[w:la:Avaricum_Biturigum|la:Avaricum Biturigum]]</span>
**[[w:en:Bibracte|Bibracte]]([[w:ビブラクテ|ビブラクテ]]) - <span style="background-color:#ffff00;">[[w:la:Bibracte|la:Bibracte]]</span>:[[w:ハエドゥイ族|ハエドゥイー族]]の首邑。現在のボーヴレ山([[w:fr:Mont_Beuvray|fr:Mont Beuvray]])の山頂に位置していた。
**<span style="background-color:#ffff00;">[[w:la:Cabillonum|la:Cabillonum]]</span>(カビッロヌム/カウィッロヌム)- 現在の[[w:シャロン=スュル=ソーヌ|シャロン=スュル=ソーヌ]]([[w:fr:Chalon-sur-Saône|fr:Chalon-sur-Saône]])
**[[w:en:Cenabum|Cenabum]](ケナブム)- 現在の[[w:オルレアン|オルレアン]] - [[w:fr:Cenabum|fr:Cenabum]]
**<span style="background-color:#ffff00;">[[w:la:Decetia|la:Decetia]]</span>(デケティア)- [[w:en:Decize|en:Decize]] - 現在のドスィーズ(ドシーズ)([[w:fr:Decize|fr:Decize]])
**[[w:en:Gergovie|Gergovie]](ゲルゴウィア)- <span style="background-color:#ffff00;">[[w:la:Gergovia|la:Gergovia]]</span>
**:'''[[w:en:Battle of Gergovia|Battle of Gergovia]]'''('''[[w:ゲルゴウィアの戦い|ゲルゴウィアの戦い]]''')- '''<span style="background-color:#ffff00;">[[w:la:Obsidio Gergoviensis|la:Obsidio Gergoviensis]]</span>'''
**[[w:en:Gorgobina|Gorgobina]](ゴルゴビナ);ボイイ族が定住した城塞都市。現在のサン=パリズ=ル=シャテル([[w:en:Saint-Parize-le-Châtel|Saint-Parize-le-Châtel]])またはラ・ゲルシュ([[w:en:La Guerche|La Guerche]])
**'''[[w:en:Lutetia|Lutetia]]'''('''[[w:ルテティア|ルテティア]]'''/ルテキア);[[w:パリシイ族|パリスィイ族]]の首邑、現在の[[w:パリ|パリ市]] - <span style="background-color:#ffff00;">[[w:la:Lutetia|la:Lutetia]]</span>
**<span style="background-color:#ffff00;">[[w:la:Matisco|la:Matisco]]</span>(マティスコ);現在の[[w:マコン|マコン]](Mâcon)
**Metlosenum(メトロセドゥム/メティオセドゥム/メロドゥーヌム);現在の[[w:ムラン|ムラン]] - <span style="background-color:#ffff00;">[[w:la:Melodunum|la:Melodunum]]</span>
**[[w:en:Narbonne|Narbonne]]([[w:ナルボンヌ|ナルボンヌ]];ラテン名ナルボ)- <span style="background-color:#ffff00;">[[w:la:Narbo|la:Narbo]]</span>;ガッリア南部・地中海岸のローマの拠点
**[[w:en:Noviodunum|Noviodunum]](ノウィオドゥーヌム)- 現在のヌン=スュル=ブーヴロン([[w:en:Neung-sur-Beuvron|Neung-sur-Beuvron]])と推定されている。従来はローヌ川沿いの[[w:サンセール|サンセール]]([[w:en:Sancerre|Sancerre]])が有力だった
**[[w:en:Vellaunodunum|Vellaunodunum]](ウェッラウノドゥーヌム)- [[w:fr:Vellaunodunum|fr:Vellaunodunum]];現在のモンタルジ([[w:en:Montargis|Montargis]])やボーヌ=ラ=ロランド([[w:en:Beaune-la-Rolande|Beaune-la-Rolande]])、シャトー=ランドン([[w:en:Château-Landon|Château-Landon]])などと推定されている
**[[w:en:Vienne, Isère|Vienne, Isère]](ヴィエンヌ;ラテン名ウィエンナ)- [[w:la:Vienna|la:Vienna]]
*'''ガッリアの地形'''
**Cevenna(ケウェンナ山地):現在のセヴェンヌ山地([[w:fr:Cévennes|fr:Cévennes]]・[[w:en:Cévennes|Cévennes]])
**<span style="background-color:#ffff00;">[[w:la:Elaver|la:Elaver]]</span>(エラウェル川):現在の[[w:アリエ川|アリエ川]]([[w:fr:Allier (rivière)|fr:Allier (rivière)]])
**<span style="background-color:#ffff00;">[[w:la:Liger|la:Liger]]</span>(リゲル川):現在の[[w:ロワール川|ロワール川]]([[w:fr:Loire (fleuve)|fr:Loire (fleuve)]])
**<span style="background-color:#ffff00;">[[w:la:Rhenus|la:Rhenus]]</span>(レヌス川):現在の[[w:ライン川|ライン川]]([[w:fr:Rhin|fr:Rhin]])
**<span style="background-color:#ffff00;">[[w:la:Rhodanus|la:Rhodanus]]</span>(ロダヌス川):現在の[[w:ローヌ川|ローヌ川]]([[w:fr:Rhône|fr:Rhône]])
**<span style="background-color:#ffff00;">[[w:la:Sequana|la:Sequana]]</span>(セクアナ川):現在の[[w:セーヌ川|セーヌ川]]([[w:fr:Seine|fr:Seine]])
*ローマ勢
**[[w:en:Mark_Antony|Mark Antony]]([[w:マルクス・アントニウス|マルクス・'''アントニウス''']])- <span style="background-color:#ffff00;">[[w:la:Marcus_Antonius|la:Marcus Antonius]]</span>
**[[w:en:Decimus_Junius_Brutus_Albinus|Decimus Junius '''Brutus''' Albinus]]([[w:デキムス・ユニウス・ブルトゥス・アルビヌス|デキムス・ユニウス・'''ブルトゥス'''・アルビヌス]])- <span style="background-color:#ffff00;">[[w:la:Decimus_Iunius_Brutus_Albinus|Decimus Iunius Brutus Albinus]]</span>([[#9節|9節]])
**[[w:en:Quintus Tullius Cicero|Quintus Tullius '''Cicero''']]([[w:クィントゥス・トゥッリウス・キケロ|クィントゥス・トゥッリウス・'''キケロ''']])- <span style="background-color:#ffff00;">[[w:la:Quintus Tullius Cicero|la:Quintus Tullius Cicero]]</span>:カエサルの副官
**Gaius '''Fabius'''(ガイウス・'''ファビウス'''):カエサルの副官
**[[w:en:Titus Labienus|Titus '''Labienus''']]([[w:ティトゥス・ラビエヌス|ティトゥス・'''ラビエーヌス''']])- <span style="background-color:#ffff00;">[[w:la:Titus Labienus|la:Titus Labienus]]</span>:カエサルの副官
**[[w:en:Trebonius|'''Trebonius''']]([[w:ガイウス・トレボニウス|ガイウス・'''トレボニウス''']])- <span style="background-color:#ffff00;">[[w:la:Gaius_Trebonius|la:Gaius Trebonius]]</span>:カエサルの副官
**[[w:en:Lucius Julius Caesar IV|Lucius Julius '''Caesar''' IV]](ルキウス・ユリウス・'''カエサル'''4世):総督カエサルの副官で、4代前の高祖父を共有する。BC64年に執政官を務めた。
*イタリア方面
**[[w:en:Cisalpine_Gaul|Cisalpine Gaul]]([[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]) - [[w:la:Gallia Cisalpina|la:Gallia Cisalpina]]
**[[w:en:Populares|Populares]]([[w:ポプラレス|ポプラレス]];民衆派)- [[w:la:Populares|la:Populares]]
**:[[w:en:Publius_Clodius_Pulcher|Publius Clodius Pulcher]]([[w:プブリウス・クロディウス・プルケル|プブリウス・クロディウス・プルケル]]) - [[w:la:Publius_Clodius_Pulcher|la:Publius Clodius Pulcher]]
**[[w:en:Optimates|Optimates]]([[w:オプティマテス|オプティマテス]];元老院派)
**:[[w:en:Cicero|Cicero]]([[w:マルクス・トゥッリウス・キケロ|マルクス・トゥッリウス・キケロ]])- [[w:la:Marcus_Tullius_Cicero|la:Marcus Tullius Cicero]]
**:[[w:en:Titus_Annius_Milo|Titus Annius Milo]](ティトゥス・アンニウス・ミロ)- [[w:la:Titus_Annius_Milo|la:Titus Annius Milo]]
**:[[w:en:Pompey|Pompey]]([[w:グナエウス・ポンペイウス|グナエウス・ポンペイウス]])- [[w:la:Gnaeus_Pompeius_Magnus|la:Gnaeus Pompeius Magnus]]
1z39knrwjlfe39t34bnd0llgx9ujk40
304966
304912
2026-10-21T11:48:51Z
Linguae
449
/* 34節 */ 修整
304966
wikitext
text/x-wiki
[[Category:ガリア戦記|7]] [[Category:ガリア戦記 第7巻|*]]
[[ガリア戦記]]> '''第7巻''' >[[ガリア戦記 第7巻/注解|注解]]
<div style="text-align:center">
<span style="font-size:20px; font-weight:bold; font-variant-caps: petite-caps; color:white; background: rgb(47,94,255);background: linear-gradient(180deg, rgba(47,94,255,1) 0%, rgba(24,56,255,1) 50%, rgba(0,8,255,1) 100%);"> C IVLII CAESARIS COMMENTARIORVM BELLI GALLICI </span>
<span style="font-size:40px; font-weight:bold; color:white; background: rgb(47,94,255);background: linear-gradient(180deg, rgba(47,94,255,1) 0%, rgba(24,56,255,1) 50%, rgba(0,8,255,1) 100%);"> LIBER SEPTIMVS </span>
</div>
[[画像:Gaule -52.png|thumb|right|150px|ガリア戦記 第7巻の情勢図(BC52年)。<br>黄色の領域がローマ領。桃色が同盟部族領。]]
{| id="toc" style="align:left;clear:all;" align="left" cellpadding="5"
! style="background:#ccccff; text-align:left;" colspan="2" | ガリア戦記 第7巻 目次
|-
| style="text-align:right; font-size: 0.86em;"|
'''[[#カルヌーテース族の蜂起|カルヌーテース族の蜂起]]''':<br />
'''[[#ウェルキンゲトリークスとガッリア同盟軍の蜂起|ウェルキンゲトリークスとガッリア同盟軍の蜂起]]''':<br />
<br />
'''[[#アウァーリクム攻略戦|アウァーリクム攻略戦]]''':<br />
<br />
<br />
'''[[#ゲルゴウィア攻略戦、ハエドゥイー族の離反|ゲルゴウィア攻略戦、ハエドゥイー族の離反]]''':<br />
<br />
<br />
'''[[#ラビエーヌスのルテティア遠征|ラビエーヌスのルテティア遠征]]''':<br />
'''[[#ガッリア戦乱の拡大|ガッリア戦乱の拡大]]''':<br />
'''[[#アレスィア攻囲戦|アレスィア攻囲戦]]''':<br />
<br />
<br />
'''[[#ガッリア同盟軍主力の降伏|ガッリア同盟軍主力の降伏]]''':<br />
<br />
<br />
| style="text-align:left; font-size: 0.86em;"|
[[#1節|01節]] |
[[#2節|02節]] |
[[#3節|03節]] <br />
[[#4節|04節]] |
[[#5節|05節]] |
[[#6節|06節]] |
[[#7節|07節]] |
[[#8節|08節]] |
[[#9節|09節]] |
[[#10節|10節]] <br />
[[#11節|11節]] |
[[#12節|12節]] |
[[#13節|13節]] <br />
[[#14節|14節]] |
[[#15節|15節]] |
[[#16節|16節]] |
[[#17節|17節]] |
[[#18節|18節]] |
[[#19節|19節]] |
[[#20節|20節]] <br />
[[#21節|21節]] |
[[#22節|22節]] |
[[#23節|23節]] |
[[#24節|24節]] |
[[#25節|25節]] |
[[#26節|26節]] |
[[#27節|27節]] |
[[#28節|28節]] |
[[#29節|29節]] |
[[#30節|30節]] <br />
[[#31節|31節]] <br />
[[#32節|32節]] |
[[#33節|33節]] |
[[#34節|34節]] |
[[#35節|35節]] |
[[#36節|36節]] |
[[#37節|37節]] |
[[#38節|38節]] |
[[#39節|39節]] |
[[#40節|40節]] <br />
[[#41節|41節]] |
[[#42節|42節]] |
[[#43節|43節]] |
[[#44節|44節]] |
[[#45節|45節]] |
[[#46節|46節]] |
[[#47節|47節]] |
[[#48節|48節]] |
[[#49節|49節]] |
[[#50節|50節]] <br />
[[#51節|51節]] |
[[#52節|52節]] |
[[#53節|53節]] |
[[#54節|54節]] |
[[#55節|55節]] |
[[#56節|56節]] <br />
[[#57節|57節]] |
[[#58節|58節]] |
[[#59節|59節]] |
[[#60節|60節]] |
[[#61節|61節]] |
[[#62節|62節]] <br />
[[#63節|63節]] |
[[#64節|64節]] |
[[#65節|65節]] |
[[#66節|66節]] |
[[#67節|67節]] <br />
[[#68節|68節]] |
[[#69節|69節]] |
[[#70節|70節]] <br />
[[#71節|71節]] |
[[#72節|72節]] |
[[#73節|73節]] |
[[#74節|74節]] |
[[#75節|75節]] |
[[#76節|76節]] |
[[#77節|77節]] |
[[#78節|78節]] |
[[#79節|79節]] |
[[#80節|80節]] <br />
[[#81節|81節]] |
[[#82節|82節]] |
[[#83節|83節]] |
[[#84節|84節]] |
[[#85節|85節]] |
[[#86節|86節]] |
[[#87節|87節]] |
[[#88節|88節]] <br />
[[#89節|89節]] |
[[#90節|90節]] <br />
[[#脚注|脚注]]<br />
[[#参考リンク|参考リンク]]<br />
|}
<br style="clear:both;" />
__notoc__
==カルヌーテース族の蜂起==
===1節===
*<span style="background-color:#ffd;">[[/注解/1節]] {{進捗|00%|2025-10-26}}</span>
[[画像:Maccari-Cicero.jpg|thumb|right|250px|[[w:カティリナ弾劾演説|カティリーナ弾劾演説]]をする[[w:マルクス・トゥッリウス・キケロ|キケロー]](左中央)(チェザレ・マッカリによる19世紀のフレスコ画)。[[w:プブリウス・クロディウス・プルケル|クローディウス]]はこれを越権行為であるとして、カエサルの政敵となっていたキケローを一時的に亡命へ追い込み、ついにはキケローの友人ミローの配下によって殺害された。]]
[[画像:Pompei_Magnus_Antiquarium.jpg|thumb|right|250px|[[w:グナエウス・ポンペイウス|グナエウス・ポンペイウス]]の胸像。クローディウス殺害に伴う騒乱を収拾するべく、[[w:元老院|元老院]]によりポンペイウスが単独の[[w:執政官|執政官]]に選出され、首都ローマと本土イタリアを制圧した。一方、カエサルも属州で新たに徴兵して兵力を増した。元老院派はカエサルの勢力が強大になることを恐れて、カエサル自身から将兵を取り上げて召還すべきと主張したが、ポンペイウスは不和を避けて宥和を図った。]]
:
;首都ローマの政情不安、ガッリア人領袖たちの謀計
*<!--❶--><sup>(1)</sup> [[wikt:en:quietus#Latin|Quieta]] [[wikt:en:Gallia#Latin|Gallia]],
**[[w:ガリア|ガッリア]]が鎮定されると、
*Caesar, ut [[wikt:en:constituerat|constituerat]],
**カエサルは、定めていたように、
*in [[wikt:en:Italia#Latin|Italiam]] ad [[wikt:en:conventus#Noun|conventus]] [[wikt:en:agendus#Latin|agendos]] [[wikt:en:proficiscitur|proficiscitur]].
**イタリアに、巡回裁判を行なうために出発する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ここでいうイタリアとは、カエサルの属州であった<br> [[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]を指す。<br> カエサルは、巡回裁判を除けば、おもに[[w:ラヴェンナ|ラウェンナ]]に<br> 滞在していたと考えられる。[[内乱記_第1巻#5節|『内乱記』第1巻5節]]を参照。)</span>
:
*[[wikt:en:ibi#Latin|Ibi]] [[wikt:en:cognoscit|cognoscit]] de <P.> [[wikt:en:Clodius#Latin|Clodii]] [[wikt:en:caedes#Latin|caede]],
**そこで[[w:プブリウス・クロディウス・プルケル|プーブリウス・クローディウス]]の殺害について知って、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:クローディウスは護民官を務めた<ruby><rb>[[w:ポプラレス|民衆派]]</rb><rp>(</rp><rt>ポプラレス</rt><rp>)</rp></ruby> の政治家で、<br> カエサルから恩義を受けていた。<br> かの弁論家[[w:マルクス・トゥッリウス・キケロ|キケロー]]やその友人ティトゥス・ミロー [[w:la:Titus_Annius_Milo|Milo]] ら<br> <ruby><rb>[[w:オプティマテス|元老院派]]</rb><rp>(</rp><rt>オプティマテス</rt><rp>)</rp></ruby> と激しく対立し、ミローの配下によって殺害された。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:<P.> ([[wikt:en:Publius#Latin|Publii]]) 「プーブリウスの」は ρ系写本にのみ記されている。)</span>
*<de> <u>senatus</u>que <u>consulto</u> [[wikt:en:certior#Latin|certior]] [[wikt:en:factus#Participle|factus]], ut omnes [[wikt:en:iunior#Latin|iuniores]] Italiae [[wikt:en:coniurarent|coniurarent]],
**イタリアの全青年に<small>(新兵として)</small>宣誓するようにとの元老院決議について知らされて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:この事態を収拾すべく元老院派の[[w:グナエウス・ポンペイウス|ポンペイウス]]が単独の執政官<br> (''[[w:de:Consul sine collega|consul sine collega]]'')に選任されて本土イタリアを掌握した。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:<de> は現存する写本にはなく、近世以降に挿入提案されたもの。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注: [[wikt:en:senatus_consultum#Latin|senātūs cōnsultum]] ([[wikt:en:ultimus#Latin|ultimum]]) 「[[w:セナトゥス・コンスルトゥム・ウルティムム|元老院(の最終)決議]]」<br> ; dē [[wikt:en:senatus_consulto#Latin|senātūs cōnsultō]] 「元老院決議について」)</span>
*<u>dilectum</u> [[wikt:en:totus#Latin|tota]] [[wikt:en:provincia#Latin|provincia]] habere [[wikt:en:instituo#Latin|instituit]].
**<small>(カエサルは)</small>属州<small>〔ガッリア・キサルピーナ〕</small>全体での徴集をすることを決定する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:dilectus#Noun|dilectum]] は、[[wikt:en:delectus#Noun_2|delectum]] と表記している校訂版もある。)</span>
:
*<!--❷--><sup>(2)</sup> Eae res in Galliam [[wikt:en:transalpinus#Latin|Transalpinam]] celeriter [[wikt:en:perferuntur|perferuntur]].
**その状況は、[[w:ガリア・ナルボネンシス|ガッリア・トラーンサルピーナ]]<small>〔アルプスの向こう側のガッリア〕</small>に速やかに報知された。
:
*[[wikt:en:addunt|Addunt]] ipsi et [[wikt:en:adfingunt|adfingunt]] [[wikt:en:rumor#Latin|rumoribus]] [[wikt:en:Galli#Latin|Galli]],
**[[w:ガリア人|ガッリア人]]たち自身が風評に想像して付け加えたのは、
*quod res [[wikt:en:poscere|poscere]] [[wikt:en:videbatur|videbatur]]:
**事態が要求すると思われていたことで、
*[[wikt:en:retineri|retineri]] <u>urbano</u> [[wikt:en:motus#Noun_2|motu]] Caesarem
**カエサルは、都<small>〔[[w:ローマ|ローマ市]]〕</small>の騒乱に束縛されて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:urbanus#Adjective|urbānus]] は「都市の」「都会の」と訳されるが、<br> とりわけ「首都[[w:ローマ|ローマ市]]の」を意味する。)</span>
*neque in [[wikt:en:tantus#Latin|tantis]] [[wikt:en:dissensio#Latin|dissensionibus]] ad [[wikt:en:exercitus#Noun|exercitum]] venire posse.
**これほどの対立においては、軍隊のもとへ来ることができない、<br>ということである。
:
*<!--❸--><sup>(3)</sup> Hac [[wikt:en:impulsus#Participle|impulsi]] [[wikt:en:occasio#Latin|occasione]],
**このような好機に刺激されて、
*qui iam ante se [[wikt:en:populus#Noun|populi]] Romani [[wikt:en:imperium#Latin|imperio]] [[wikt:en:subiectus#Latin|subiectos]] [[wikt:en:dolerent|dolerent]],
**すでに以前から自分たちがローマ国民の支配に服属させられているのを悲嘆している者たちは、
*[[wikt:en:libere#Adverb_2|liberius]] atque [[wikt:en:audacter#Latin|audacius]] de bello [[wikt:en:consilium#Latin|consilia]] [[wikt:en:inire|inire]] [[wikt:en:incipiunt|incipiunt]].
**より自由に、かつ、より向こう見ずに、戦争について謀議に取りかかり始める。
:
[[画像:Brennus_mg_9724.jpg|thumb|right|250px|[[w:ブレンヌス|ブレンヌス]]の胸像。BC4世紀([[w:紀元前387年|387年]])に、ローマ軍を破って、ローマ市を占領した。アッコーと同じセノネース族の族長だったとされている。]]
*<!--❹--><sup>(4)</sup> [[wikt:en:indictus#Latin|Indictis]] inter se principes Galliae [[wikt:en:concilium#Latin|conciliis]] [[wikt:en:silvestris#Latin|silvestribus]] ac [[wikt:en:remotus#Latin|remotis]] locis
**ガッリアの領袖たちは、森林や人里離れた場所での会合を互いに申し合わせて、
*[[wikt:en:queruntur|queruntur]] de [[wikt:en:Acco#Latin|Acconis]] [[wikt:en:mors#Latin|morte]];
**アッコーの死について嘆く。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[ガリア戦記 第6巻#44節|第6巻44節]]を参照。)</span>
*<u>posse</u> hunc [[wikt:en:casus#Latin|casum]] ad ipsos [[wikt:en:recidere#Verb_4|recidere]] [[wikt:en:demonstrant#Latin|demonstrant]];
**彼<small>〔アッコー〕</small>の結末が彼ら自身へ降りかかりうることを説く。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:posse#Verb|posse]] の位置は、<br> α系写本では hunc の前だが、<br> β系写本では hunc casum ad ipsos recidere <u>posse</u> demonstrant <br> となっている。)</span>
:
*<!--❺--><sup>(5)</sup> [[wikt:en:miserantur|miserantur]] [[wikt:en:communis#Latin|communem]] Galliae [[wikt:en:fortuna#Latin|fortunam]];
**ガッリア共通の境遇をあわれむ。
*omnibus [[wikt:en:pollicitatio#Latin|pollicitationibus]] ac [[wikt:en:praemium#Latin|praemiis]] [[wikt:en:deposcunt|deposcunt]]
**<small>(以下の者たちを)</small>あらゆる約束と恩賞によって求める。
*qui [[wikt:en:bellum#Latin|belli]] <u>initia</u> [[wikt:en:faciant|faciant]] et sui [[wikt:en:caput#Latin|capitis]] [[wikt:en:periculum#Latin|periculo]] Galliam in [[wikt:en:libertas#Latin|libertatem]] [[wikt:en:vindicent|vindicent]].
**戦端を開いて、自らを危険にさらしても、ガッリアを解放する者たちを。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:~ in libertatem vindicare;~を解放する)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:initia#Latin|initia]] (複数形) だが、<br> β系写本では [[wikt:en:initium#Latin|initium]] (単数形) となっている。)</span>
:
*<!--❻--><sup>(6)</sup> In primis [[wikt:en:ratio#Latin|rationem]] esse [[wikt:en:habendus#Latin|habendam]] [[wikt:en:dicunt|dicunt]],
**とりわけ、<small>(以下のような)</small>方策を採るべきであると述べる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:in_primis#Latin|in primis]] は、[[wikt:en:inprimis#Adverb|
inprimis]] と表記している校訂版もある。)</span>
*[[wikt:en:priusquam#Latin|prius quam]] eorum [[wikt:en:clandestinus#Latin|clandestina]] consilia [[wikt:en:efferantur|efferantur]],
**彼らの秘密の計画が漏らされるより前に、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:反ローマの挙兵のはかりごとが漏れる前に)</span>
*ut Caesar ab [[wikt:en:exercitus#Noun|exercitu]] [[wikt:en:intercludatur|intercludatur]].
**カエサルが軍隊から切り離されるように、と。
:
*<!--❼--><sup>(7)</sup> Id esse [[wikt:en:facilis#Latin|facile]],
**それは容易なことである。
*quod neque legiones [[wikt:en:audeant|audeant]] [[wikt:en:absens#Latin|absente]] [[wikt:en:imperator#Latin|imperatore]] ex [[wikt:en:hiberna#Noun|hibernis]] [[wikt:en:egredi|egredi]],
**というのは、[[w:ローマ軍団|諸軍団]]は将軍<small>〔カエサル〕</small>が不在のときにあえて冬営から出て行こうとはしないし、
*neque [[wikt:en:imperator#Latin|imperator]] sine [[wikt:en:praesidium#Latin|praesidio]] ad legiones [[wikt:en:pervenire#Latin|pervenire]] [[wikt:en:possit|possit]].
**将軍は護衛なしに諸軍団のところへ到着することはできないのだから。
: <!-- [[wikt:en:| -->
*<!--❽--><sup>(8)</sup> [[wikt:en:postremo#Adverb|Postremo]] in [[wikt:en:acies#Latin|acie]] <u>praestare</u> [[wikt:en:interfici|interfici]],
**結局のところ、戦列において討ち死にする方がましである。
**:<span style="color:#009900;">(訳注:[[wikt:en:praestare|praestare]] ~ [[wikt:en:quam#Adverb|quam]] …「…よりも~がより優る」)</span>
*<u>quam</u> non [[wikt:en:vetus#Latin|veterem]] belli [[wikt:en:gloria#Latin|gloriam]] [[wikt:en:libertas#Latin|libertatem]]<nowiki>que</nowiki> quam a [[wikt:en:maior#Noun|maioribus]] [[wikt:en:acceperint|acceperint]], [[wikt:en:recuperare#Latin|recuperare]].
**先祖から受け継いだかつての戦争の栄誉および自由を取り戻さないことよりは。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===2節===
[[画像:Chartres_1.jpg|thumb|right|320px|カルヌーテース族([[w:la:Carnutes|Carnutes]])の名を残す現在の[[w:シャルトル|シャルトル]]([[w:en:Chartres|Chartres]])の象徴である[[w:シャルトル大聖堂|シャルトル大聖堂]]([[w:世界遺産|世界遺産]])。[[ガリア戦記 第6巻#13節|第6巻13節]]⑩項で既述のように、カルヌーテース族の土地はガッリアの中心・聖地と見なされていた。ガッリアがキリスト教化されると、[[w:司教|司教座]]が置かれて、宗教的中心地となった。]]
*<span style="background-color:#ffd;">[[/注解/2節]] {{進捗|00%|2025-11-05}}</span>
;ガッリア諸部族の会合で、カルヌーテース族が開戦動議
:
*<!--❶--><sup>(1)</sup> His rebus [[wikt:en:agitatus#Latin|agitatis]],
**これらの事柄が論議されて、
*[[wikt:en:profiteor#Latin|profitentur]] [[wikt:en:Carnutes#Latin|Carnutes]],
**カルヌーテース族の者が公言したことには、
*se [[wikt:en:nullus#Determiner|nullum]] [[wikt:en:periculum#Latin|periculum]] [[wikt:en:communis#Latin|communis]] [[wikt:en:salus#Latin|salutis]] causa [[wikt:en:recusare#Latin|recusare]],
**<small>(ガッリア)</small>共通の安全のためにはいかなる危険をも辞さない、
*[[wikt:en:princeps#Latin|principes]]<nowiki>que</nowiki> ex omnibus bellum [[wikt:en:facturus#Latin|facturos]] [[wikt:en:pollicentur|pollicentur]];
**かつ<small>(ガッリア方)</small>総勢の先鋒として戦争を遂行するであろうと約束する。
:
*<!--❷--><sup>(2)</sup> et, [[wikt:en:quoniam#Latin|quoniam]] in [[wikt:en:praesentia#Noun|praesentia]] [[wikt:en:obses#Latin|obsidibus]] [[wikt:en:cavere#Verb_2|cavere]] inter se non [[wikt:en:possint|possint]],
**目下のところ、人質により互いに保証し合うことはできなかったので、
*ne res [[wikt:en:efferatur|efferatur]],
**事が漏らされないように、
*<u>ut</u> [[wikt:en:ius_iurandum#Latin|iure iurando]] ac [[wikt:en:fides#Latin|fide]] [[wikt:en:sanciatur|sanciatur]], [[wikt:en:petunt|petunt]],
**誓約と信義でもって批准するように求める。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、写本ST<sup>c</sup> では ut だが、<br> 写本 T<sup>1</sup>・ρ系では at 、<br> 写本BMLNV・χ系では aut となっている。)</span>
*[[wikt:en:conlatus#Latin|conlatis]] [[wikt:en:militaris#Adjective|militaribus]] [[wikt:en:signum#Latin|signis]],
**軍旗が運び集められて、
*[[wikt:en:quo#Etymology_2_2|quo]] [[wikt:en:mos#Latin|more]] eorum [[wikt:en:gravissimus#Latin|gravissima]] [[wikt:en:caerimonia#Latin|caerimonia]] [[wikt:en:continetur|continetur]],
**それは彼らの慣習で最も荘重な<ruby><rb>神聖儀式</rb><rp>(</rp><rt>カエリモーニア</rt><rp>)</rp></ruby>として保たれているのだが、
*ne [[wikt:en:factus#Latin|facto]] [[wikt:en:initium#Latin|initio]] belli ab reliquis [[wikt:en:deserantur|deserantur]].
**開戦したら、ほかの<small>(部族の)</small>者たちから見放されないように、ということである。
: <!-- [[wikt:en:| -->
*<!--❸--><sup>(3)</sup> Tum [[wikt:en:conlaudatus#Latin|conlaudatis]] [[wikt:en:Carnutes#Latin|Carnutibus]],
**それから、カルヌーテース族が賞賛されて、
*[[wikt:en:datus#Participle|dato]] [[wikt:en:ius_iurandum#Latin|iure iurando]] ab omnibus, qui [[wikt:en:aderant|aderant]],
**訪れていたすべての者たちによって誓約が交わされて、
*[[wikt:en:tempus#Latin|tempore]] eius rei [[wikt:en:constitutus#Participle|constituto]]
**その事の時期を決定すると、
*ab [[wikt:en:concilium#Latin|concilio]] [[wikt:en:disceditur|disceditur]].
**<small>(ガッリアの領袖たちは)</small>会合から立ち去る。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===3節===
[[画像:Cathédrale_Sainte-Croix_d'Orléans_2008_PD_16.JPG|thumb|right|280px|ケナブム(Cenabum)すなわち現在の[[w:オルレアン|オルレアン]]の聖十字架大聖堂。ここもカルヌーテース族の[[w:オッピドゥム|城塞都市]]で、ガッリアの[[w:ドルイド|ドルイド]]たちが集まる聖地だったという。ローマの[[w:ルキウス・ドミティウス・アウレリアヌス|アウレリアヌス帝]](Aurelianus)によって再建されたのでアウレリアヌスの都市(アウレリアヌム [[w:la:Aurelianum|Aurelianum]])と改称され、オルレアン(Orléans)と転訛した。キリスト教化によってここにも[[w:司教|司教座]]が置かれて、布教の中心地になった。]]
*<span style="background-color:#ffd;">[[/注解/3節]] {{進捗|00%|2025-11-17}}</span>
;カルヌーテース族がケナブム進駐
:
*<!--❶--><sup>(1)</sup> [[wikt:en:ubi#Latin|Ubi]] ea dies venit,
**その日が来ると、
*[[wikt:en:Carnutes#Latin|Carnutes]],
**カルヌーテース族は、
*Cotuato et Conconnetodumno [[wikt:en:dux#Latin|ducibus]], [[wikt:en:desperatus#Latin|desperatis]] hominibus,
**捨て身覚悟の連中であるコトゥアトゥスとコンコンネトドゥムヌスを指導者として、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ガリア語では、<br> コトゥアトス ''[[w:fr:Cotuatos|Cotuatos]]''、<br> コンコンネトドゥムノス ''[[w:fr:Conconnetodumnos|Conconnetodumnos]]''。)</span>
*<u>Cenabum</u> [[wikt:en:signum#Latin|signo]] [[wikt:en:datus#Participle|dato]] [[wikt:en:concurrunt|concurrunt]]
**号令が発せられるとともに<u>ケナブム</u>に襲来する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ケナブムは、現在の[[w:オルレアン|オルレアン]]。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:fr:Cenabum|Cenabum]] はケルト語風の読みで、''[[ガリア戦記/注解編/写本と校訂版#Vossius|Vossius]]'' による修正提案。<br> 写本では genabim, genebim, genebin などとなっている。<br> ⇒ [[wikt:en:Genabum#Latin|Genabum]])</span>
*[[wikt:en:civis#Latin|cives]]<nowiki>que</nowiki> [[wikt:en:Romanus#Adjective|Romanos]], qui [[wikt:en:negotiandi|negotiandi]] causa [[wikt:en:ibi#Latin|ibi]] [[wikt:en:constiterant|constiterant]],
**そこには、商いを営むためにローマ市民たちが滞在していて、
*in his [[wikt:en:Gaius#Latin|Gaium]] [[wikt:en:Fufius#Latin|Fufium]] Citam, [[wikt:en:honestus#Latin|honestum]] [[wikt:en:eques#Latin|equitem]] [[wikt:en:Romanus#Adjective|Romanum]],
**彼らの中には、気高いローマ人[[w:エクィテス|騎士]]ガーイウス・フーフィウス・キタがいて
*qui rei [[wikt:en:frumentarius#Latin|frumentariae]] [[wikt:en:iussus#Noun|iussu]] Caesaris [[wikt:en:praeerat|praeerat]],
**カエサルの指図により糧秣調達を統率していたが、
*[[wikt:en:interficiunt|interficiunt]] [[wikt:en:bonum#Noun_2|bona]]<nowiki>que</nowiki> eorum [[wikt:en:diripiunt|diripiunt]].
**<small>(カルヌーテース勢は彼らローマ市民たちを)</small>殺害して、彼らの財産を略奪する。
:
*<!--❷--><sup>(2)</sup> Celeriter ad omnes Galliae [[wikt:en:civitas#Latin|civitates]] [[wikt:en:fama#Latin|fama]] [[wikt:en:perfertur|perfertur]].
**速やかに全ガッリア部族のもとへ、評判が報知される。
*Nam, <u>ubique</u> [[wikt:en:maior#Latin|maior]] atque [[wikt:en:inlustrior|inlustrior]] [[wikt:en:incidit#Etymology_1|incidit]] res,
**なぜなら、より重大でより目立った事態が起こればどこであろうが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、主要写本ω の大半では [[wikt:en:ubique#Latin|ubique]] だが、写本STでは [[wikt:en:ubi#Latin|ubi]] 、<br> さらに [[wikt:en:ubicumque#Latin|ubicumque]] という異読もあり、<br> ''[[ガリア戦記/注解編/写本と校訂版#Schneider,K.E.Chr.|Chr. Schneider]]'' は ubi quae と修正提案している。)</span>
*[[wikt:en:clamor#Latin|clamore]] per [[wikt:en:ager#Latin|agros]] [[wikt:en:regio#Latin|regiones]]<nowiki>que</nowiki> [[wikt:en:significant#Latin|significant]];
**耕地や<small>(集落の)</small>区域を介して、大声で呼びかける。
*<u>hinc</u> [[wikt:en:alius#Latin|alii]] [[wikt:en:deinceps#Latin|deinceps]] [[wikt:en:excipiunt|excipiunt]]
**ここから、別の者たちが続けて引き受けて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本の大半では [[wikt:en:hanc#Latin|hanc]] だが、<br> β系写本では [[wikt:en:hinc#Latin|hinc]] 「ここから」、<br> 写本Sでは [[wikt:en:hunc|hunc]] となっている。)</span>
*et [[wikt:en:proximus#Noun|proximis]] [[wikt:en:tradunt|tradunt]];
**近隣の者たちへ伝える。
*ut tum [[wikt:en:accidit#Etymology_1|accidit]].
**そのときにも<small>(同様のことが)</small>起こったのである。
: <!-- [[wikt:en:| -->
*<!--❸--><sup>(3)</sup> Nam, quae <u>Cenabi</u> [[wikt:en:oriens#Latin|oriente]] [[wikt:en:sol#Latin|sole]] gesta essent,
**ケナブムで日が昇るときになされていたこと<small>〔襲撃〕</small>が、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:Cenabi はケルト語風の読みで、''[[ガリア戦記/注解編/写本と校訂版#Vossius|Vossius]]'' による修正提案。<br> 主要写本ω では genabi となっている。 ⇒ [[wikt:en:Genabum#Latin|Genabum]])</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:gestus#Latin|gesta]] [[wikt:en:essent#Etymology_1|essent]] は [[wikt:en:gero#Latin|gerō]] の3人称・複数・過去完了・受動・接続法。)</span>
*ante [[wikt:en:primus#Latin|primam]] [[wikt:en:confectus#Latin|confectam]] [[wikt:en:vigilia#Latin|vigiliam]]
**第一夜警時の終わる前頃には
**:<span style="color:#009900;">(訳注:第一夜警時は、日の入から真夜中までの時間帯の前半「宵の口」。<br> [[古代ローマの不定時法#夜警時|#夜警時]] を参照。)</span>
*in finibus [[wikt:en:Arverni#Latin|Arvernorum]] audita sunt,
**アルウェルニー族の領土において聞かれた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:auditus#Latin|audita]] [[wikt:en:sunt#Latin|sunt]] は [[wikt:en:audio#Latin|audiō]] の3人称・複数・完了・受動・直説法)</span>
*[[wikt:en:qui#Latin|quod]] [[wikt:en:spatium#Latin|spatium]] est [[wikt:en:mille#Latin|milium]] [[wikt:en:passus#Etymology_2|passuum]] circiter [[wikt:en:centum#Latin|centum]] [[wikt:en:sexaginta#Latin|sexaginta]](CLX).
**約160ローママイルもの隔たりがあったのに。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ミーッレ・パッスーム、ミーリア(ローママイル)|ローママイル]]は約1.48 kmで、160マイルは約240 km)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
==ウェルキンゲトリークスとガッリア同盟軍の蜂起==
===4節===
[[画像:Vercingetorix stater CdM.jpg|thumb|right|200px|“<span style="font-family:Times New Roman;font-size:15pt;">(VERCIN)GETORIXS</span>”の名と横顔が刻まれた金貨。]]
[[画像:Vercingétorix_par_Millet.jpg|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の立像(フランスのアリーズ=サント=レーヌ <small>[[w:fr:Alise-Sainte-Reine|Alise-Sainte-Reine]]</small>)。<br>近代[[w:ナショナリズム|ナショナリズム]]の高揚とともに[[w:フランス|フランス]]国民が自らを古代[[w:ガリア人|ガッリア人]]の末裔と見なすようになると([[w:ガリア起源説|ガッリア起源説]])、ガッリア諸部族を率いて[[w:古代ローマ|古代ローマ]]と戦った彼は「'''フランス最初の英雄'''」として祀り上げられた。[[w:フランス第二帝政|第二帝政]]期に皇帝[[w:ナポレオン3世|ナポレオン3世]]の命により[[w:アレシアの戦い|アレスィア古戦場]]の発掘調査が実施され、[[w:1865年|1865年]]にはその地に彫刻家エメ・ミレ([[w:fr:Aimé Millet|Aimé Millet]])による高さ7メートルの銅像が建立された。<br>([[w:fr:Vercingétorix_(statue_d'Aimé_Millet)|fr:La statue de Vercingétorix]])]]
[[画像:Statue-vercingetorix-jaude-clermont.jpg|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の騎馬像([[w:fr:Statue équestre de Vercingétorix (Frédéric Auguste Bartholdi)|fr]])。彼の出身地ゲルゴウィアの近く、[[w:クレルモン=フェラン|クレルモン=フェラン市]]中央広場に建つ。[[w:1903年|1903年]]に、[[w:自由の女神像 (ニューヨーク)|自由の女神像]]の作者として著名な彫刻家[[w:フレデリク・バルトルディ|フレデリク・オーギュスト・バルトルディ]]によって建立された。[[w:フランス語|フランス語]]で「我は皆の自由のために武器を取った」« J’ai pris les armes pour la liberté de tous » と刻まれている。]]
*<span style="background-color:#ffd;">[[/注解/4節]] {{進捗|00%|2025-11-24}}</span>
;アルウェルニー族のウェルキンゲトリークスが挙兵、ガッリア諸部族同盟軍を指揮する
:
*<!--❶--><sup>(1)</sup> [[wikt:en:similis#Latin|Simili]] [[wikt:en:ratio#Latin|ratione]] ibi
**そこ<small>〔アルウェルニー族領〕</small>でも同様のやり方によって、
*[[wikt:en:Vercingetorix#Latin|Vercingetorix]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]という、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ガリア語 [[wikt:en:Reconstruction:Gaulish/Werkingetorix|*Werkingetorīx]] は「戦士たちの最高の王」という意味で、<br> ガッリア同盟軍の最高司令官にふさわしい呼び名である。<br> 《[[ガリア戦記/ガリア語の名前#Vercingetorix|'''ガリア語の名前'''#Vercingetorix]]》 を参照せよ。)</span>
*[[wikt:fr:Celtillus|Celtilli]] filius, [[wikt:en:Arvernus#Latin|Arvernus]],
**ケルティッルスの息子で[[w:アルウェルニ族|アルウェルニー族]]の者で、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''[[w:en:Celtillus|Celtillus]]'' はガリア語で「小さなケルト人」という意味だと解される。)</span>
*[[wikt:en:summus#Adjective|summae]] [[wikt:en:potentia#Latin|potentiae]] [[wikt:en:adulescens#Noun|adulescens]],
**最高の影響力のある青年が、
*cuius [[wikt:en:pater#Latin|pater]] [[wikt:en:principatus#Latin|principatum]] Galliae [[wikt:en:totus#Etymology_1|totius]] [[wikt:en:obtinuerat|obtinuerat]]
**──その父<small>〔ケルティッルス〕</small>はガッリア全体の主導権を占めていたが、
*et ob eam causam, quod [[wikt:en:regnum#Latin|regnum]] [[wikt:en:adpetebat|adpetebat]], ab [[wikt:en:civitas#Latin|civitate]] erat [[wikt:en:interfectus#Latin|interfectus]],
**王位を求めたという理由により、部族の者によって誅殺されていたのであるが、──
*[[wikt:en:convocatus#Latin|convocatis]] suis [[wikt:en:cliens#Latin|clientibus]]
**自らの庇護者たちを招集して、
*facile [[wikt:en:incendit|incendit]].
**容易に焚き付けた。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:cognitus#Participle|Cognito]] eius [[wikt:en:consilium#Latin|consilio]]
**彼の計画を知ると、
*ad [[wikt:en:arma#Latin|arma]] [[wikt:en:concurritur|concurritur]].
**<small>(人々は)</small>武器のもとへ群がり集まった。
*[[wikt:en:prohibetur|Prohibetur]] ab [[wikt:fr:Gobannitio|Gobannitione]], [[wikt:en:patruus#Latin|patruo]] suo, [[wikt:en:reliquus#Latin|reliquis]]<nowiki>que</nowiki> [[wikt:en:princeps#Noun_3|principibus]],
**彼の<small>(父方の)</small>おじゴバンニティオやほかの領袖たちにより妨げられた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''[[w:fr:Gobannitio|Gobannitio]]'' は「鍛冶屋」か「鍛冶の神」に由来する名前と解される。)</span>
*qui hanc [[wikt:en:temptandus#Latin|temptandam]] [[wikt:en:fortuna#Latin|fortunam]] non [[wikt:en:existimabant|existimabant]];
**その者たちは、このような運命を試すべきとは考えていなかったのだ。
*[[wikt:en:expellitur|expellitur]] ex [[wikt:en:oppidum#Latin|oppido]] [[wikt:en:Gergovia#Latin|Gergovia]];
**<small>(ウェルキンゲトリークスは)</small>城塞都市ゲルゴウィアから追放される。
:
*<!--❸--><sup>(3)</sup> non [[wikt:en:destitit|destitit]] tamen
**しかしながら<small>(彼は計画を)</small>取り止めず、
*atque in agris habet [[wikt:en:dilectus#Noun|dilectum]] [[wikt:en:egens#Latin|egentium]] ac [[wikt:en:perditor#Noun|perditorum]].
**野に貧窮者たちやならず者たちを徴集する。
:
*Hac [[wikt:en:coactus#Latin|coacta]] [[wikt:en:manus#Latin|manu]],
**こうした手勢が集められ、
*[[wikt:en:quoscumque|quoscumque]] [[wikt:en:adit#Latin|adit]] ex civitate,
**部族のうちで<small>(彼が)</small>会った者は誰であれ、
*ad suam [[wikt:en:sententia#Latin|sententiam]] [[wikt:en:perducit|perducit]];
**自らの意図に引き込んだ。
:
*<!--❹--><sup>(4)</sup> [[wikt:en:hortatur|hortatur]] ut [[wikt:en:communis#Latin|communis]] [[wikt:en:libertas#Latin|libertatis]] causa [[wikt:en:arma#Latin|arma]] [[wikt:en:capiant|capiant]],
**<small>(ガッリア)</small>共通の自由のために武器を取るように鼓舞した。
*[[wikt:en:magnus#Latin|magnis]]<nowiki>que</nowiki> [[wikt:en:coactus#Latin|coactis]] [[wikt:en:copia#Latin|copiis]]
**大軍勢が集められて、
*[[wikt:en:adversarius#Latin|adversarios]] suos, a quibus paulo ante erat [[wikt:en:eiectus#Latin|eiectus]],
**少し前に<small>(彼をゲルゴウィアから)</small>放逐したところの敵対者たちを、
*[[wikt:en:expellit|expellit]] ex civitate.
**部族から追放する。
*[[wikt:en:rex#Latin|Rex]] ab suis [[wikt:en:appellatur|appellatur]].
**<small>(ウェルキンゲトリークスは)</small>配下の者たちから王と呼ばれている。
:
*<!--❺--><sup>(5)</sup> [[wikt:en:dimittit|Dimittit]] [[wikt:en:quoque#Latin|quoque]] [[wikt:en:versus#Adverb|versus]] [[wikt:en:legatio#Latin|legationes]];
**<small>(ウェルキンゲトリークスは)</small>あらゆる方向へ使節団を派遣して、
*[[wikt:en:obtestatur|obtestatur]] ut in [[wikt:en:fides#Latin|fide]] [[wikt:en:maneant|maneant]].
**誓約に留まるようにと、懇願する。
:
*<!--❻--><sup>(6)</sup> Celeriter sibi
**速やかに、自分たち<small>〔アルウェルニー族〕</small>に対して
*[[wikt:en:Senones#Latin|Senones]], [[wikt:en:Parisii#Latin|Parisios]], [[wikt:en:Pictones#Latin|Pictones]], [[wikt:en:Cadurci#Latin|Cadurcos]], <u>Turonos</u>, [[wikt:en:Aulerci#Latin|Aulercos]], [[wikt:en:Lemovices#Latin|Lemovices]], <u>Andes</u>
**セノネース族、パリースィイー族、ピクトネース族、カドゥルキー族、<br><u>トゥロニイー族</u>、アウレルキー族、レモウィーケース族、アンデース族、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部のトゥロニイー族 ''[[w:Turoni|Turoni]]'' は、トゥロネース族 ''[[wikt:en:Turones#Latin|Turonēs]]'' ともいう。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:二つ目の下線部は、α系写本では [[wikt:en:Andi#Latin|Andos]]「アンディー族」だが、<br> ''[[ガリア戦記/注解編/写本と校訂版#Glareanus|Glareanus]]'' は、[[wikt:en:Andes#Latin|Andēs]]「アンデース族」と修正提案し、<br> これは別名「アンデカーウィー族」''[[wikt:en:Andecavi#Latin|Andecāvī]]'' ともいう。)</span>
*reliquosque omnes, qui [[wikt:en:Oceanus#Latin|Oceanum]] [[wikt:en:adtingunt|adtingunt]], [[wikt:en:adiungit|adiungit]];
**および<ruby><rb>大洋<span style="color:#009900;">〔[[w:大西洋|大西洋]]〕</span></rb><rp>(</rp><rt>オーケアヌス</rt><rp>)</rp></ruby>に接するほかの全部族を、加盟させる。
*omnium [[wikt:en:consensus#Latin|consensu]]
**すべての者たちの同意により、
*ad eum [[wikt:en:defertur|defertur]] [[wikt:en:imperium#Latin|imperium]].
**彼<small>〔ウェルキンゲトリークス〕</small>に<small>(諸部族の)</small>軍勢指揮権が譲り渡される。
:
*<!--❼--><sup>(7)</sup> Qua [[wikt:en:oblatus#Latin|oblata]] [[wikt:en:potestas#Latin|potestate]]
**<small>(ウェルキンゲトリークスは)</small>その権限が任されると、
*omnibus his civitatibus [[wikt:en:obses#Latin|obsides]] [[wikt:en:imperat|imperat]],
**これらすべての部族に人質<small>(の供出)</small>を命令して、
*[[wikt:en:certus#Latin|certum]] numerum [[wikt:en:miles#Latin|militum]] ad se celeriter [[wikt:en:adduci#Latin|adduci]] [[wikt:en:iubet#Latin|iubet]],
**兵の一定の数が自分のもとへ速やかに動員されることを命じる。
:
*<!--❽--><sup>(8)</sup> [[wikt:en:arma#Latin|armorum]] [[wikt:en:quantum#Latin|quantum]] [[wikt:en:quisque#Latin|quaeque]] civitas [[wikt:en:domi#Latin|domi]] [[wikt:en:quisque#Latin|quodque]] ante tempus [[wikt:en:efficiat|efficiat]], [[wikt:en:constituit#Latin|constituit]];
**おのおのの部族が本国で、武器のどれほどをその時期の前に生産するかを、決定した。
*in primis [[wikt:en:equitatus#Latin|equitatui]] [[wikt:en:studet|studet]].
**とりわけ、[[w:騎兵|騎兵隊]]を熱心に求めた。
: <!-- [[wikt:en:| -->
*<!--❾--><sup>(9)</sup> Summae diligentiae summam [[wikt:en:imperium#Latin|imperii]] [[wikt:en:severitas#Latin|severitatem]] addit;
**<small></small>(ウェルキンゲトリークスは)最高の入念さに、命令の最高の厳格さを付け加える。
*magnitudine [[wikt:en:supplicium#Latin|supplicii]] [[wikt:en:dubitans#Latin|dubitantes]] cogit.
**重大な刑罰をふんぎりが付かぬ者たちへ強いる。
: <!-- [[wikt:en:| -->
*<!--❿--><sup>(10)</sup> Nam maiore commisso delicto <u>igni</u> atque omnibus tormentis necat,
**すなわち、より重大な違反を犯したら、火とあらゆる拷問によって誅殺した。
*leviore de causa auribus desectis aut singulis effossis oculis domum remittit,
**より軽微な場合については、両耳を切り取り、あるいは眼を一つずつ繰り抜いて、郷里へ送還する。
*ut sint reliquis documento et magnitudine poenae perterreant alios.
**ほかの者たちへの警告となり、懲罰の重大さが別の者たちを畏怖させるようにである。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===5節===
*<span style="background-color:#ffd;">[[/注解/5節]] {{進捗|00%|2025-12-14}}</span>
;ビトゥリゲース族が、ガッリア同盟軍に寝返る
:
*<!--❶--><sup>(1)</sup> His [[wikt:en:supplicium#Latin|suppliciis]] celeriter [[wikt:en:coactus#Latin|coacto]] [[wikt:en:exercitus#Noun|exercitu]],
**<small>(ウェルキンゲトリークスは)</small>これらの刑罰により速やかに軍隊を徴集して、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:「軍隊」と訳される [[wikt:en:exercitus#Noun|exercitus]] には「鍛えられて規律がある」という意味合いがあり、<br> これまでカエサルがガッリア人の軍勢をこのように表現したことはまれであった。)</span>
*[[wikt:en:Lucterius#Latin|Lucterium]] [[wikt:en:Cadurcus#Latin|Cadurcum]], [[wikt:en:summus#Latin|summae]] hominem [[wikt:en:audacia#Latin|audaciae]],
**この上なく豪胆な人物であるカドゥルキー族のルクテリウスを
*cum parte [[wikt:en:copiarum#Noun_2|copiarum]] in [[wikt:en:Ruteni#Latin|Rutenos]] [[wikt:en:mittit|mittit]];
**軍勢の一部とともにルテーニー族のところに遣わす。
*ipse in [[wikt:en:Bituriges#Latin|Bituriges]] [[wikt:en:proficiscitur|proficiscitur]].
**<small>(ウェルキンゲトリークス)</small>自身はビトゥリゲース族のところに出発する。
:
; ビトゥリゲース族が、ハエドゥイー族に、対ウェルキンゲトリークスのための援兵を依頼
*<!--❷--><sup>(2)</sup> Eius [[wikt:en:adventus#Latin|adventu]]
**彼<small>〔ウェルキンゲトリークス〕</small>の到来により、
*[[wikt:en:Bituriges#Latin|Bituriges]] ad [[wikt:en:Aeduos|Haeduos]], quorum erant in [[wikt:en:fides#Latin|fide]],
**ビトゥリゲース族は、彼らが庇護下にあった[[w:ハエドゥイ族|ハエドゥイー族]]のもとへ、
*[[wikt:en:legatus#Latin|legatos]] [[wikt:en:mittunt|mittunt]] [[wikt:en:subsidium#Latin|subsidium]] [[wikt:en:rogatum#Verb|rogatum]],
**使節たちを、<small>(ハエドゥイー族からの)</small>援兵を依頼するために派遣する。
*[[wikt:en:quo#Adverb|quo]] [[wikt:en:facile#Latin|facilius]] hostium copias [[wikt:en:sustinere|sustinere]] [[wikt:en:possint|possint]].
**それにより、敵の軍勢をより容易に持ちこたえることができるようにということであった。
:
; ハエドゥイー族が、ビトゥリゲース族に対して援兵を派兵
*<!--❸--><sup>(3)</sup> [[wikt:en:Aedui#Latin|Haedui]] de [[wikt:en:consilium#Latin|consilio]] [[wikt:en:legatus#Latin|legatorum]], quos Caesar ad [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:reliquerat|reliquerat]],
**[[w:ハエドゥイ族|ハエドゥイー族]]は、カエサルが軍隊のもとへ残していた<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レーガートゥス</rt><rp>)</rp></ruby>たちの助言により、
*copias [[wikt:en:equitatus#Noun|equitatus]] [[wikt:en:peditatus#Latin|peditatus]]<nowiki>que</nowiki> [[wikt:en:subsidium#Latin|subsidio]] [[wikt:en:Bituriges#Latin|Biturigibus]] [[wikt:en:mittunt|mittunt]].
**[[w:騎兵|騎兵隊]]と[[w:歩兵|歩兵隊]]の軍勢をビトゥリゲース族に対する援兵として派遣する。
:
; ハエドゥイー族の援兵が、ビトゥリゲース族の寝返りを怖れて、途中で逃げ帰ってしまう
*<!--❹--><sup>(4)</sup> Qui cum ad flumen [[wikt:en:Liger#Latin|Ligerim]] [[wikt:en:venissent|venissent]], quod [[wikt:en:Bituriges#Latin|Bituriges]] ab [[wikt:en:Aeduis|Haeduis]] [[wikt:en:dividit#Latin|dividit]],
**その者たち<small>〔援兵〕</small>は、ビトゥリゲース族を[[w:ハエドゥイ族|ハエドゥイー族]]から分け隔てるリゲル川のたもとへやって来たときに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:リゲル川 [[w:la:Liger|Liger]] は、現在の[[w:ロワール川|ロワール川]]。<br> 本書に登場するビトゥリゲース・クビ族 ''[[w:en:Bituriges Cubi|Bituriges Cubi]]'' は、<br> ロワール川西岸の[[w:シェール県|シェール県]]の辺りに居住していた。<br> 対して、[[w:ハエドゥイ族|ハエドゥイー族]]は、<br> ロワール川東岸の[[w:ニエーヴル県|ニエーヴル県]]の辺りに居住していた。)</span>
[[画像:Map of Eduens people-fr.svg|thumb|right|250px|[[w:ハエドゥイ族|ハエドゥイー族]]を軸とするガッリアの合従連衡(<small>フランス語表記</small>)。赤い部分がハエドゥイー族(Eduens)、桃色・茶色の部分が同盟部族、灰色の部分が敵対する[[w:アルウェルニ族|アルウェルニー族]](Arvernes)とセクアニ族(Sequanes)の領域である。茶色のビトゥリゲース族(Bituriges)と赤いハエドゥイー族(Eduens)の境界に沿ってリゲル川([[w:ロワール川|ロワール川]])が流れていることが見て取れる。川の西岸はビトゥリゲース族とアルウェルニー族の勢力圏になっている。]]
*paucos dies ibi [[wikt:en:moratus#Participle|morati]]
**わずかな日々をそこでぐずぐずして、
*neque flumen [[wikt:en:transire#Latin|transire]] [[wikt:en:ausus#Participle|ausi]] [[wikt:en:domus#Latin|domum]] [[wikt:en:revertuntur|revertuntur]]
**川をあえて渡らずに、故国に引き返す。
:
*<!--❺--><sup>(5)</sup> [[wikt:en:legatus#Latin|legatis]]<nowiki>que</nowiki> nostris [[wikt:en:renuntiant|renuntiant]]
**<small>(ハエドゥイー族の援兵たちが)</small>我が方<small>〔ローマ方〕</small>の<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レーガートゥス</rt><rp>)</rp></ruby>たちに報告したことには、
*se [[wikt:en:Bituriges#Latin|Biturigum]] [[wikt:en:perfidia#Latin|perfidiam]] [[wikt:en:veritus#Latin|veritos]] [[wikt:en:revertisse|revertisse]],
**自分たち<small>〔援兵〕</small>は、ビトゥリゲース族の寝返りを恐れて引き返した。
*quibus id [[wikt:en:consilium#Latin|consilii]] fuisse [[wikt:en:cognoverint|cognoverint]],
**彼らには、以下のような謀計があったことを探知したのだ。
*ut, si flumen [[wikt:en:transissent#Latin|transissent]], una ex parte ipsi, altera [[wikt:en:Arverni#Latin|Arverni]] se [[wikt:en:circumsisterent|circumsisterent]].
**もし川を渡ったら、一方から<small>(ビトゥリゲース族)</small>自身が、他方から[[w:アルウェルニ族|アルウェルニー族]]が自分たちを包囲するというものだ、と。
:
*<!--❻--><sup>(6)</sup> Id ea<span style="background-color:#ffa;">[[wikt:la:-ne|ne]]</span> de causa, quam [[wikt:en:legatus#Latin|legatis]] <u>pronuntiarunt</u>,
**そのことは<small>(援兵たちが)</small><ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レーガートゥス</rt><rp>)</rp></ruby>たちに報告した理由によって<small>(なしたのか?)</small>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:-ne#Latin|-ne]] ~ [[wikt:en:an#Latin|an]] …;~であるか、あるいは…であるか。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:pronuntiarunt|pronuntiarunt]]<sub> (直接法・完了形)</sub> は古い印刷本 ''[[ガリア戦記/注解編/写本と校訂版#クリティカル・アパラトゥスとその略号|edd.vett.]]'' の記述で、<br> α系写本では [[wikt:en:pronuntiarint|pronuntiarint]]<sub> (接続法・完了形)</sub> だが、<br> β系写本では [[wikt:en:pronuntiaverint|pronuntia<u>ve</u>rint]]<sub> (接続法・完了形)</sub> となっている。)</span>
*<span style="background-color:#ffa;">[[wikt:la:an|an]]</span> [[wikt:en:perfidia#Latin|perfidia]] [[wikt:en:adductus#Latin|adducti]] [[wikt:en:fecerint|fecerint]],
**あるいは<small>(ビドゥリゲース族の)</small>寝返りに動かされて、なしたのか?
*[[wikt:en:quod#Conjunction|quod]] [[wikt:en:nihil#Latin|nihil]] nobis [[wikt:en:constat#Latin|constat]],
**我々<small>〔ローマ人〕</small>には何ら定かではないので、
*non [[wikt:en:videtur|videtur]] pro [[wikt:en:certus#Latin|certo]] esse <u>proponendum</u>.
**確言するべきであるとは思われない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:~ pro certo ponere;~を確かであると主張する)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:proponendum|<u>pro</u>ponendum]] だが、<br> β系写本では [[wikt:en:ponendum|ponendum]] となっている。)</span>
: <!-- [[wikt:en:| -->
; ビトゥリゲース族が、ローマ人やハエドゥイー族から離反して、アルウェルニー族と同盟してしまう
*<!--❼--><sup>(7)</sup> [[wikt:en:Bituriges#Latin|Bituriges]] eorum [[wikt:en:discessus#Noun|discessu]]
**ビトゥリゲース族は、彼ら<small>〔援兵〕</small>の撤収により、
*[[wikt:en:statim#Latin|statim]] <u>se</u> cum [[wikt:en:Arverni#Latin|Arvernis]] <u>coniunguntur</u>.
**ただちに[[w:アルウェルニ族|アルウェルニー族]]と<small>(同盟を)</small>結んだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:iunguntur|iunguntur]] だが、<br> β系写本では se ~ [[wikt:en:coniungunt|coniungunt]] となっている。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===6節===
*<span style="background-color:#ffd;">[[/注解/6節]] {{進捗|00%|2025-12-15}}</span>
[[画像:Warsaw Royal Castle GM (12).JPG|thumb|right|200px|[[w:グナエウス・ポンペイウス|グナエウス・ポンペイウス]]の立像([[w:ワルシャワ歴史地区|ワルシャワ王宮]])。彼は首都の騒乱を鎮めるために単独の[[w:執政官|執政官]]として大権を与えられ、イタリアの徴兵権を得た。[[w:三頭政治|三頭政治]]後のこの混乱期に、彼はカエサルの政敵たちからこぞって支持されたが、危機に瀕していたカエサルを打倒する絶好の機会を見送った。これは重大な逸機であり、数年後にポンペイウスにとって致命的な結果をもたらすことになる。]]
;諸軍団と分断されて苦慮するカエサル
:
*<!--❶--><sup>(1)</sup> His rebus in Italiam Caesari [[wikt:en:nuntiatus#Latin|nuntiatis]],
**これらの事情がイタリアにいるカエサルへ知らされると、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ここでいうイタリアとは、<br> カエサルの属州[[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]のことである。)</span>
*cum iam ille [[wikt:en:urbanus#Latin|urbanas]] res [[wikt:en:virtus#Latin|virtute]] [[wikt:en:Gnaei#Latin|Gnaei]]<sub> ([[wikt:en:Cn.#Latin|Cn.]])</sub> [[wikt:en:Pompeius#Proper_noun|Pompei]] [[wikt:en:commodior#Latin|commodiorem]] in [[wikt:en:status#Noun_11|statum]] [[wikt:en:pervenisse#Latin|pervenisse]] [[wikt:en:intellegeret|intellegeret]],
**彼は、もはや都<small>〔[[w:ローマ|ローマ市]]〕</small>の事態は[[w:グナエウス・ポンペイウス|グナエウス・ポンペイウス]]の果断さによってより相応な状態に至ったと認識したので、
*in [[wikt:en:Gallia_transalpina#Latin|Transalpinam Galliam]] [[wikt:en:profectus#Latin|profectus]] est.
**ガッリア・トラーンサルピーナ<small>〔アルプスの向こう側のガッリア〕</small>に出発した。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#1節|1節]]②項で言及された Galliam Transalpinam は<br> アルプスの西側「長髪のガッリア」全般を指すと思われるが、<br> ここではどちらかといえば<br> ガッリア南部のローマ属州ガッリア・トラーンサルピーナ<br> すなわち後の[[w:ガリア・ナルボネンシス|ガッリア・ナルボーネーンスィス]]を指す。)</span>
:
*<!--❷--><sup>(2)</sup> [[wikt:en:eo#Adverb|Eo]] cum [[wikt:en:venisset|venisset]],
**<small>(カエサルが)</small>そこに来たときに、
*magna [[wikt:en:difficultas#Latin|difficultate]] [[wikt:en:adficiebatur|adficiebatur]], qua [[wikt:en:ratio#Latin|ratione]] ad [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:pervenire#Latin|pervenire]] [[wikt:en:posset#Latin|posset]].
**どのような方策で軍隊のもとへ到達することができるか、という大きな困難に苦悩させられていた。
:
*<!--❸--><sup>(3)</sup> Nam, si [[wikt:en:legio#Latin|legiones]] in [[wikt:en:provincia#Latin|provinciam]] [[wikt:en:arcesseret|arcesseret]],
**なぜなら、もし、諸[[w:ローマ軍団|軍団]]を属州<small>〔ガッリア・トラーンサルピーナ〕</small>に呼び寄せるのならば、
*se [[wikt:en:absens#Latin|absente]] in [[wikt:en:iter#Latin|itinere]] [[wikt:en:proelium#Latin|proelio]] [[wikt:en:dimicaturus#Latin|dimicaturas]] [[wikt:en:intellegebat|intellegebat]];
**自分<small>〔カエサル〕</small>が不在のままで、行軍中に戦闘を闘うことになるであろうと理解していた。
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> si ipse ad exercitum [[wikt:en:contenderet|contenderet]],
**もし<small>(カエサル)</small>自身が<small>(大部隊の護衛なしで)</small>軍隊のもとへ急いで行くのならば、
*<u>ne</u> iis <u>quidem</u> eo tempore qui quieti [[wikt:en:viderentur|viderentur]],
**そのときには、中立を保っていると見られる者たちでさえも、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:iis#Latin|iis]] はβ系写本の記述で、α系写本では [[wikt:en:his#Latin|his]] となっている。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:quietus#Latin|quietus, quieti]]「平和的な、中立的な」)</span>
*suam [[wikt:en:salus#Latin|salutem]] [[wikt:en:recte#Latin|recte]] [[wikt:en:committi|committi]] [[wikt:en:videbat|videbat]].
**自分の身の安全を良く託されるとは思えなかったのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:前年まで、すなわち第6巻までの戦争は主としてガッリア北部・中部などで闘われていたので、<br> [[ガリア戦記 第6巻#44節|第6巻44節]]で既述のように、ローマ諸軍団はガッリア北部・中部周辺に冬営させられていた。<br> 今回は軍団が駐留していないガッリア中南部を中心に反乱が起こったので、<br> カエサルと諸軍団は分断された。<br> そのため、カエサルが大部隊の護衛なしで北上すれば、<br> 同盟部族にさえ寝首を掻かれる怖れがあったのである。)
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===7節===
*<span style="background-color:#ffd;">[[/注解/7節]] {{進捗|00%|2025-12-19}}</span>
;ルクテリウスとカエサルのナルボーをめぐる駆け引き
[[画像:Narbonne_panorama.jpg|thumb|right|300px|'''ナルボー'''(Narbo)すなわち現在の[[w:ナルボンヌ|ナルボンヌ市]](Narbonne)の街並み。ローマ人が[[w:ドミティア街道|ドミティア街道]]の拠点として植民市'''コロニア・ナルボー・マルティウス'''(Colonia Narbo Martius)を建設し、後には[[w:ローマ内戦 (紀元前49年-紀元前45年)|ローマ内乱]]のときにもカエサル派の根拠地となった。その重要性から帝政期には州都に昇格し、[[w:属州|属州]]名も[[w:ガリア・ナルボネンシス|ガッリア・ナルボネンスィス]]に改められたほどである。]]
[[画像:Via_domitia_map600x600_(1).png|thumb|right|200px|[[w:ドミティア街道|ドミティア街道]](Via Domitia)の経路。ローマ人によってイタリアと[[w:ヒスパニア|ヒスパーニア]]を結ぶ重要な街道として整備された。本節でカエサル側の軍勢が往復したのもこの街道である。]]
:
; カドゥルキー族のルクテリウスが、ルテーニー族を同盟に引き入れる
*<!--❶--><sup>(1)</sup> [[wikt:en:interim#Latin|Interim]] [[wikt:en:Lucterius#Latin|Lucterius]] [[wikt:en:Cadurcus#Latin|Cadurcus]]
**その間に、カドゥルキー族のルクテリウスが
*in [[wikt:en:Ruteni#Latin|Rutenos]] [[wikt:en:missus#Participle|missus]]
**ルテーニー族のところに遣わされて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#5節|5節]]の冒頭で述べられた。<br> ルテーニー族 ''[[w:en:Ruteni|Ruteni]]'' は現在の[[w:アヴェロン県|アヴェロン県]]の<br> [[w:ロデーズ|ロデーズ]]辺りにいたとされる。)</span>
*eam [[wikt:en:civitas#Latin|civitatem]] [[wikt:en:Arverni#Latin|Arvernis]] [[wikt:en:conciliat|conciliat]].
**その部族に[[w:アルウェルニ族|アルウェルニー族]]との仲を取り持つ。
:
; ルクテリウスが、ローマ属州内の拠点都市ナルボーを目指す
*<!--❷--><sup>(2)</sup> [[wikt:en:progressus#Participle|Progressus]] in [[wikt:en:Nitiobriges#Latin|Nitiobriges]] et [[wikt:en:Gabali#Latin|Gabalos]]
**<small>(彼は)</small>ニティオブリゲース族とガバリー族のところに進んで行き、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ニティオブリゲース族<br> またはニティオブロゲース族 ''[[w:en:Nitiobroges|Nitiobroges]]'' は<br> 現在の[[w:ロット=エ=ガロンヌ県|ロット=エ=ガロンヌ県]][[w:アジャン|アジャン]]辺り、<br> ガバリー族 ''[[w:en:Gabali|Gabali]]'' は現在の[[w:ロゼール県|ロゼール県]]辺りにいたらしい。)</span>
*ab [[wikt:en:uterque#Latin|utrisque]] [[wikt:en:obses#Latin|obsides]] [[wikt:en:accipit|accipit]]
**双方から人質たちを受け取って、
*et, magna [[wikt:en:coactus#Latin|coacta]] [[wikt:en:manus#Latin|manu]],
**多くの手勢を徴集すると、
*in [[wikt:en:provincia#Latin|provinciam]] [[wikt:en:Narbo#Latin|Narbonem]] [[wikt:en:versus#Latin|versus]] [[wikt:en:eruptio#Latin|eruptionem]] facere [[wikt:en:contendit|contendit]].
**<small>(ローマ人の)</small>[[w:属州|属州]]内のナルボーに向かって出撃することを急ぐ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ナルボー [[w:la:Narbo|Narbo]] は、ローマ人が建設した地中海岸の植民市で、<br> ヒスパーニアとイタリアを結ぶ拠点であった。<br> 現在の[[w:ナルボンヌ|ナルボンヌ]]。)</span>
:
; カエサルもナルボーを目指す
*<!--❸--><sup>(3)</sup> Qua re [[wikt:en:untiatus#Latin|nuntiata]]
**その事を報告されると、
*Caesar omnibus [[wikt:en:consilium#Latin|consiliis]] [[wikt:en:antevertendus#Latin|antevertendum]] <span style="color:#009900;font-size:8pt;">(esse)</span> [[wikt:en:existimavit|existimavit]], ut [[wikt:en:Narbo#Latin|Narbonem]] [[wikt:en:proficisceretur|proficisceretur]].
**カエサルは、ナルボーに出発することを、あらゆる計画に先立ってするべきであると考えた。
:
*<!--❹--><sup>(4)</sup> [[wikt:en:eo#Adverb|Eo]] cum [[wikt:en:venisset|venisset]],
**<small>(カエサルは)</small>そこへやって来ると、
*[[wikt:en:timens#Latin|timentes]] [[wikt:en:confirmat#Latin|confirmat]],
**<ruby><rb>怖気</rb><rp>(</rp><rt>おじけ</rt><rp>)</rp></ruby>ている者たちを元気付けて、
*[[wikt:en:praesidium#Latin|praesidia]]
**守備隊を
*in [[wikt:en:Ruteni#Latin|Rutenis]] [[wikt:en:provincialis#Latin|provincialibus]], [[wikt:en:Volcae#Latin|Volcis]] [[wikt:en:Arecomici#Latin|Arecomicis]], [[wikt:en:Tolosates#Latin|Tolosatibus]]
**属州側のルテーニー族、[[w:ウォルカエ族|ウォルカエ]]・アレコミキー族、トローサーテース族<small>(らの領内)</small>に、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:上述のように、属州外の<u>ルテーニー族</u>は[[w:アルウェルニ族|アルウェルニー族]]と結んでいる。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[w:ウォルカエ族|ウォルカエ族]]は、西側に住むテクトサゲース族 ''[[w:en:Tectosages|Tectosages]]'' と<br> 東側に住むアレコミキー族 ''[[w:en:Arecomici|Arecomici]]'' の2支族に分かれていた。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:トローサーテース族 ''[[w:fr:Tolosates|Tolosates]]'' は、ウォルカエ・テクトサゲース族の分派とされ、<br> 現在の[[w:トゥールーズ|トゥールーズ]]の近くにいたと考えられている。)</span>
*[[wikt:en:circum#Preposition|circum]]<nowiki>que</nowiki> [[wikt:en:Narbo#Latin|Narbonem]], quae [[wikt:en:locum#Latin|loca]] hostibus erant [[wikt:en:finitimus#Latin|finitima]],
**および敵方に隣接した地である[[w:ナルボンヌ|ナルボー]]周辺に
*[[wikt:en:constituit#Latin|constituit]];
**駐留させる。
:
*<!--❺--><sup>(5)</sup> partem [[wikt:en:copiae#Noun_2|copiarum]] ex [[wikt:en:provincia#Latin|provincia]]
**属州<small>〔ガッリア・トラーンサルピーナ〕</small>からの軍勢の一部、
*[[wikt:en:supplementum#Latin|supplementum]]<nowiki>que</nowiki>, quod ex Italia [[wikt:en:adduxerat|adduxerat]],
**およびイタリアから率いて来た補充兵を
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:後者の補充兵 supplementum は、[[#1節|1節]]で既述のように、<br> [[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]で徴募された軍団兵であろう。)</span>
*in [[wikt:en:Helvii#Latin|Helvios]], qui fines [[wikt:en:Arverni#Latin|Arvernorum]] [[wikt:en:contingunt|contingunt]],
**[[w:アルウェルニ族|アルウェルニー族]]の領土に接しているヘルウィイー族のところに
*[[wikt:en:convenire#Latin|convenire]] [[wikt:en:iubet#Latin|iubet]].
**集結することを命じる。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===8節===
*<span style="background-color:#ffd;">[[/注解/8節]] {{進捗|00%|2026-01-03}}</span>
[[画像:Carte-cevennes-france.png|thumb|right|200px|フランスにおける[[w:中央高地 (フランス)|中央高地]](Massif Central)とセヴェンヌ山地(Cévennes)の位置]]
[[画像:Col_de_legal.jpeg|thumb|right|200px|[[w:雪|雪]]に覆われた[[w:オーヴェルニュ地域圏|オーヴェルニュ高地]]。オーヴェルニュ(Auvergne)の名は[[w:アルウェルニ族|アルウェルニー族]](Arverni)に由来する。]]
[[画像:Causse_Mejean_Evening.jpg|thumb|right|200px|城壁のように続くケウェンナ(セヴェンヌ)山地の断崖]]
[[画像:France_Massif_central.jpg|thumb|right|200px|[[w:アルウェルニ族|アルウェルニー族]]の勢力圏であった[[w:中央高地 (フランス)|中央高地]](Massif Central)の領域(着色部分)。平野の多いフランスにおいて山塊としてそびえ立つ。]]
:
;カエサルがケウェンナ山地を越えてアルウェルニー族の領内へ突入
*<!--❶--><sup>(1)</sup> His rebus [[wikt:en:comparatus#Latin|comparatis]],
**これらの事が整えられて、
*[[wikt:en:repressus#Latin|represso]] iam [[wikt:en:Lucterius#Latin|Lucterio]] et [[wikt:en:remotus#Latin|remoto]],
**<small>(カドゥルキー族の)</small>ルクテリウスはすでに押し留められ、遠ざけられた。
*quod [[wikt:en:intrare#Latin|intrare]] intra [[wikt:en:praesidium#Latin|praesidia]] [[wikt:en:periculosus#Latin|periculosum]] [[wikt:en:putabat|putabat]],
**──というのは<small>(ローマ人の)</small>守備の範囲内に踏み込むことは危険なことであると<small>(ルクテリウスが)</small>見なしていたからであるが、──
*in [[wikt:en:Helvii#Latin|Helvios]] [[wikt:en:proficiscitur|proficiscitur]].
**<small>(そこで、カエサルは)</small>ヘルウィイー族のところに出発する。
:
; カエサルが、アルウェルニー族の要害ケウェンナ山を越える
*<!--❷--><sup>(2)</sup> <u>Etsi</u> mons <u>Cevenna</u>, qui [[wikt:en:Arverni#Latin|Arvernos]] ab [[wikt:en:Helvii#Latin|Helviis]] [[wikt:en:discludit|discludit]],
**[[w:アルウェルニ族|アルウェルニー族]]をヘルウィイー族から隔てている<u>ケウェンナ山</u>は、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:山の名は写本によって Cebenna または Cevenna となっており、<br> [[w:ガイウス・プリニウス・セクンドゥス|大プリーニウス]]が記した [[wikt:en:Cebenna#Latin|Cebenna]] がガリア語に近いようである。<br> 現在名はセヴェンヌ山地 Cévennes と呼ばれ、<br> [[w:中央高地 (フランス)|フランス中央高地]](Massif Central)の南東部にそそり立っている。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:etsi#Latin|etsi]] ~ [[wikt:en:tamen#Latin|tamen]] …「~としても、にもかかわらず…」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:mons#Latin|mons]] は β系写本の記述で、α系写本にはない。)</span>
*[[wikt:en:durissimus#Latin|durissimo]] tempore anni
**最も厳しい時季に
*[[wikt:en:altissimus#Latin|altissima]] [[wikt:en:nix#Latin|nive]] iter [[wikt:en:impediebat|impediebat]],
**豪[[w:雪|雪]]によって道を閉ざしていたのであるが、
*<u>tamen</u> [[wikt:en:discussus#Latin|discussa]] [[wikt:en:nix#Latin|nive]] sex in [[wikt:en:altitudo#Latin|altitudinem]] [[wikt:en:pes#Latin|pedum]]
**にもかかわらず<small>(カエサル勢は)</small>深さ6<u>ペース</u>の雪を粉砕して、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、6ペースは約1.8メートル弱。)</span>
*atque ita [[wikt:en:via#Latin|viis]] [[wikt:en:patefactus#Latin|patefactis]] [[wikt:en:summus#Latin|summo]] [[wikt:en:miles#Latin|militum]] <u>sudore</u>
**このように兵士たちの最大の努力によって道が開かれて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:sudor#Latin|sudore]]「汗」だが、<br> β系写本では [[wikt:en:labor#Latin|labore]]「労苦」 となっている。)</span>
*ad fines [[wikt:en:Arverni#Latin|Arvernorum]] [[wikt:en:pervenit#Latin|pervenit]].
**[[w:アルウェルニ族|アルウェルニー族]]の領土へ到達した。
:
; アルウェルニー族が、カエサルの奇襲に周章狼狽する
*<!--❸--><sup>(3)</sup> Quibus [[wikt:en:oppressus#Latin|oppressis]] [[wikt:en:inopinans#Latin|inopinantibus]],
**<small>(アルウェルニー族は)</small>彼らに対する<small>(カエサルの)</small>攻撃を予期していなかったが、
*quod se <u>Cevenna</u> ut [[wikt:en:murus#Latin|muro]] [[wikt:en:munitus#Latin|munitos]] [[wikt:en:existimabant|existimabant]],
**──というのは、自分たちは<u>ケウェンナ</u>を壁として防御されていると考えていたからであり、
*ac <u>ne</u> [[wikt:en:singularis#Latin|singulari]] <u>quidem</u> [[wikt:en:umquam#Latin|umquam]] homini eo tempore anni [[wikt:en:semita#Latin|semitae]] [[wikt:en:patuerant|patuerant]],
**かつ、その時季には、個人にとってさえも、小道はかつて開かれていなかったからであるが、──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*[[wikt:en:eques#Latin|equitibus]] [[wikt:en:imperat|imperat]],
**<small>(カエサルは)</small>騎兵たちに命令する。
*ut, [[wikt:en:quam#Adverb|quam]] [[wikt:en:late#Latin|latissime]] [[wikt:en:possint|possint]], [[wikt:en:vagentur|vagentur]]
**できるだけ広く動き回り、
*et [[wikt:en:quam#Adverb|quam]] maximum hostibus [[wikt:en:terror#Latin|terrorem]] [[wikt:en:inferant|inferant]].
**敵たちに最大限の恐怖を引き起こすように、と。
:
; ウェルキンゲトリークスが、ビトゥリゲース族のもとから軍勢を取って返す
*<!--❹--><sup>(4)</sup> Celeriter haec [[wikt:en:fama#Latin|fama]] ac <u>nuntiis</u>
**これらのことは速やかに風評や伝令たちによって、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、主要写本ω では [[wikt:en:nuntii#Latin|nuntii]] だが、<br> ''[[ガリア戦記/注解編/写本と校訂版#Manutius|Manutius]]'' が [[wikt:en:nuntiis#Etymology_1|nuntiis]] と修正提案している。)</span>
*ad [[wikt:en:Vercingetorix#Latin|Vercingetorigem]] [[wikt:en:perferuntur|perferuntur]];
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]のもとへ報知される。
*quem [[wikt:en:perterritus#Latin|perterriti]] omnes [[wikt:en:Arverni#Latin|Arverni]] [[wikt:en:circumsistunt|circumsistunt]] atque [[wikt:en:obsecrant|obsecrant]],
**彼<small>〔ウェルキンゲトリークス〕</small>を、脅かされている[[w:アルウェルニ族|アルウェルニー族]]の皆が取り巻いて、嘆願する。
*ut suis [[wikt:en:fortuna#Latin|fortunis]] [[wikt:en:consulat#Latin|consulat]],
**自分たち<small>〔アルウェルニー族〕</small>の境遇に配慮してくれるように、
*<u>neve</u> ab hostibus <u>diripiantur</u>,
**自分たち<small>〔アルウェルニー族〕</small>が敵<small>〔ローマ人〕</small>によって略奪されることを許容しないように、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:この行は、α系写本では [[wikt:en:neve#Latin|neve]] ab hostibus [[wikt:en:diripiantur|diripiantur]] <br> β系写本では [[wikt:en:neu#Latin|neu]] se ab hostibus [[wikt:en:diripi|diripi]] [[wikt:en:patiatur|patiatur]] となっている。)</span>
*[[wikt:en:praesertim#Latin|praesertim]] cum [[wikt:en:videat|videat]] [[wikt:en:omnis#Latin|omne]] ad se bellum [[wikt:en:translatus#Participle|translatum]].
**とりわけ、すべての戦争が自分たちへ向けられると<small>(彼が)</small>見なしているのであるから
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:praesertim cum ~;とりわけ~であるから)</span>
: <!-- [[wikt:en:| -->
*<!--❺--><sup>(5)</sup> Quorum ille [[wikt:en:prex#Latin|precibus]] [[wikt:en:permotus#Latin|permotus]]
**彼<small>〔ウェルキンゲトリークス〕</small>は、その者たちの懇願に揺り動かされて、
*[[wikt:en:castra#Latin|castra]] ex [[wikt:en:Bituriges#Latin|Biturigibus]] [[wikt:en:movet|movet]] in [[wikt:en:Arverni#Latin|Arveruos]] [[wikt:en:versus#Latin|versus]].
**陣営をビトゥリゲース族のところから[[w:アルウェルニ族|アルウェルニー族]]のところに向けて行軍する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:castra movet 「陣営を動かす」=「行軍する」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:現在の[[w:ブールジュ|ブールジュ]]辺りから[[w:クレルモン=フェラン|クレルモン=フェラン]]辺りに南下したようである。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===9節===
*<span style="background-color:#ffd;">[[/注解/9節]] {{進捗|00%|2026-01-12}}</span>
;カエサルが北上して諸軍団と合流するが、同盟軍はゴルゴビナ攻略をめざす
:
*<!--❶--><sup>(1)</sup> At Caesar, [[wikt:en:biduum#Latin|biduum]] in his locis [[wikt:en:moratus#Participle|moratus]],
**それに対して、カエサルは2日間、この地に留まった。
*quod haec de [[wikt:en:Vercingetorix#Latin|Vercingetorige]] usu ventura [[wikt:en:opinio#Latin|opinione]] [[wikt:en:praeceperat|praeceperat]],
**──というのは、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]についてこれ<small>〔陣営の移動〕</small>が起こると予想をしていたからだが、──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:usu venire 「起こる」→ usu [[wikt:en:venturus#Latin|ventūra]] (esse) 「起こるであろう」)</span>
*per causam [[wikt:en:supplementum#Latin|supplementi]] [[wikt:en:equitatus#Noun|equitatus]]<nowiki>que</nowiki> [[wikt:en:cogendus#Latin|cogendi]]
**補充兵と騎兵隊を徴集するためという口実のもとに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:per causam 「口実のもとに」)</span>
*ab [[wikt:en:exercitus#Noun|exercitu]] [[wikt:en:discedit|discedit]];
**軍隊から離れる。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:Brutus#Latin|Brutum]] [[wikt:en:adulescens#Noun|adulescentem]] his copiis [[wikt:en:praeficit|praeficit]];
**<small>(カエサルは)</small><u>青年ブルートゥス</u>にこの軍勢を指揮させる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:青年ブルートゥスとは、<br> [[w:デキムス・ユニウス・ブルトゥス・アルビヌス|デキムス・ブルートゥス]](<small>[[w:la:Decimus_Iunius_Brutus_Albinus|Decimus Iunius Brutus Albinus]]</small>)のことで、<br> [[ガリア戦記 第3巻#14節|第3巻14節]]でカエサルの艦隊を指揮した。)</span>
*hunc [[wikt:en:monet#Latin|monet]], ut in omnes partes [[wikt:en:eques#Latin|equites]] quam [[wikt:en:late#Latin|latissime]] [[wikt:en:pervagentur|pervagentur]]:
**彼には、[[w:騎兵|騎兵]]たちがあらゆる方面にできるだけ広く駆け回るようにと、忠告する。
*<u>daturum</u> se <u>operam</u>, ne longius [[wikt:en:triduum#Latin|triduo]] ab [[wikt:en:castra#Latin|castris]] [[wikt:en:absit#Latin|absit]].
**自分<small>〔カエサル〕</small>は、3日間より長く陣営から離れないように、努力をするであろう、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:opera#Latin|operam]] dare 「努力をする」→ operam [[wikt:en:daturus#Latin|datūrum]] (esse) 「努力をするであろう」)</span>
[[画像:Image-Vienne-Cropped.jpg|thumb|right|300px|'''ウィエンナ'''(Vienna)すなわち現在のヴィエンヌ(Vienne)。ロダヌス川(現[[w:ローヌ川|ローヌ川]])のほとりにある当地は、南仏[[w:プロヴァンス|プロヴァンス地方]]と北仏[[w:ブルゴーニュ地域圏|ブルゴーニュ地方]]を結ぶ交通の要衝として、古代ローマ時代から栄え、今もローマ時代の遺跡が多く残る。]]
:
; カエサルが、急いでウィエンナへ北進する
*<!--❸--><sup>(3)</sup> His [[wikt:en:constitutus#Participle|constitutis]] rebus,
**これらの事を決定すると、
*<u>omnibus</u> suis [[wikt:en:inopinans#Latin|inopinantibus]],
**配下の皆が予期しないほど、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:omnibus は β系写本の記述で、<br> α系写本にはない。)</span>
*quam [[wikt:en:maximus#Latin|maximis]] potest [[wikt:en:iter#Latin|itineribus]],
**できるかぎりの強行軍で、
*[[wikt:en:Vienna#Etymology_1|Viennam]] [[wikt:en:pervenit#Latin|pervenit]].
**<u>ウィエンナ</u>に到着する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ウィエンナ [[w:la:Vienna|Vienna]] は、<br> 現在の[[w:ヴィエンヌ (イゼール県)|ヴィエンヌ]] ''[[w:en:Vienne, Isère|Vienne]]'')</span>
:
; カエサルが、ハエドゥイー族領を抜けて、2個軍団が冬営するリンゴネース族領へ向けて北上する
*<!--❹--><sup>(4)</sup> [[wikt:en:ibi#Latin|Ibi]] [[wikt:en:nactus#Latin|nactus]] [[wikt:en:recens#Latin|recentem]] [[wikt:en:equitatus#Latin|equitatum]], quem [[wikt:en:multus#Latin|multis]] ante diebus eo [[wikt:en:praemiserat|praemiserat]],
**そこで、何日も前にそこに先遣していたまだ新兵の騎兵隊を得て、
[[画像:Langres_FR_(march_2008).jpg|thumb|right|300px|リンゴネース族(Lingones)の名を残す[[w:ラングル|ラングル]](Langres)の街の雪景色]]
*neque [[wikt:en:diurnus#Latin|diurno]] neque [[wikt:en:nocturnus#Latin|nocturno]] itinere [[wikt:en:intermissus#Latin|intermisso]]
**昼間も夜間も行軍を中断せずに、
*per fines [[wikt:en:Aedui#Latin|Haeduorum]]
**[[w:ハエドゥイ族|ハエドゥイー族]]の領土を通って、
*in [[wikt:en:Lingones#Latin|Lingones]] [[wikt:en:contendit|contendit]],
**<u>リンゴネース族のところ</u>に急いだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:リンゴネース族 [[w:la:Lingones|Lingones]] の首邑は<br> 現在の[[w:ラングル|ラングル]] ''[[w:en:Langres|Langres]]'' で、<br> ローマ時代には [[w:la:Andematunnum|Andematunnum]] と呼ばれたが、<br> ''[[wikt:fr:Lingones|Lingones]]'' の転訛が ''[[wikt:fr:Langres|Langres]]'' である。)</span>
*[[wikt:en:ubi#Latin|ubi]] [[wikt:en:duo#Latin|duae]] [[wikt:en:legio#Latin|legiones]] [[wikt:en:hiemabant|hiemabant]],
**そこには、2個[[w:ローマ軍団|軍団]]が冬営していた。
*ut, si [[wikt:en:aliquis#Latin|quid]] etiam de sua [[wikt:en:salus#Latin|salute]] ab [[wikt:en:Aedui#Latin|Haeduis]] [[wikt:en:iniretur|iniretur]] [[wikt:en:consilium#Latin|consilii]], [[wikt:en:celeritas#Latin|celeritate]] [[wikt:en:praecurreret|praecurreret]].
**もし<small>(カエサル)</small>自らの安全についてさえ、ハエドゥイー族により何らかの謀計が始められても、速やかに凌駕するように。
:
; カエサルが、リンゴネース族領の軍団冬営地へ到着して、諸軍団へ集結を指令する
*<!--❺--><sup>(5)</sup> [[wikt:en:eo#Adverb|Eo]] cum [[wikt:en:pervenisset|pervenisset]],
**<small>(カエサルは)</small>そこへ到着したときに、
*ad reliquas [[wikt:en:legio#Latin|legiones]] [[wikt:en:mittit|mittit]]
**残りの軍団のもとへ<small>(伝令を)</small>遣わす。
*<u>prius</u>que omnes in unum locum [[wikt:en:cogit|cogit]], <u>quam</u> de eius [[wikt:en:adventus#Latin|adventu]] [[wikt:en:Arverni#Latin|Arvernis]] [[wikt:en:nuntiari|nuntiari]] [[wikt:en:posset#Latin|posset]].
**彼の到着について[[w:アルウェルニ族|アルウェルニー族]]に知らされ得るより早く、総勢が一か所に集結するように、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:priusquam#Latin|prius ~ quam]] …;…より早く~)</span>
: <!-- [[wikt:en:| -->
; ウェルキンゲトリークスが、ボイイー族がいるゴルゴビナの攻略を企図する
*<!--❻--><sup>(6)</sup> Hac re [[wikt:en:cognitus#Participle|cognita]],
**この事を知ると、
*[[wikt:en:Vercingetorix#Latin|Vercingetorix]] rursus in [[wikt:en:Bituriges#Latin|Bituriges]] [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:reducit|reducit]]
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は再びビトゥリゲース族のところに軍隊を連れ戻して、
*atque [[wikt:en:inde#Latin|inde]] [[wikt:en:profectus#Participle_2|profectus]] Gorgobinam, [[wikt:en:Boii#Latin|Boiorum]] [[wikt:en:oppidum#Latin|oppidum]],
**そこから、[[w:ボイイ族|ボイイー族]]の城塞都市であるゴルゴビナへ出発した。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ゴルゴビナ ''[[w:en:Gorgobina|Gorgobina]]'' は、現在の候補地としては、<br> [[w:ニエーヴル県|ニエーヴル県]]のサン=パリズ=ル=シャテル<small>([[w:en:Saint-Parize-le-Châtel|Saint-Parize-le-Châtel]])</small><br> [[w:アンドル=エ=ロワール県|アンドル=エ=ロワール県]]のラ・ゲルシュ([[w:en:La Guerche|La Guerche]])<br> あるいは、[[w:シェール県|シェール県]]のサン=サテュル([[w:fr:Saint-Satur|Saint-Satur]])などが挙げられている。)</span>
*quos ibi [[wikt:en:helvetico|Helvetico]] [[wikt:en:proelium#Latin|proelio]] [[wikt:en:victus#Participle|victos]]
**──[[w:ヘルウェティイ族|ヘルウェーティイー族]]の戦闘で打ち負かされた彼らをそこに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ボイイー族はヘルウェーティイー族とともにガッリアに移動して、カエサルに敗れていた。第1巻28節~29節を参照。)</span>
*Caesar [[wikt:en:conlocaverat#Latin|conlocaverat]] [[wikt:en:Aedui#Latin|Haeduis]]<nowiki>que</nowiki> [[wikt:en:adtribuerat#Latin|adtribuerat]],
**カエサルは宿営させ、ハエドゥイー族<small>(の庇護)</small>に委ねていたのだが、──
*[[wikt:en:oppugnare#Latin|oppugnare]] [[wikt:en:instituit#Latin|instituit]].
**<small>(ウェルキンゲトリークスはゴルゴビナの)</small>攻略を決意した。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===10節===
[[画像:Caesar's_campaign_to_Agedincum_in_52BC.png|thumb|right|250px|前節までのカエサルの[[w:ナルボンヌ|ナルボー]]からアゲディンクムへの進路(青線)および[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の進路(赤線)。青字名は親ローマ部族、赤字名は反ローマ部族。カエサルは[[w:アルウェルニ族|アルウェルニー族]]の本拠ゲルゴウィアを突くと見せかけてウェルキンゲトリークスを引き寄せ、その間に[[w:ブルゴーニュ地域圏|ブルゴーニュ]]に冬営していた諸軍団と合流できた。これに対して、ウェルキンゲトリークスはボイイー族を攻めようとする。]]
*<span style="background-color:#ffd;">[[/注解/10節]] {{進捗|00%|2026-01-16}}</span>
;カエサルがアゲディンクムを発って、ボイイー族支援に向かう
:
; カエサルが抱えることになった「大きな困難」とは?
*<!--❶--><sup>(1)</sup> Magnam haec res Caesari [[wikt:en:difficultas#Latin|difficultatem]] ad [[wikt:en:consilium#Latin|consilium]] [[wikt:en:capiendus#Latin|capiendum]] [[wikt:en:adferebat|adferebat]]<!--:-->,
**この事態は、カエサルが作戦を立てるためには、大きな困難を引き起こしていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:haec res 「この事態」とは、<br> ウェルキンゲトリークスが<br> ハエドゥイー族の庇護下にあったボイイー族を攻めること。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:magnam ~ difficultatem 「大きな困難を」)</span>
*si reliquam partem [[wikt:en:hiems#Latin|hiemis]] uno loco [[wikt:en:legio#Latin|legiones]] [[wikt:en:contineret|contineret]],
**もし、冬の残りの期間に、諸[[w:ローマ軍団|軍団]]を1か所に留めておくならば、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:前節で述べられたように、<br> カエサルはリンゴネース族の軍団冬営地に着いたときに、<br> 諸軍団に1か所に集結するべく伝令を遣わしていた。)</span>
*ne, [[wikt:en:stipendiarius#Latin|stipendiariis]] [[wikt:en:Haedui#Latin|Haeduorum]] [[wikt:en:expugnatus#Latin|expugnatis]], [[wikt:en:cunctus#Latin|cuncta]] Gallia [[wikt:en:deficeret|deficeret]],
**[[w:ハエドゥイ族|ハエドゥイー族]]の朝貢国が攻略されて、ガッリア全体が背くのではないか?
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:「ハエドゥイー族の朝貢国」とは、ボイイー族のこと。)</span>
*quod [[wikt:en:nullus#Determiner|nullum]] amicis in eo [[wikt:en:praesidium#Latin|praesidium]] <u>videret positum esse</u>;
**──というのは、彼<small>〔カエサル〕</small>においては、友邦に対するいかなる守備隊も置かれていないと<small>(ガッリアが)</small>見るからである──。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> [[ガリア戦記/注解編/写本と校訂版#写本の系図|α系写本]]のうち、χ系・M・B・S写本などでは [[wikt:en:videret|videret]] [[wikt:en:positus#Latin|positum]] esse 、<br> α系写本のうち、写本M・L・Nなどでは [[wikt:en:videretur|videretur]] positum esse 、<br> β系写本では、positum videret となっている。)</span>
*si [[wikt:en:mature#Adverb|maturius]] ex [[wikt:en:hiberna#Noun|hibernis]] [[wikt:en:educeret|educeret]],
**もし、尚早に冬営地から<small>(諸軍団を)</small>進発させれば、
*ne ab re [[wikt:en:frumentarius#Latin|frumentaria]] [[wikt:en:durus#Latin|duris]] [[wikt:en:subvectio#Latin|subvectionibus]] [[wikt:en:laboraret|laboraret]].
**<small>(降雪時期の)</small>糧秣供給の厄介な輸送によって苦労するのではないか?
:
*<!--❷--><sup>(2)</sup> <u>Praestare</u> [[wikt:en:visus#Participle|visum]] est tamen omnes [[wikt:en:difficultas#Latin|difficultates]] [[wikt:en:perpeti#Verb|perpeti]],
**しかしながら、あらゆる困難に耐えることの方が<u>優っている</u>ように見える。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:praestare|praestare]] ~ [[wikt:en:quam#Adverb|quam]] …「…よりも~が優る」)</span>
*<u>quam</u> [[wikt:en:tantus#Latin|tanta]] [[wikt:en:contumelia#Latin|contumelia]] [[wikt:en:acceptus#Latin|accepta]] omnium suorum [[wikt:en:voluntas#Latin|voluntates]] [[wikt:en:alienare#Latin|alienare]].
**これほどの恥辱を受けて、配下の皆の意欲を遠ざけてしまう<u>よりは</u>。
:
*<!--❸--><sup>(3)</sup> Itaque [[wikt:en:cohortatus#Latin|cohortatus]] [[wikt:en:Haedui#Latin|Haeduos]] de [[wikt:en:supportandus#Latin|supportando]] [[wikt:en:commeatus#Noun|commeatu]],
**こうして、<small>(カエサルは)</small>ハエドゥイー族に軍需物資の輸送について、激励して、
*[[wikt:en:praemittit|praemittit]] ad [[wikt:en:Boii#Latin|Boios]], qui de suo [[wikt:en:adventus#Latin|adventu]] [[wikt:en:doceant|doceant]]
**[[w:ボイイ族|ボイイー族]]のもとへ、<small>(カエサル)</small>自らの到着について知らせるための者たちを先遣して、
*[[wikt:en:hortentur|hortentur]]<nowiki>que</nowiki> ut in [[wikt:en:fides#Latin|fide]] [[wikt:en:maneant|maneant]] atque hostium [[wikt:en:impetus#Latin|impetum]] magno animo [[wikt:en:sustineant|sustineant]].
**<small>(カエサルへの)</small>信義に留まって、敵たちの襲撃に大いなる決意をもって持ちこたえるように、と激励させた。
[[画像:Aqueduc2.jpg|thumb|right|250px|アゲディンクム、すなわちセノネース族(Senones)の名を残す現在の[[w:サンス|サーンス]](Sens)に建てられたローマ時代の[[w:水道橋|水道橋]]遺跡。]]
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> Duabus [[wikt:en:Agedincum#Latin|Agedinci]] legionibus atque [[wikt:en:impedimentum#Latin|impedimentis]] [[wikt:en:totus#Latin|totius]] [[wikt:en:exercitus#Noun|exercitus]] [[wikt:en:relictus#Latin|relictis]],
**アゲディンクムに、2個軍団および軍隊全体の輜重を残すと、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:アゲディンクムは敵対するセノネース族の首邑だが、<br> [[ガリア戦記 第6巻#44節|第6巻44節]]で6個軍団を冬営させていた。<br> 現在の[[w:サンス|サーンス]]。)</span>
*ad [[wikt:en:Boii#Latin|Boios]] [[wikt:en:proficiscitur|proficiscitur]].
**[[w:ボイイ族|ボイイー族]]のもとへ出発した。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===11節===
[[画像:France_-_Loiret_-_Montargis_-_Passerelle_vers_l'écluse.JPG|thumb|right|250px|ウェッラウノドゥーヌムの候補地の一つであるモンタルジ(Montargis)の運河沿いの景観。セノネース族の城塞都市ウェッラウノドゥーヌム(Vellaunodunum)が現在のどの地点に当たるのか定説はない。アゲディンクム(現在の[[w:サンス|サーンス]])とケナブム(現在の[[w:オルレアン|オルレアン]])の中間地点であると考えられることから、モンタルジ([[w:en:Montargis|Montargis]])、ボーヌ=ラ=ロランド([[w:en:Beaune-la-Rolande|Beaune-la-Rolande]])やシャトー=ランドン([[w:en:Château-Landon|Château-Landon]])などが候補地に挙げられている。]]
*<span style="background-color:#ffd;">[[/注解/11節]] {{進捗|00%|2026-02-02}}</span>
;セノネース族のウェッラウノドゥーヌムを降し、カルヌーテース族のケナブムを攻略
:
*<!--❶--><sup>(1)</sup> [[wikt:en:alter#Latin|Altero]] die
**<small>(カエサルは出発して)</small>翌日に、
*cum ad [[wikt:en:oppidum#Latin|oppidum]] [[wikt:en:Senones#Latin|Senonum]] [[wikt:en:Vellaunodunum#Latin|Vellaunodunum]] [[wikt:en:venisset|venisset]],
**セノネース族の城塞都市ウェッラウノドゥーヌムへやって来たときに、
*ne [[wikt:en:aliquem|quem]] post se hostem [[wikt:en:relinqueret|relinqueret]],
**自らの後方に何らかの敵を残しておかないように、
*[[wikt:en:quo#Latin|quo]] [[wikt:en:expeditior#Latin|expeditiore]] re [[wikt:en:frumentarius#Adjective|frumentaria]] [[wikt:en:uteretur|uteretur]],
**そのことにより、妨げなく糧秣供給を享受するように、
*[[wikt:en:oppugnare#Latin|oppugnare]] [[wikt:en:instituit#Latin|instituit]]
**<small>(同市の)</small>攻囲を決めて、
*<u>idque</u> [[wikt:en:biduum#Latin|biduo]] [[wikt:en:circumvallavit|circumvallavit]];
**それ<small>〔城塞都市〕</small>を2日間で<small>(塁壁で)</small>囲んだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:id#Latin|id]]<nowiki>que</nowiki> だが、<br> β系写本では [[wikt:en:eo#Etymology_4|eo]]<nowiki>que</nowiki> となっている。)</span>
:
; セノネース族の城塞都市ウェッラウノドゥーヌムが降伏する
*<!--❷--><sup>(2)</sup> [[wikt:en:tertius#Latin|tertio]] die
**3日目に、
*[[wikt:en:missus#Participle|missis]] ex [[wikt:en:oppidum#Latin|oppido]] [[wikt:en:legatus#Noun|legatis]] de [[wikt:en:deditio#Latin|deditione]],
**城塞都市から降伏についての使節たちが遣わされて来て、
*[[wikt:en:arma#Latin|arma]] [[wikt:en:conferri|conferri]],
**武器が運び集められること、
*[[wikt:en:iumentum#Latin|iumenta]] [[wikt:en:produci#Latin|produci]],
**役畜が引き渡されること、
*[[wikt:en:sescenti#Latin|sescentos]] [[wikt:en:obses#Latin|obsides]] [[wikt:en:dari#Latin|dari]] [[wikt:en:iubet#Latin|iubet]].
**600名の人質が供出されることを<small>(カエサルが)</small>命じる。
:
; ウェッラウノドゥーヌムに副官トレボーニスと守備隊を残し、カエサル自身はケナブムへ向かう
*<!--❸--><sup>(3)</sup> Ea qui [[wikt:en:conficeret|conficeret]],
**それらのことを成就するための者として、
*[[wikt:en:Gaius#Latin|Gaium]] [[wikt:en:Trebonius#Latin|Trebonium]] [[wikt:en:legatus#Latin|legatum]] [[wikt:en:relinquit|relinquit]].
**<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レーガートゥス</rt><rp>)</rp></ruby> [[w:ガイウス・トレボニウス|ガーイウス・トレボーニウス]]を<small>(ウェッラウノドゥーヌムに)</small>残留させる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[w:la:Gaius Trebonius|Gaius Trebonius]] は、カエサルの副官の一人。)</span>
*Ipse, ut quam primum iter <u>faceret</u><ref>faceret はα系写本の表記で、β系写本では conficeret となっている。</ref>,
**<small>(カエサル)</small>自身は、できるだけ素早く<small>(ゴルゴビナへの)</small>行軍を成就するように、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:quam#Adverb|quam]] [[wikt:en:primum#Latin|primum]] 〜「できるだけ素早く〜」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:faceret|faceret]] だが、<br> β系写本では [[wikt:en:conficeret|conficeret]] となっている。)</span>
*[[wikt:en:Genabum#Latin|Cenabum]] [[wikt:en:Carnutes#Latin|Carnutum]] [[wikt:en:proficiscitur|proficiscitur]];
**カルヌーテース族のケナブムに出発する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ケナブム Cenabum はケルト語風の読みで、現在の[[w:オルレアン|オルレアン]]。)</span>
:
*<!--❹--><sup>(4)</sup> qui tum primum [[wikt:en:adlatus#Latin|adlato]] [[wikt:en:nuntium#Latin|nuntio]] de [[wikt:en:oppugnatio#Latin|oppugnatione]] [[wikt:en:Vellaunodunum#Latin|Vellaunoduni]],
**そのとき彼ら<small>〔カルヌーテース族〕</small>は、当初はウェッラウノドゥーヌムの攻囲についての報告をもたらされて、
*cum [[wikt:en:longe#Latin|longius]] eam rem <u>ductum</u> [[wikt:en:iri#Latin|iri]] [[wikt:en:existimarent|existimarent]],
**その事・軍事作戦はより長く引き延ばされて行われると考えていたので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ductus#Noun_2|ductus]] は、軍事的な指揮・作戦などを表す。[[#62節]]も同様。)</span>
*[[wikt:en:praesidium#Latin|praesidium]] [[wikt:en:Genabum#Latin|Cenabi]] [[wikt:en:tuendus#Latin|tuendi]] causa, quod eo [[wikt:en:mitterent|mitterent]], [[wikt:en:comparabant|comparabant]].
**ケナブムを固守するために、守備隊をそこへ派遣することを準備していた。
:
; カエサルが、カルヌーテース族の城塞都市ケナブムの攻囲を翌日に延期する
*<!--❺--><sup>(5)</sup> [[wikt:en:huc#Latin|Huc]] [[wikt:en:biduum#Latin|biduo]] [[wikt:en:pervenit#Etymology_1|pervenit]].
**<small>(カエサルは)</small>ここ<small>〔ケナブム〕</small>へ2日間で到着する。
*[[wikt:en:castra#Latin|Castris]] ante oppidum [[wikt:en:positus#Participle|positis]],
**城塞都市の前に陣営を設置したが、
*[[wikt:en:dies#Latin|diei]] [[wikt:en:tempus#Latin|tempore]] [[wikt:en:exclusus#Latin|exclusus]]
**日の時刻<small>〔夕刻〕</small>によって妨げられたので、
*in posterum [[wikt:en:oppugnatio#Latin|oppugnationem]] [[wikt:en:differt|differt]],
**翌日に攻囲を延期する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:in posterum = in [[wikt:en:posterus#Latin|posterum]] [[wikt:en:diem#Latin|diem]]「翌日に」)</span>
*[[wikt:en:quisque#Latin|quaeque]] ad eam rem [[wikt:en:usus#Latin|usui]] [[wikt:en:sint#Latin|sint]],
**その事<small>〔攻囲〕</small>に有益になることは何であれ、
*[[wikt:en:miles#Latin|militibus]] [[wikt:en:imperat|imperat]];
**兵士たちに命令する。
[[画像:Orleans.jpg|thumb|right|400px|ケナブム(Cenabum)すなわち現在の[[w:オルレアン|オルレアン]](Orléans)を流れるリゲル川(現在の[[w:ロワール川|ロワール川]])の景観。左が北岸のオルレアン聖十字架大聖堂、右がジョージ5世橋と思われる。]]
:
*<!--❻--><sup>(6)</sup> et, quod oppidum [[wikt:en:Genabum#Latin|Cenabum]] [[wikt:en:pons#Latin|pons]] [[wikt:en:flumen#Latin|fluminis]] [[wikt:en:Liger#Latin|Ligeris]] [[wikt:en:contingebat|contingebat]],
**城塞都市ケナブムには、リゲル川の橋が接していたので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:リゲル川は、現在の[[w:ロワール川|ロワール川]]。)</span>
*[[wikt:en:veritus#Latin|veritus]] ne [[wikt:en:noctu#Adverb|noctu]] ex oppido [[wikt:en:profugerent|profugerent]],
**夜間に城塞都市から<small>(敵勢が)</small>逃亡するのではないかと恐れて、
*[[wikt:en:duo#Latin|duas]] legiones in [[wikt:en:arma#Latin|armis]] [[wikt:en:excubare|excubare]] [[wikt:en:iubet#Latin|iubet]].
**<small>(カエサルは)</small>2個[[w:ローマ軍団|軍団]]に武装して寝ずの番をすることを命じる。
:
; ケナブムの住民たちが退避し始める
*<!--❼--><sup>(7)</sup> [[wikt:en:Genabensis#Noun|Cenabenses]] paulo ante mediam noctem
**ケナブムの人々は、真夜中の少し前に
*[[wikt:en:silentium#Latin|silentio]] ex oppido [[wikt:en:egressus#Participle|egressi]]
**沈黙のうちに城塞都市から出て、
*flumen [[wikt:en:transire#Latin|transire]] [[wikt:en:coeperunt|coeperunt]].
**川を渡り始めた。
:
; カエサルの諸軍団がケナブムを制圧する
*<!--❽--><sup>(8)</sup> Qua re per [[wikt:en:explorator#Latin|exploratores]] [[wikt:en:nuntiatus#Latin|nuntiata]]
**その事が偵察者たちによって報告されると、
*Caesar legiones, quas [[wikt:en:expeditus#Latin|expeditas]] esse [[wikt:en:iusserat|iusserat]]
**カエサルは、戦備を整えることを命じていた諸軍団を、
*[[wikt:en:porta#Latin|portis]] [[wikt:en:incensus#Participle|incensis]]
**<small>(ケナブムの)</small>城門を焼き打ちさせた後で、
*[[wikt:en:intromittit|intromittit]] atque oppido [[wikt:en:potitur|potitur]],
**<small>(軍団を)</small>送り込み、城塞都市を占領させて、
*[[wikt:en:perpaucus#Latin|perpaucis]] ex hostium numero [[wikt:en:desideratus#Latin|desideratis]] [[wikt:en:quin#Latin|quin]] [[wikt:en:cunctus#Latin|cuncti]] [[wikt:en:caperentur#Etymology_1|caperentur]],
**敵のうちからわずかな数を取り逃がしたが、むしろ皆がことごとく捕らえられた。
*quod [[wikt:en:pons#Latin|pontis]] atque [[wikt:en:iter#Latin|itinerum]] [[wikt:en:angustia#Latin|angustiae]] <u>multitudinis</u> fugam [[wikt:en:intercluserant|intercluserant]].
**──というのは、橋や道の狭さが、大勢の逃亡をさえぎったからである。──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:multitudinis|multitudinis]]<sub> (単数・属格)</sub> だが、<br> β系写本では [[wikt:en:multitudini|multitudini]]<sub> (単数・与格)</sub> となっている。)</span>
: <!-- [[wikt:en:| -->
; カエサル勢がケナブムを略奪・焼き討ち。リゲル川を渡ってビトゥリゲース族領へ達する
*<!--❾--><sup>(9)</sup> Oppidum [[wikt:en:diripit|diripit]] atque [[wikt:en:incendit|incendit]],
**<small>(カエサルは)</small>城塞都市を略奪し、焼き討ちして、
*[[wikt:en:praeda#Latin|praedam]] militibus [[wikt:en:donat#Latin|donat]],
**略奪品を兵士たちに与える。
*[[wikt:en:exercitus#Noun|exercitum]] <u>Ligerem</u> [[wikt:en:traducit|traducit]]
***軍隊にリゲル川を渡らせて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:Ligerem|Ligerem]] だが、<br> β系写本では Ligerim となっている。)</span>
*atque in [[wikt:en:Bituriges#Latin|Biturigum]] fines [[wikt:en:pervenit#Etymology_1|pervenit]].
*ビトゥリゲース族の領土に到達する。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===12節===
[[画像:Sancerre.jpg|thumb|right|250px|ビトゥリゲース族の城塞都市があったと考えられる[[w:サンセール|サンセール]]([[w:en:Sancerre|Sancerre]])の街並み。カエサルがケナブム(現[[w:オルレアン|オルレアン]])からリゲル川(現[[w:ロワール川|ロワール川]])沿いに当初の目的地であったゴルゴビナへ向かい、後にアウァーリクム(現[[w:ブールジュ|ブールジュ]])へ右折したと見なせば、この地がノウィオドゥーヌムであったとも考えられる。街の名 Sancerre の意味が「カエサルに捧げられた」であるという説もある。現在は[[w:ロワールワイン|ロワールワイン]]の産地として有名で、辛口の白ワインなどの銘柄「Sancerre」にもなっている。]]
[[画像:Neung-sur-Beuvron_église_Saint-Denis_1.jpg|thumb|right|250px|城塞都市ノウィオドゥーヌム(Noviodunum)の所在地として現在有力視されている[[w:ロワール=エ=シェール県|ロワール=エ=シェール県]]のヌン=スュル=ブーヴロン([[w:en:Neung-sur-Beuvron|Neung-sur-Beuvron]])のサン=ドニ教会。カエサルは当初の目的地であったボイイー族のゴルゴビナへは真っ直ぐ向かわずに大きく迂回しており、ケナブム(現[[w:オルレアン|オルレアン]])の南方約45kmにあるこの地点(Beuvron川沿いのNeung)がノウィオドゥーヌムであると推定されている。上空からは、ガッリア時代の城塞都市跡の輪郭が見て取れるという。しかしながら、ボイイ族からは遠い位置にある。]]
*<span style="background-color:#ffd;">[[/注解/12節]] {{進捗|00%|2026-02-02}}</span>
;ビトゥリゲース族のノウィオドゥーヌムを降すが、敵の騎兵が来援
:
*<!--❶--><sup>(1)</sup> [[wikt:en:Vercingetorix#Latin|Vercingetorix]], ubi de Caesaris [[wikt:en:adventus#Latin|adventu]] [[wikt:en:cognovit#Latin|cognovit]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、カエサルの到来について知るや否や、
*[[wikt:en:oppugnatio#Latin|oppugnatione]] <u>destitit</u>
**<small>(ボイイー族の城塞都市ゴルゴビナの)</small>攻略を取り止めて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> α系写本では [[wikt:en:destitit|destitit]]<sub> (完了形)</sub> だが、<br> β系写本や印刷本では [[wikt:en:desistit#Latin|desistit]]<sub> (現在形)</sub> となっている。)</span>
*atque [[wikt:en:obviam#Adverb|obviam]] Caesari [[wikt:en:proficiscitur|proficiscitur]].
**カエサルの方に向かって進発する。
:
*<!--❷--><sup>(2)</sup> Ille oppidum [[wikt:en:Biturigēs|Biturigum]] [[wikt:en:positus#Latin|positum]] in via [[wikt:en:Noviodunum#Latin|Noviodunum]] [[wikt:en:oppugnare#Latin|oppugnare]] [[wikt:en:instituerat|instituerat]].
**彼<small>〔カエサル〕</small>は、途中に位置しているビトゥリゲース族の[[w:オッピドゥム|城塞都市]]ノウィオドゥーヌムの攻略を決めていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:どこへの途中なのか明記されていないため、その解釈により場所についての解釈が変わるようである。)</span>
:
; カエサルの城塞都市ノウィオドゥーヌムへの降伏条件
*<!--❸--><sup>(3)</sup> [[wikt:en:qui#Determiner|Quo]] ex oppido
**その城塞都市から
*cum legati ad eum [[wikt:en:venissent|venissent]] [[wikt:en:oratum#Verb|oratum]] ut sibi [[wikt:en:ignosceret|ignosceret]] suaeque vitae [[wikt:en:consuleret|consuleret]],
**使節たちが彼<small>〔カエサル〕</small>のもとへ、自分たちを容赦して生命を助けるように嘆願するために、やって来たときに、
*ut celeritate reliquas res [[wikt:en:conficeret|conficeret]], [[wikt:en:qui#Determiner|qua]] [[wikt:en:pleraque#Latin|pleraque]] erat [[wikt:en:consecutus#Latin|consecutus]],
**<small>(カエサルは)</small>多くのことを実行してきた迅速さによって、ほかの事を成し遂げるために、
*arma [[wikt:en:conferri|conferri]],
**武具が運び集められること、
*[[wikt:en:quus#Latin|equos]] [[wikt:en:produci#Verb_2|produci]],
**馬匹が引き渡されること、
*obsides [[wikt:en:dari#Latin|dari]] [[wikt:en:iubet#Latin|iubet]].
**人質が供出されること、を命じる。
:
*<!--❹--><sup>(4)</sup> Parte iam obsidum [[wikt:en:traditus#Participle|tradita]],
**すでに人質の一部が移送されて、
*cum [[wikt:en:reliqua#Latin|reliqua]] [[wikt:en:administrarentur|administrarentur]],
**残り<small>(の人質たち)</small>が処置されていたときに、
*[[wikt:en:centurio#Latin|centurionibus]] et paucis [[wikt:en:miles#Latin|militibus]] [[wikt:en:intromissus#Latin|intromissis]], qui arma [[wikt:en:iumentum#Latin|iumenta]]<nowiki>que</nowiki> [[wikt:en:conquirerent|conquirerent]],
**<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby>たちや若干の兵士たちが、武器や[[w:使役動物|役畜]]を探し集めるべく<small>(城塞都市の中に)</small>送り込まれていたのだが、
*[[wikt:en:equitatus#Noun|equitatus]] hostium procul [[wikt:en:visus#Latin|visus]] est, qui [[wikt:en:agmen#Latin|agmen]] [[wikt:en:Vercingetorix#Latin|Vercingetorigis]] [[wikt:en:antecesserat|antecesserat]].
**ウェルキンゲトリークスの隊列に先行していた敵の[[w:騎兵|騎兵隊]]が遠くに望見された。
:
; ウェルキンゲトリークスの来援に気づいた城塞の者たちが、籠城に転じる
*<!--❺--><sup>(5)</sup> Quem [[wikt:en:simulatque|simulatque]] [[wikt:en:oppidanus#Noun|oppidani]] [[wikt:en:conspexerunt|conspexerunt]] atque in [[wikt:en:spes#Latin|spem]] [[wikt:en:auxilium#Latin|auxilii]] [[wikt:en:venerunt|venerunt]],
**それ<small></small>を城塞都市の者たちが視認して、救援の希望を抱くや否や、
*[[wikt:en:clamor#Latin|clamore]] [[wikt:en:sublatus#Etymology_1|sublato]]
**雄叫びを上げて、
*arma capere,
**武具を取ること、
*portas [[wikt:en:claudere#Etymology_1|claudere]],
**城門を閉じること、
*[[wikt:en:murus#Latin|murum]] [[wikt:en:complere|complere]] [[wikt:en:coeperunt|coeperunt]].
**城壁を<small>(兵で)</small>満たすこと、を始めた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:sublato は [[wikt:en:tollo|tollo]] の分詞)</span>
: <!-- [[wikt:en:| -->
; 城塞民たちの心変わりに感づいたローマ人の将兵たちが城外に撤収する
*<!--❻--><sup>(6)</sup> [[wikt:en:centurio#Latin|Centuriones]] in oppido,
**城塞都市の中の<small>(カエサルの配下の)</small>百人隊長たちは、
*cum ex [[wikt:en:significatio#Latin|significatione]] Gallorum [[wikt:en:novus#Latin|novi]] [[wikt:en:aliquis#Latin|aliquid]] ab iis [[wikt:en:iniri#Latin|iniri]] consilii [[wikt:en:intellexissent|intellexissent]],
**ガッリア人たちの兆候から、彼らによる何らかの新たな謀りごとが始められていると察知していたので、
*[[wikt:en:gladius#Latin|gladiis]] [[wikt:en:destrictus#Latin|destrictis]]
**<ruby><rb>[[w:グラディウス (武器)|長剣]]</rb><rp>(</rp><rt>グラディウス</rt><rp>)</rp></ruby> を抜いて、
*portas [[wikt:en:occupaverunt|occupaverunt]]
**城門を占拠して、
*suosque omnes [[wikt:en:incolumis#Latin|incolumes]] [[wikt:en:receperunt|receperunt]].
**配下たち皆を無傷なままで退却させた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===13節===
*<span style="background-color:#ffd;">[[/注解/13節]] {{進捗|00%|2026-02-15}}</span>
[[画像:Caesar's_campaign_to_Noviodunum_in_52BC.png|thumb|right|250px|ノウィオドゥーヌムに至るカエサルの進路(青線)および[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の進路(赤線)。青字名は親ローマ部族、赤字名は反ローマ部族。カエサルはアゲディンクムを発してからウェッラウノドゥーヌム、ケナブム、ノウィオドゥーヌムを続けて降し、ボイイー族のゴルゴビナ攻略を諦めたウェルキンゲトリークスもノウィオドゥーヌム来援に駆けつけて来た。ここに、初めて両軍が騎兵戦で激突することになった。]]
;同盟軍の騎兵を撃退、城塞都市を再び降して、アウァーリクム攻めに向かう
:
; カエサルが、騎兵戦の切り札としてゲルマーニア騎兵を繰り出す
*<!--❶--><sup>(1)</sup> Caesar ex castris [[wikt:en:equitatus#Latin|equitatum]] [[wikt:en:educi#Latin|educi]] [[wikt:en:iubet#Latin|iubet]],
**カエサルは、陣営から[[w:騎兵|騎兵隊]]を進発させることを命じて、
*<u>[[wikt:en:proelium#Latin|proelium]]</u> [[wikt:en:equester#Latin|equestre]] [[wikt:en:committit|committit]];
**<small>(ウェルキンゲトリークス勢と)</small>騎兵戦を交える。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> α系写本では proelium だが、<br> β系写本では proelium<u>que</u> となっている。)</span>
*[[wikt:en:laborans#Latin|laborantibus]] iam suis
**配下の者たちがすでに苦戦していたときに、
*[[wikt:en:Germanus#Adjective|Germanos]] [[wikt:en:eques#Latin|equites]] circiter CCCC([[wikt:en:quadringentos|quadringentos]]) [[wikt:en:submittit|submittit]],
**<small>(カエサルは)</small>[[w:ゲルマニア|ゲルマーニア]]人の騎兵たち約400騎を救援に派遣する。
*quos ab [[wikt:en:initium#Latin|initio]] <u>habere [[wikt:en:secum#Latin|secum]]</u> [[wikt:en:instituerat|instituerat]].
**その者らは<small>(戦いの)</small>当初から自分のそばに保持すると決めていたものであった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> χ系・B・M・S写本では habere secum だが、<br> β系・L・N写本では secum habere となっている。)</span>
:
; ゲルマーニア騎兵が、ウェルキンゲトリークス配下の騎兵を一蹴する
*<!--❷--><sup>(2)</sup> Eorum [[wikt:en:impetus#Latin|impetum]] [[wikt:en:Galli#Latin|Galli]] [[wikt:en:sustineo#Latin|sustinere]] non [[wikt:en:potuerunt|potuerunt]]
**彼ら<small>〔ゲルマーニア人騎兵〕</small>の突撃に<small>(敵側の)</small>ガッリア人たちは持ちこたえることができず、
*atque in fugam [[wikt:en:coniectus#Participle|coniecti]]
**敗走に追いやられて、
*multis [[wikt:en:amissus#Latin|amissis]]
**大勢の者を失い、
*se ad [[wikt:en:agmen#Latin|agmen]] [[wikt:en:receperunt|receperunt]].
**<small>(後方にいたウェルキンゲトリークスの)</small>隊列に退却した。
:
; 城塞都市ノウィオドゥーヌムがカエサルの軍門に降る
*Quibus [[wikt:en:profligatus#Latin|profligatis]],
**彼ら<small>〔ウェルキンゲトリークスの騎兵隊〕</small>が制圧されると、
*rursus [[wikt:en:oppidanus#Noun|oppidani]] [[wikt:en:perterritus#Latin|perterriti]]
**[[w:オッピドゥム|城塞都市]]<small>〔ノウィオドゥーヌム〕</small>の者たちは再び怖れをなして、
*[[wikt:en:comprehensus#Latin|comprehensos]] eos, quorum [[wikt:en:opera#Latin|opera]] [[wikt:en:plebs#Latin|plebem]] [[wikt:en:concitatus#Latin|concitatam]] [[wikt:en:existimabant|existimabant]],
**その働きかけによって民衆を扇動したと<small>(城塞の民が)</small>考えていたところの者たちを拘束して、
*ad Caesarem [[wikt:en:perduxerunt|perduxerunt]]
**カエサルのもとへ連行して、
*seseque ei [[wikt:en:dediderunt|dediderunt]].
**自分たちも彼<small>〔カエサル〕</small>に降伏した。
: <!-- [[wikt:en:| -->
; カエサルが、ビトゥリゲース族の城塞都市アウァーリクムを目指す
*<!--❸--><sup>(3)</sup> Quibus rebus [[wikt:en:confectus#Latin|confectis]],
**それらの事が成し遂げられると、
*Caesar ad oppidum [[wikt:en:Avaricum#Latin|Avaricum]],
**カエサルは、[[w:オッピドゥム|城塞都市]]アウァーリクムへ、
*quod erat [[wikt:en:maximus#Latin|maximum]] [[wikt:en:munitissimus#Latin|munitissimum]]<nowiki>que</nowiki> in finibus [[wikt:en:Bituriges#Latin|Biturigum]] atque [[wikt:en:ager#Latin|agri]] [[wikt:en:fertilissimus#Latin|fertilissima]] [[wikt:en:regio#Latin|regione]],
**──それはビトゥリゲース族の領土で耕地の最も肥沃な地方にあり、最大かつ最も要塞化されていたが、──
*[[wikt:en:profectus#Etymology_3|profectus]] est,
**<small>(そこへ)</small>出発した。
*quod eo oppido [[wikt:en:receptus#Latin|recepto]]
**──というのは、その城塞都市を獲得することで、
*[[wikt:en:civitas#Latin|civitatem]] [[wikt:en:Bituriges#Latin|Biturigum]] se in [[wikt:en:potestas#Latin|potestatem]] [[wikt:en:redacturus#Latin|redacturum]] [[wikt:en:confidebat|confidebat]].
**ビトゥリゲースの部族国家を<small>(カエサルの)</small>隷下に引き戻すであろうと、確信していたからである──。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
==アウァーリクム攻略戦==
===14節===
*<span style="background-color:#ffd;">[[/注解/14節]] {{進捗|00%|2026-03-08}}</span>
;ウェルキンゲトリークスが兵站妨害と焦土戦術を決断
:
*<!--❶--><sup>(1)</sup> [[wikt:en:Vercingetorix#Latin|Vercingetorix]] tot [[wikt:en:continuus#Latin|continuis]] [[wikt:en:incommodum#Latin|incommodis]] [[wikt:en:Vellaunodunum#Latin|Vellaunoduni]], [[wikt:en:Genabum#Latin|Cenabi]], [[wikt:en:Noviodunum#Latin|Novioduni]] [[wikt:en:acceptus#Latin|acceptis]]
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、ウェッラウノドゥーヌム、ケナブム、ノウィオドゥーヌムと、このような多くの引き続く敗北をこうむると、
*suos ad [[wikt:en:concilium#Latin|concilium]] [[wikt:en:convocat#Latin|convocat]].
**麾下の者たちを会合へ召集する。
: <!-- [[wikt:en:| -->
; ウェルキンゲトリークスが、ローマ勢の糧道を断つことを提言
*<!--❷--><sup>(2)</sup> [[wikt:en:docet|Docet]] longe alia ratione esse bellum [[wikt:en:gerendus#Latin|gerendum]] atque antea [[wikt:en:gestus#Participle|gestum]] sit.
**以前に遂行されていたのとはまったく別の作戦で戦争が遂行されるべきである、と説く。
*Omnibus [[wikt:en:modus#Latin|modis]] huic rei studendum, ut [[wikt:en:pabulatio#Latin|pabulatione]] et [[wikt:en:commeatus#Noun|commeatu]] Romani [[wikt:en:prohibeantur|prohibeantur]].
**ローマ人たちが[[w:糧秣|糧秣]]徴発と物資輸送を妨げられるべく、この事をあらゆる方法で追求するべきだ。
:
*<!--❸--><sup>(3)</sup> Id esse facile,
**そのことは、容易である。
*quod [[wikt:en:equitatus#Latin|equitatu]] ipsi [[wikt:en:abundent#Latin|abundent]]
**というのは<small>(我々ガッリア勢)</small>自身は[[w:騎兵|騎兵隊]]がたくさんおり、
*et quod anni tempore [[wikt:en:subleventur|subleventur]].
**<small>(冬という)</small>時季に支えられているのだから。
:
; ローマ人が穀物倉に群がるところを騎兵で襲撃するべし
*<!--❹--><sup>(4)</sup> [[wikt:en:pabulum#Latin|Pabulum]] [[wikt:en:secari|secari]] non posse;
**<small>(この時季には)</small><ruby><rb>[[w:秣|秣]]</rb><rp>(</rp><rt>まぐさ</rt><rp>)</rp></ruby> は刈り取られることができない。
*[[wikt:en:necessario#Adverb|necessario]] [[wikt:en:dispersus#Latin|dispersos]] hostes ex [[wikt:en:aedificium#Latin|aedificiis]] [[wikt:en:petere|petere]];
**敵たち<small>〔ローマ勢〕</small>はやむなく分散して、家屋から<small>(糧秣を)</small>求める。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ほとんどの会話が間接話法を採る本書で、<br> ローマ勢が「敵」hostes と表現されることは極めてまれである。)</span>
*hos omnes [[wikt:en:cotidie#Latin|cotidie]] ab [[wikt:en:eques#Latin|equitibus]] <u>deleri</u> posse.
**これら皆を日々に<small>(ガッリア側の)</small>騎兵隊によって壊滅させることができる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系写本では [[wikt:en:deleri|deleri]]「滅ぼされる」だが、<br> α系写本では [[wikt:en:diligi#Latin|diligi]]「分断される」となっている。)</span>
:
; 焦土戦術をもって、ローマ人と軍馬を飢えさせるべし
*<!--❺--><sup>(5)</sup> Praeterea [[wikt:en:salus#Latin|salutis]] causa rei [[wikt:en:familiaris#Adjective|familiaris]] [[wikt:en:commodum#Latin|commoda]] [[wikt:en:neglegendus#Latin|neglegenda]];
**さらに<small>(同盟諸部族に共通の)</small>安全のために、私有資産の利益はなおざりにされるべきだ。
*[[wikt:en:vicus#Latin|vicos]] atque [[wikt:en:aedificium#Latin|aedificia]] [[wikt:en:incendi#Verb_2|incendi]] [[wikt:en:oportet#Latin|oportere]]
**<small>(以下のような領域の)</small>村々や建物は焼かれるべきだ。
*hoc spatio ab Boia quoque versus, quo [[wikt:en:pabulandi#Verb|pabulandi]] causa [[wikt:en:adire#Latin|adire]] posse [[wikt:en:videantur|videantur]].
**[[w:ボイイ族|ボイイー族]]のところから四方八方へ糧秣徴発するために赴くことができると思われる領域では。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:主要写本ω にある ab Boia「ボイイー族のところから」は、<br> 現代では「街道から」ab via と修正読みされることが多い。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:quoque#Latin|quōque]] [[wikt:en:versus#Adverb|versus]] = [[wikt:en:quisque#Latin|quōquō]] versus「あらゆる方向へ」)</span>
[[画像:Eglise_saint_parize_le_chatel.jpg|thumb|right|250px|ボイイ族(Boii)の領内であったと思われる現在のサン=パリーズ=ル=シャテルの教会。ボイイー族の首邑ゴルゴビナは、[[w:ニエーヴル県|ニエーヴル県]]のサン=パリーズ=ル=シャテル([[w:en:Saint-Parize-le-Châtel|Saint-Parize-le-Châtel]])あるいは[[w:シェール県|シェール県]]のラ・ゲルシュ=スュル=ローボワ([[w:en:La Guerche-sur-l'Aubois|La Guerche-sur-l'Aubois]])の近辺にあったと推定されている。]]
:
*<!--❻--><sup>(6)</sup> Harum ipsis rerum copiam [[wikt:en:suppeto#Latin|suppetere]],
**<small>(ガッリア勢)</small>自身には、これらの物は、豊富に貯えてある。
*quod quorum in finibus bellum [[wikt:en:geratur|geratur]], eorum [[wikt:en:ops#Noun_4|opibus]] [[wikt:en:subleventur|subleventur]];
**──というのは、戦争が遂行される領土内の者たちの、彼らの助力に支えられているからだ。──
:
*<!--❼--><sup>(7)</sup> Romanos <u>aut</u> [[wikt:en:inopia#Latin|inopiam]] non [[wikt:en:laturus#Latin|laturos]] <span style="color:#009900;">(esse)</span>
**ローマ人たちは、あるいは<small>(糧食の)</small>欠乏に耐えられないであろうし、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:aut#Latin|aut]] ~ aut …「あるいは~あるいは…」)</span>
*<u>aut</u> magno <u>cum</u> periculo longius <u>ab</u> castris [[wikt:en:processurus#Latin|processuros]] <span style="color:#009900;">(esse)</span>;
**あるいは大きな危険とともに陣営からより遠くに進み出るであろう。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:cum は、ρ系写本・写本Tの記述で、<br> α系写本・写本Vにはない。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ab は、α系・ρ系写本・写本Vの記述で、写本Tでは a となっている。)</span>
:
*<!--❽--><sup>(8)</sup> neque [[wikt:en:interesse#Latin|interesse]], ipsos<u>ne</u> [[wikt:en:interficiant|interficiant]], [[wikt:en:impedimentum#Latin|impedimentis]]<u><nowiki>ne</nowiki></u> [[wikt:en:exuant|exuant]],
**<small>(ローマ人の)</small>当人たちを殺戮するか、輜重を奪い取るか、<small>(どちらであろうが)</small>違いはない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:-ne#Latin|-ne]] は疑問小辞。~ -ne, … -ne 「~か、…か」)</span>
*quibus [[wikt:en:amissus#Latin|amissis]] bellum [[wikt:en:geri#Latin|geri]] non [[wikt:en:possit|possit]].
**それら<small>〔輜重〕</small>を失えば、戦争を遂行することができないのだから。
:
*<!--❾--><sup>(9)</sup> Praeterea oppida [[wikt:en:incendi#Verb_2|incendi]] [[wikt:en:oportet#Latin|oportere]],
**さらに、<small>(以下のような)</small>[[w:オッピドゥム|城塞都市]]は焼かれなければならない。
*quae non [[wikt:en:munitio#Latin|munitione]] et loci natura <u>ab omni</u> sint <u>periculo</u> [[wikt:en:tutus#Latin|tuta]],
**防塁や地勢によってあらゆる危険から守られていない<small>(城塞都市は)</small>。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ab [[wikt:en:omni#Latin|omni]] [[wikt:en:periculum#Latin|periculo]] 「あらゆる危険から」)</span>
*<u>neu</u> suis sint ad <u>detrectandam</u> [[wikt:en:militia#Latin|militiam]] [[wikt:en:receptaculum#Latin|receptacula]]
**麾下の者たちにとっては<small>(城塞都市が)</small>[[w:兵役逃れ|兵役を忌避すること]]のための隠れ場所になることがないように、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:neu#Latin|neu]] は α系写本の記述で、β系写本では [[wikt:en:ne#Latin|ne]] となっている。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:detrectandam|detrectandam]] は α系・ρ系写本の表記で、π系写本では [[wikt:en:detractandam|detractandam]] となっている。)</span>
*neu [[wikt:en:Romani#Latin|Romanis]] [[wikt:en:propositus#Latin|proposita]] ad [[wikt:en:copia#Latin|copiam]] [[wikt:en:commeatus#Noun|commeatus]] [[wikt:en:praeda#Latin|praedam]]<nowiki>que</nowiki> [[wikt:en:tollendus#Latin|tollendam]],
**ローマ人たちにとって<small>(城塞都市が)</small>豊富な物資や戦利品を奪うための置き場所ともならないように。
:
*<!--❿--><sup>(10)</sup> Haec si [[wikt:en:gravis#Latin|gravia]] aut [[wikt:en:acerbus#Latin|acerba]] [[wikt:en:videantur|videantur]],
**もし、これら<small>(の作戦)</small>が厳しい、または苦しいと見えるとしても、
*multo illa [[wikt:en:graviter#Latin|gravius]] <u>aestimare</u>, [[wikt:en:liber#Noun_6|liberos]], [[wikt:en:coniunx#Latin|coniuges]] in [[wikt:en:servitus#Latin|servitutem]] [[wikt:en:abstrahi|abstrahi]], ipsos [[wikt:en:interfici|interfici]];
**それより、子供や配偶者たちが奴隷状態で連れ去られ、自身が殺されることの方が、はるかに厳しいと判断されるべきだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:aestimare|aestimare]] だが、 <br> β系写本では [[wikt:en:aestimari|aestimari]] [[wikt:en:debere|debere]] となっている。)</span>
*quae sit [[wikt:en:necesse#Latin|necesse]] [[wikt:en:accido#Etymology_1|accidere]] [[wikt:en:victus#Participle|victis]].
**それらのことは、打ち負かされた者たちには、起こることが必然なのである。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===15節===
[[画像:Bourges_-_002_-_Low_Res.jpg|thumb|right|300px|'''アウァーリクム'''(Avaricum)すなわちビトゥリゲース族(Bituriges)の名を残すともいわれる現在の[[w:ブールジュ|ブールジュ]](Bourges)の[[w:サン=テチエンヌ大聖堂 (ブールジュ)|サン=テティエンヌ大聖堂]]([[w:世界遺産|世界遺産]])。この街はガッリア時代からこの地方の中心的な城塞都市であり、現代ではそれほど大都会ではないが、世界遺産の大聖堂や音楽祭などで広く知られている。]]
[[画像:Bourges.JPG|thumb|right|300px|アウァーリクムすなわち[[w:ブールジュ|ブールジュ]]の大聖堂から眺めた街並み。'''ビトゥリゲース族'''はかつてはイタリア北部に移住したこともある強大な部族で、この当時はブルディガラ(Burdigala:現在の[[w:ボルドー|ボルドー]])周辺にいたビトゥリゲース・ウィウィスキ族(Bituriges Vivisci)およびアウァーリクム周辺にいた'''ビトゥリゲース・クビ族'''(Bituriges Cubi)の二派に分かれていた。『ガリア戦記』に登場するのはビトゥリゲース・クビ族の方である。]]
*<span style="background-color:#ffd;">[[/注解/15節]] {{進捗|00%|2026-03-08}}</span>
;焦土戦術開始、しかしアウァーリクムの防衛を決定
:
; 焦土戦術として、ビトゥリゲース族の街々が焼かれる
*<!--❶--><sup>(1)</sup> Omnium [[wikt:en:consensus#Latin|consensu]]
**<small>(会合の参加者)</small>全員の合意により
*hac [[wikt:en:sententia#Latin|sententia]] [[wikt:en:probatus#Latin|probata]],
**<small>(ウェルキンゲトリークスの)</small>この意向が承認されると、
*uno die [[wikt:en:amplius|amplius]] [[wikt:en:viginti|viginti]]<sub> (XX)</sub> [[wikt:en:urbs#Latin|urbes]] [[wikt:en:Bituriges#Latin|Biturigum]] [[wikt:en:incenduntur|incenduntur]].
**一日で、20より多いビトゥリゲース族の街々が焼かれる。
:
; ほかの諸部族の街々も焼かれる
*<!--❷--><sup>(2)</sup> Hoc idem fit in reliquis [[wikt:en:civitas#Latin|civitatibus]]:
**これと同じことが、ほかの諸部族でも行なわれて、
*in omnibus partibus
**あらゆる方面において、
*[[wikt:en:incendium#Latin|incendia]] [[wikt:en:conspiciuntur|conspiciuntur]];
**炎上が望見される。
*quae <u>etsi</u> magno cum [[wikt:en:dolor#Latin|dolore]] omnes [[wikt:en:ferebant|ferebant]],
**それらの皆が大きな悲嘆とともに耐えていたとしても、
*<u>tamen</u> hoc sibi [[wikt:en:solacium#Latin|solacii]] [[wikt:en:proponebant|proponebant]],
**しかし、自分らにとっての<small>(以下の)</small>慰めを抱いていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:etsi#Latin|etsi]] ~ [[wikt:en:tamen#Latin|tamen]] …<br> 「~としても、にもかかわらず…」)</span>
*quod se prope [[wikt:en:exploratus#Latin|explorata]] [[wikt:en:victoria#Latin|victoria]]
**勝利はほぼ確実なものとされて、
*celeriter [[wikt:en:amissus#Latin|amissa]] [[wikt:en:reciperaturus#Latin|reciperaturos]] <span style="color:#009900;">(esse)</span>
**失ったものを速やかに回復するであろう、
*[[wikt:en:confidebant|confidebant]].
**と確信していたことである。
:
; アウァーリクムは、焦土戦術か、それとも防衛すべきか?
*<!--❸--><sup>(3)</sup> [[wikt:en:deliberatur|Deliberatur]] de [[wikt:en:Avaricum#Latin|Avarico]] in [[wikt:en:communis#Latin|communi]] [[wikt:en:concilium#Latin|concilio]], [[wikt:en:incendi#Latin|incendi]] <u>placeret</u> an [[wikt:en:defendi#Latin|defendi]].
**合同の会合において、アウァーリクムについて (も) 焼き討ちが良いか、あるいは防衛か、が吟味される。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:placeret|placeret]]<sub> (接続法・未完了過去)</sub> だが、<br> β系写本では [[wikt:en:placeat|placeat]]<sub> (接続法・現在)</sub> となっている。)</span>
:
; ビトゥリゲース族が、要害であるアウァーリクムの防衛を懇願する
*<!--❹--><sup>(4)</sup> [[wikt:en:procumbunt|Procumbunt]] omnibus Gallis ad pedes [[wikt:en:Bituriges#Latin|Bituriges]],
**<small>(会合に参加していた)</small>すべてのガッリア人の足元へ、ビトゥリゲース族の者たちはひれ伏す。
*ne [[wikt:en:pulcherrimus#Latin|pulcherrimam]] prope <u>[[wikt:en:totus#Latin|totius]] Galliae</u> [[wikt:en:urbs#Latin|urbem]], quae <u>et</u> [[wikt:en:praesidium#Latin|praesidio]] et [[wikt:en:ornamentum#Latin|ornamento]] sit [[wikt:en:civitas#Latin|civitati]],
**ほぼ全ガッリアの街々で最も美しいもの、部族にとっては要害でも誉れでもあるものを、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:totius Galliae は α系写本の語順で、β系写本では Galliae totius となっている。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et は β系写本にはあるが、α系写本にはない。)</span>
*suis manibus [[wikt:en:succendo#Latin|succendere]] [[wikt:en:cogerentur|cogerentur]];
**自分たちの手で燃やすことを強いられないように、と(懇願した)。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ne ~ cogerentur;~を強いられないように)</span>
:
; アウァーリクムの地の利
*<!--❺--><sup>(5)</sup> facile se loci natura [[wikt:en:defensurus#Latin|defensuros]] [[wikt:en:dicunt|dicunt]],
**自分たちは<small>(アウァーリクムを)</small>地勢によって容易に防衛するだろう、と述べる。
*quod prope ex omnibus partibus [[wikt:en:flumen#Latin|flumine]] et [[wikt:en:palus#Latin|palude]] [[wikt:en:circumdatus#Latin|circumdata]]
**というのは<small>(アウァーリクムは)</small>ほぼあらゆる方向から川や沼地で囲まれており、
*unum habeat et [[wikt:en:perangustus#Latin|perangustum]] [[wikt:en:aditus#Latin|aditum]].
**一つだけ、非常に狭い進入路を持っているからだ。
[[画像:Bourges_2.JPG|thumb|right|300px|アウァーリクムすなわち[[w:ブールジュ|ブールジュ]]の大聖堂から眺めた沼地。イェーヴル川([[w:fr:Yèvre (Cher)|fr:Yèvre]])と沼地は、カエサルが書いたようにガッリア時代からこの街を囲んでいる。]]
:
; アウァーリクムの防衛が認められる
*<!--❻--><sup>(6)</sup> [[wikt:en:datur#Latin|Datur]] [[wikt:en:petens#Latin|petentibus]] [[wikt:en:venia#Latin|venia]]
**<small>(アウァーリクムの防衛を)</small>求める者たちに許可が与えられる。
*[[wikt:en:dissuadens#Latin|dissuadente]] primo [[wikt:en:Vercingetorix#Latin|Vercingetorige]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は当初は思い止まらせていたが、
*post [[wikt:en:concedens#Latin|concedente]] et [[wikt:en:prex#Latin|precibus]] ipsorum et [[wikt:en:misericordia#Latin|misericordia]] [[wikt:en:vulgus#Latin|vulgi]].
**後には、彼ら当人の懇願にも、民衆への哀れみにも、譲歩した。
*[[wikt:en:defensor#Latin|Defensores]] [[wikt:en:oppidum#Latin|oppido]] [[wikt:en:idoneus#Latin|idonei]] [[wikt:en:deliguntur|deliguntur]].
**城塞都市の適切な防衛者たちが選ばれる。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===16節===
*<span style="background-color:#ffd;">[[/注解/16節]] {{進捗|00%|2026-03-22}}</span>
;アウァーリクムをめぐる両軍の駆け引き
:
; ウェルキンゲトリークスが、アウァーリクムから16マイル離れたところに宿営する
*<!--❶--><sup>(1)</sup> [[wikt:en:Vercingetorix#Latin|Vercingetorix]] [[wikt:en:minor#Latin|minoribus]] Caesarem [[wikt:en:iter#Latin|itineribus]] [[wikt:en:subsequitur|subsequitur]]
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、カエサルを緩やかな行軍で追尾して、
*et locum [[wikt:en:castra#Latin|castris]] [[wikt:en:eligit#Latin|deligit]] [[wikt:en:palus#Latin|paludibus]] [[wikt:en:silva#Latin|silvis]]<nowiki>que</nowiki> [[wikt:en:munitus#Latin|munitum]]
**沼地や森林で防御された地点を陣営のために選んだ。
*ab [[wikt:en:Avaricum#Latin|Avarico]] longe milia passuum [[wikt:en:sedecim#Latin|sedecim]]<sub> (XVI)</sub>.
**アウァーリクムから16<u>ローママイル</u>隔たっていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ミーッレ・パッスーム、ミーリア(ローママイル)|ローママイル]]は約1.48 kmで、16マイルは約24 km)</span>
:
; ウェルキンゲトリークスが、斥候を放ってアウァーリクムを探り、部下たちに指図する
*<!--❷--><sup>(2)</sup> Ibi per [[wikt:en:certus#Latin|certos]] [[wikt:en:explorator#Latin|exploratores]]
**そこで、一定の斥候たちを通して、
*in [[wikt:en:singulus#Latin|singula]] diei tempora, quae ad [[wikt:en:Avaricum#Latin|Avaricum]] <u>agerentur</u>, [[wikt:en:cognoscebat|cognoscebat]]
**日中の毎時、アウァーリクム近傍で行なわれていることを探知して、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:agerentur|agerentur]] だが、<br> β系写本では [[wikt:en:gererentur|gererentur]] となっている。)</span>
*et, [[wikt:en:quis#Latin|quid]] [[wikt:en:fieri#Latin|fieri]] [[wikt:en:vellet#Latin|vellet]], [[wikt:en:imperabat|imperabat]].
**<small>(彼自身が)</small>なされることを欲していることを<small>(麾下の者たちに)</small>命令していた。
:
; ウェルキンゲトリークスとローマ勢の糧秣調達をめぐる攻防
*<!--❸--><sup>(3)</sup> Omnes nostras [[wikt:en:pabulatio#Latin|pabulationes]] [[wikt:en:frumentatio#Latin|frumentationes]]<nowiki>que</nowiki> [[wikt:en:observabat|observabat]]
**我が方<small>〔ローマ勢〕</small>の[[w:糧秣|秣や糧食]]の徴発の一部始終を注視していて、
*[[wikt:en:dispersus#Latin|dispersos]]<nowiki>que</nowiki>, cum longius necessario [[wikt:en:procederent|procederent]], [[wikt:en:adoriebatur|adoriebatur]]
**<small>(ローマ勢が)</small>分散して、やむを得ずにはるか遠くに進み出たときに、<small>(ガッリア勢が)</small>襲いかかって、
*[[wikt:en:magnus#Latin|magno]]<nowiki>que</nowiki> [[wikt:en:incommodum#Latin|incommodo]] [[wikt:en:adficiebat|adficiebat]],
**<small>(ローマ勢に)</small>大きな損害を与えていた。
*[[wikt:en:etsi#Latin|etsi]], quantum [[wikt:en:ratio#Latin|ratione]] [[wikt:en:provideri|provideri]] [[wikt:en:poterat|poterat]], ab nostris [[wikt:en:occurrebatur|occurrebatur]],
**とはいえ、できるかぎり用心する判断により<small>(敵の襲撃を)</small>我が方<small>〔ローマ勢〕</small>によって阻止していた。
*ut [[wikt:en:incertus#Latin|incertis]] temporibus [[wikt:en:diversus#Latin|diversis]]<nowiki>que</nowiki> itineribus [[wikt:en:iretur|iretur]].
**不確定な時間帯にまったく別々の道を行き来するというように。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===17節===
[[画像:Carte_du_Cher.svg|thumb|right|250px|アウァーリクム、すなわち現在の[[w:ブールジュ|ブールジュ市]](Bourges)のあるフランス・[[w:シェール県|シェール県]]の地図。中心にブールジュがあり、右下(南東)のラ・ゲルシュ=スュル=ローボワ([[w:en:La Guerche-sur-l'Aubois|La Guerche-sur-l'Aubois]])の近辺にボイイー族の首邑ゴルゴビナ(Gorgobina)があったと推定されている。右(東)隣の[[w:ニエーヴル県|ニエーヴル県]](Nièvre)が[[w:ハエドゥイ族|ハエドゥイー族]]の版図であった。]]
*<span style="background-color:#ffd;">[[/注解/17節]] {{進捗|00%|2026-03-28}}</span>
;アウァーリクム攻囲に取りかかるローマ軍の糧秣欠乏
:
; カエサルが、アウァーリクム攻囲のための堡塁工事に着手
*<!--❶--><sup>(1)</sup> [[wikt:en:castra#Latin|Castris]] ad eam partem [[wikt:en:oppidum#Latin|oppidi]] [[wikt:en:positus#Participle|positis]] Caesar,
**カエサルは、[[w:オッピドゥム|城塞都市]]の<small>(以下に述べるような)</small>方面に陣営を設置して、
*quae [[wikt:en:intermissus#Latin|intermissa]] a flumine et a <u>paludibus</u>
**──<small>(その方面は)</small>川や沼地により<small>(外部から)</small>遮断されて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:paludibus|paludibus]] だが、<br> β系写本では [[wikt:en:palude#Latin|palude]] となっている。)</span>
*[[wikt:en:aditus#Noun_3|aditum]], ut supra [[wikt:en:diximus#Latin|diximus]], [[wikt:en:angustus#Latin|angustum]] [[wikt:en:habebat|habebat]],
**<u>前に述べたように</u>、狭い進入路を持っているというものであるが、──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#15節|15節]]⑤項では、<br> ほぼあらゆる方向から川や沼地で囲まれており、<br> 一つだけ、非常に狭い進入路を持っている、<br> と言及された。)</span>
*[[wikt:en:agger#Latin|aggerem]] [[wikt:en:apparare#Latin|apparare]],
**<small>(さらに)</small><ruby><rb>[[w:土塁|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby> を装備すること、
*[[wikt:en:vinea#Latin|vineas]] [[wikt:en:ago#Latin|agere]],
**<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby> を駆動すること、
*[[wikt:en:turris#Latin|turres]] duas [[wikt:en:constituo#Latin|constituere]] [[wikt:en:coepit|coepit]];
**2つの<ruby><rb>[[w:攻城塔|攻城櫓]]</rb><rp>(</rp><rt>トゥッリス</rt><rp>)</rp></ruby> を建てること、を始めた。
*nam [[wikt:en:circumvallo#Latin|circumvallare]] loci natura [[wikt:en:prohibebat|prohibebat]].
**なぜなら<small>(城塞都市を)</small>堡塁で囲むことを地勢が妨げていたからだ。
<div style="text-align:center;">
{|
|-
|[[画像:Caesar's Gallic war; (Allen and Greenough's ed.) (1898) (14781415375).jpg|thumb|right|350px|城壁(図中の左端)を攻略するために築かれた<ruby><rb>土塁</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby> の復元画([[ガリア戦記_第2巻#12節|第2巻12節]]で既出)。左上には、両軍の<ruby><rb>[[w:攻城塔|攻城櫓]]</rb><rp>(</rp><rt>トゥッリス</rt><rp>)</rp></ruby>が描かれている。]]
|[[画像:Bender - Vinea.JPG|thumb|right|350px|<ruby><rb>工作小屋</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby> [[wikt:en:vinea|vinea]] の復元画([[ガリア戦記_第2巻#12節|第2巻12節]]で既出)。敵の矢玉などから身を守りながら城壁に近づくために用いられたと考えられている。]]
|}
</div>
:
; カエサルが、同盟者であるボイイー族やハエドゥイー族に、糧秣徴発を促す
*<!--❷--><sup>(2)</sup> De re [[wikt:en:frumentarius#Adjective|frumentaria]]
**<small>(カエサルは)</small>[[w:糧秣|糧秣]]調達について、
*[[wikt:en:Boii#Latin|Boios]] atque [[wikt:en:Haedui#Latin|Haeduos]] [[wikt:en:adhortari|adhortari]] non [[wikt:en:destitit|destitit]];
**[[w:ボイイ族|ボイイー族]]や[[w:ハエドゥイ族|ハエドゥイー族]]を鼓舞することを止めなかった。
*quorum [[wikt:en:alter#Latin|alteri]], quod [[wikt:en:nullus#Determiner|nullo]] [[wikt:en:studium#Latin|studio]] [[wikt:en:agebant|agebant]], non multum [[wikt:en:adiuvabant|adiuvabant]],
**彼らのうち一方<small>〔ハエドゥイー族〕</small>は、何らの努力を行なわなかったので、あまり助けにならなかった。
*[[wikt:en:alter#Latin|alteri]] non magnis [[wikt:en:facultas#Latin|facultatibus]], quod [[wikt:en:civitas#Latin|civitas]] erat [[wikt:en:exiguus#Latin|exigua]] et [[wikt:en:infirmus#Latin|infirma]],
**他方<small>〔ボイイー族〕</small>は、貧弱かつ無力な部族であったので、大した貯えもなく、
*celeriter quod [[wikt:en:habuerunt|habuerunt]] [[wikt:en:consumpserunt|consumpserunt]].
**早々と持っていたものを消費し切ってしまった。
:
; 糧秣の欠乏が続くが、ローマの将兵たちが耐え抜く
*<!--❸--><sup>(3)</sup> [[wikt:en:summus#Latin|Summa]] [[wikt:en:difficultas#Latin|difficultate]] rei [[wikt:en:frumentarius#Adjective|frumentariae]] [[wikt:en:adfectus#Latin|adfecto]] [[wikt:en:exercitus#Noun|exercitu]]
**<small>(ローマ人の)</small>軍隊は糧秣調達の大いなる困難さに苦悩させられながらも、
*[[wikt:en:tenuitas#Latin|tenuitate]] [[wikt:en:Boii#Latin|Boiorum]],
**──<small>(その困難は)</small>ボイイー族の微力さ、
*[[wikt:en:indiligentia#Latin|indiligentia]] [[wikt:en:Haedui#Latin|Haeduorum]],
**ハエドゥイー族の怠慢、
*[[wikt:en:incendium#Latin|incendiis]] [[wikt:en:aedificium#Latin|aedificiorum]],
**<small>(敵勢による)</small>家屋の焼き打ちによるものであったが、──
*usque eo ut [[wikt:en:complures#Determiner|complures]] dies [[wikt:en:frumentum#Latin|frumento]] [[wikt:en:miles#Latin|milites]] [[wikt:en:caruerint|caruerint]]
**かなりの日々にわたって兵士たちは糧食を欠くまでになり、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:usque#Latin|usque]] eo ut ~「~まで」)</span>
*et [[wikt:en:pecus#Latin|pecore]] ex [[wikt:en:longinquior#Latin|longinquioribus]] [[wikt:en:vicus#Latin|vicis]] [[wikt:en:adactus#Latin|adacto]]
**かなり遠方の村々から家畜を駆り立てたので
*[[wikt:en:extremus#Latin|extremam]] [[wikt:en:fames#Latin|famem]] [[wikt:en:sustentarent|sustentarent]],
**極限の飢えに耐え通すまでになったのであるが、
*[[wikt:en:nullus#Determiner|nulla]] tamen <u>vox est ab iis</u> [[wikt:en:auditus#Latin|audita]] populi Romani [[wikt:en:maiestas#Latin|maiestate]] et [[wikt:en:superior#Latin|superioribus]] [[wikt:en:victoria#Latin|victoriis]] [[wikt:en:indignus#Latin|indigna]].
**しかしながら、ローマ人民の威厳やかつての勝利にふさわしからぬ声は、彼らから何ら聞かれなかった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:vox#Latin|vox]] est <u>ab</u> iis だが、<br> β系写本では <u>ex</u> iis vox est となっている。)</span>
:
; ローマ人将兵たちがカエサルに攻囲の継続を訴える
*<!--❹--><sup>(4)</sup> [[wikt:en:quin#Latin|Quin]] etiam Caesar cum in [[wikt:en:opus#Latin|opere]] [[wikt:en:singulus#Latin|singulas]] [[wikt:en:legio#Latin|legiones]] [[wikt:en:appellaret|appellaret]],
**いやそればかりか、カエサルが作業中のそれぞれの[[w:ローマ軍団|軍団]]に呼びかけたとき、
*et, si [[wikt:en:acerbe#Latin|acerbius]] [[wikt:en:inopia#Latin|inopiam]] [[wikt:en:ferrent#Latin|ferrent]], se [[wikt:en:dimissurus#Latin|dimissurum]] <span style="color:#009900;"><sub>(esse)</sub></span> [[wikt:en:oppugnatio#Latin|oppugnationem]] [[wikt:en:diceret|diceret]],
**もし、とても過酷に欠乏に耐えているのならば、自分は攻囲を放棄するであろう、とカエサルが言っていたときに、
:
*<!--❺--><sup>(5)</sup> [[wikt:en:universi#Latin|universi]] ab eo, ne id [[wikt:en:faceret|faceret]], [[wikt:en:petebant|petebant]] :
**<small>(各軍団の)</small>一同は、彼<small>〔カエサル〕</small>に、それ<small>〔攻囲の放棄〕</small>をしないように求めていた。
*sic se complures annos illo [[wikt:en:imperans#Latin|imperante]] [[wikt:en:meruisse|meruisse]],
**自分たちは<small>(以下のように)</small>幾年にもわたって彼<small>〔カエサル〕</small>の麾下で努めてきた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:sic ~ ut …「…のように~である」)</span>
*ut [[wikt:en:nullus#Determiner|nullam]] [[wikt:en:ignominia#Latin|ignominiam]] [[wikt:en:acciperent|acciperent]], <u>nusquam incepta</u> re [[wikt:en:discederent|discederent]]:
**何ら不名誉を蒙ってないし、事<small>〔戦役〕</small>が完遂されないまま<small>(戦列を)</small>離脱することは決してなかったのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:nusquam#Latin|nusquam]] [[wikt:en:inceptus#Latin|incepta]] だが、<br> β系写本では [[wikt:en:numquam#Latin|numquam]] [[wikt:en:infectus#Adjective|infecta]] となっている。)</span>
:
*<!--❻--><sup>(6)</sup> hoc se [[wikt:en:ignominia#Latin|ignominiae]] <u>loco [[wikt:en:laturus#Latin|laturos]]</u> <span style="color:#009900;"><sub>(esse)</sub></span>, si [[wikt:en:inceptus#Latin|inceptam]] [[wikt:en:oppugnatio#Latin|oppugnationem]] [[wikt:en:reliquissent|reliquissent]];
**もし<small>(自分たちが)</small>着手した攻囲を放棄してしまったならば、自分たちはこの状態を不名誉と見なすであろう。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系写本では loco laturos の語順だが、<br> α系写本では laturos loco の語順となっている。)</span>
:
*<!--❼--><sup>(7)</sup> <u>praestare</u> omnes [[wikt:en:perferre|perferre]] [[wikt:en:acerbitas#Latin|acerbitates]],
**あらゆる厳しさに持ちこたえることは<small>(以下のこと)</small>よりましである。
**:<span style="color:#009900;">(訳注:[[wikt:en:praestare|praestare]] ~ [[wikt:en:quam#Adverb|quam]] …「…よりも~がより優る」)</span>
*<u>quam</u> non [[wikt:en:civis#Latin|civibus]] Romanis, qui [[wikt:en:Genabum#Latin|Cenabi]] [[wikt:en:perfidia#Latin|perfidia]] Gallorum [[wikt:en:interissent|interissent]], [[wikt:en:parentarent|parentarent]].
**ケナブムでガッリア人たちの不義により滅びたローマ市民たちの仇討ちをしないよりも。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#3節|3節]]①項を参照。仇討ちをしないのなら、苦しむ方がましである、の意)</span>
:
*<!--❽--><sup>(8)</sup> Haec [[wikt:en:idem#Latin|eadem]] [[wikt:en:centurio#Latin|centurionibus]] [[wikt:en:tribunus#Latin|tribunis]]<nowiki>que</nowiki> [[wikt:en:miles#Latin|militum]]
**これらと同じことを、<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby>たちや<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>たちに、
*[[wikt:en:mandabant|mandabant]], ut per eos ad Caesarem [[wikt:en:deferrentur|deferrentur]].
**彼らを通じてカエサルに申し立てるように、依頼していた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===18節===
*<span style="background-color:#ffd;">[[/注解/18節]] {{進捗|00%|2026-04-13}}</span>
;カエサルがウェルキンゲトリークス不在の敵陣へ迫る
:
; カエサルは、ウェルキンゲトリークスが糧秣の欠乏によりローマ勢の糧秣徴発隊を襲撃に向かったと知る
*<!--❶--><sup>(1)</sup> Cum iam [[wikt:en:murus#Latin|muro]] [[wikt:en:turris#Latin|turres]] [[wikt:en:adpropinquassent#Latin|adpropinquassent]],
**すでに<small>(アウァーリクムの)</small>城壁に<small>(ローマ勢の)</small>[[w:攻城塔|攻城櫓]]が近づいていた際に、
*ex [[wikt:en:captivus#Noun|captivis]] Caesar [[wikt:en:cognovit#Latin|cognovit]],
**カエサルは、捕虜たちから<small>(以下のことを)</small>知った。
*[[wikt:en:Vercingetorix#Latin|Vercingetorigem]], [[wikt:en:consumptus#Latin|consumpto]] [[wikt:en:pabulum#Latin|pabulo]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は[[w:糧秣|糧秣]]を消費し切ると、
*castra [[wikt:en:movisse#Latin|movisse]] propius [[wikt:en:Avaricum#Latin|Avaricum]],
**陣営をアウァーリクムのより近くに移動させて、
*atque ipsum cum [[wikt:en:equitatus#Latin|equitatu]] [[wikt:en:expeditus#Noun|expeditis]]<nowiki>que</nowiki>, qui inter [[wikt:en:eques#Latin|equites]] [[wikt:en:proeliari#Verb|proeliari]] [[wikt:en:consuessent#Latin|consuessent]],
**彼自身は、[[w:騎兵|騎兵]]隊、および騎兵たちの間で争闘することに習熟していた[[w:軽装歩兵|軽装歩兵]]たちとともに、
*<u>insidiarum</u> causa eo [[wikt:en:profectus#Etymology_3|profectum]], quo nostros postero die [[wikt:en:pabulatum#Verb|pabulatum]] [[wikt:en:venturus#Latin|venturos]] [[wikt:en:arbitraretur#Latin|arbitraretur]].
**我が方<small>〔ローマ勢〕</small>が翌日に糧秣徴発にやって来るであろうと思われるところで待ち伏せするために、出発した、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:insidiarum|insidiarum]] だが、<br> β系写本では [[wikt:en:insidiandi#Latin|insidiandi]] となっている。)</span>
[[画像:AVARICUM Battaglia 52 aC.png|thumb|right|300px|アウァーリクム攻略戦の布陣図(<small>イタリア語</small>)。中央がアウァーリクム(AVARICUM)、右下の赤枠内がカエサルと8個軍団の陣営、赤い矢印の先端がローマ軍の土塁。左上の楕円形がウェルキンゲトリークスが移動させた陣営。]]
[[画像:Funerary chariot in the archeological museum of Strasbourg.jpg|thumb|right|300px|[[w:ハルシュタット文化|ハルシュタット文化]]の墳墓の副葬品として発掘された '''四輪荷馬車''' のレプリカ(仏ストラスブール考古学博物館)。]]
:
*<!--❷--><sup>(2)</sup> Quibus rebus [[wikt:en:cognitus#Participle|cognitis]]
**<small>(カエサルは)</small>それらの事情を知るや、
*media nocte [[wikt:en:silentium#Latin|silentio]] [[wikt:en:profectus#Etymology_3|profectus]]
**真夜中の静けさのうちに出発して、
*ad hostium castra [[wikt:en:mane#Adverb_2|mane]] [[wikt:en:pervenit#Etymology_2|pervenit]].
**敵の陣営の辺りへ朝方に到着した。
:
*<!--❸--><sup>(3)</sup> Illi, celeriter per [[wikt:en:explorator#Latin|exploratores]] [[wikt:en:adventus#Latin|adventu]] Caesaris [[wikt:en:cognitus#Participle|cognito]]
**あの者たちは、速やかに斥候たちを通じてカエサルの到来を知るや、
*<u>carros</u> [[wikt:en:impedimentum#Latin|impedimenta]]<nowiki>que</nowiki> sua in [[wikt:en:artior#Latin|artiores]] [[wikt:en:silva#Latin|silvas]] [[wikt:en:abdiderunt#Latin|abdiderunt]],
**自分たちの<u>四輪荷馬車</u>と[[w:輜重|輜重]]をとても深い森の中に隠して、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:四輪荷馬車 [[wikt:en:carrus#Latin|carrus]] は、例えば右の画像のものを参照。)</span>
*copias omnes in loco [[wikt:en:editus#Latin|edito]] atque [[wikt:en:apertus#Latin|aperto]] [[wikt:en:instruxerunt#Latin|instruxerunt]].
**全軍勢を高くそびえて開けている場所に配置した。
:
*<!--❹--><sup>(4)</sup> Qua re [[wikt:en:nuntiatus#Latin|nuntiata]]
**その事を報告されて、
*Caesar celeriter [[wikt:en:sarcina#Latin|sarcinas]] [[wikt:en:conferri#Latin|conferri]],
**カエサルは速やかに<small>(兵士たちの)</small>[[w:背嚢|背嚢]]が運び集められること、
*[[wikt:en:arma#Latin|arma]] [[wikt:en:expediri#Latin|expediri]] [[wikt:en:iussit#Verb|iussit]].
**武具が<small>(すぐ使えるように)</small>整えられることを命じた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===19節===
*<span style="background-color:#ffd;">[[/注解/19節]] {{進捗|00%|2026-04-20}}</span>
;丘の上のガッリア勢と沼沢を挟んで対峙する
:
; ガッリア勢の陣営の地勢
*<!--❶--><sup>(1)</sup> [[wikt:en:collis#Latin|Collis]] erat <u>leniter</u> ab [[wikt:en:infimus#Latin|infimo]] [[wikt:en:adclivis#Latin|adclivis]].
**<small>(ガッリア勢がいる)</small>丘陵はふもとから緩やかに、登り坂になっていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系・χ系・B・M・S・N<sup>c</sup> 写本では [[wikt:en:leviter#Latin|leviter]] 、<br> L・N写本では [[wikt:en:breviter#Latin|breviter]] だが、<br> より劣った写本 ''[[ガリア戦記/注解編/写本と校訂版#クリティカル・アパラトゥスとその略号|codd.deter.]]'' では [[wikt:en:leniter#Latin|leniter]] となっている。
*Hunc ex omnibus fere partibus [[wikt:en:palus#Latin|palus]] [[wikt:en:difficilis#Latin|difficilis]] atque [[wikt:en:impeditus#Latin|impedita]] [[wikt:en:cingebat#Latin|cingebat]]
**これ<small>〔丘陵〕</small>を、ほぼすべての方角から、不便で通りにくい沼地が取り巻いていて、
*non [[wikt:en:latior#Latin|latior]] [[wikt:en:pes#Latin|pedibus]] [[wikt:en:quinquaginta#Latin|quinquaginta]].
**<small>(その沼地は)</small>50<u>[[w:ペース (長さ)|ペース]]</u>より幅広くなかった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、50ペースは約15メートル弱。)</span>
:
; 丘の周囲を部族ごとに分かれて守備している
*<!--❷--><sup>(2)</sup> Hoc se [[wikt:en:collis#Latin|colle]] [[wikt:en:interruptus#Latin|interruptis]] [[wikt:en:pons#Latin|pontibus]]
**この丘陵において、橋梁を破却すると、
*Galli [[wikt:en:fiducia#Latin|fiducia]] loci [[wikt:en:continebant#Latin|continebant]]
**ガッリア人たちは、地勢を頼りに留まっていて、
*[[wikt:en:generatim#Latin|generatim]]<nowiki>que</nowiki> [[wikt:en:distributus#Latin|distributi]] in civitates
**<small>(軍勢を)</small>諸部族の種族ごとに分けて配置させて、
*omnia [[wikt:en:vadum#Latin|vada]] ac [[wikt:en:saltus#Etymology_2|saltus]] eius [[wikt:en:palus#Latin|paludis]] <u>certis custodiis</u> [[wikt:en:obtinebant#Latin|obtinebant]],
**その沼地の、すべての浅瀬や隘路を <u>一定の護衛兵たちによって</u> 占領していた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:certus#Latin|certis]] [[wikt:en:custodia#Latin|custodiis]] は β系写本の記述で、α系写本にはない。)</span>
*<u>sic</u> animo [[wikt:en:paratus#Latin|parati]] <u>ut</u>, si eam [[wikt:en:palus#Latin|paludem]] Romani [[wikt:en:perrumpo#Latin|perrumpere]] [[wikt:en:conarentur#Latin|conarentur]], [[wikt:en:haesitans#Latin|haesitantes]] [[wikt:en:premerent#Latin|premerent]] ex loco [[wikt:en:superior#Latin|superiore]];
**もしローマ勢がその沼地を強行突破せんと試みたならば、ぐずぐずしている者らを高地から圧倒する心積もりであった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:sic#Latin|sīc]] ~, [[wikt:en:ut#Latin|ut]] ・・・「…であるように~である」)</span>
:
; 両軍は互角か?
*<!--❸--><sup>(3)</sup> ut, qui [[wikt:en:propinquitas#Latin|propinquitatem]] loci [[wikt:en:videret#Latin|videret]],
**<small>(両軍の)</small>陣地が近接していることを見た者は、
*[[wikt:en:paratus#Latin|paratos]] prope [[wikt:en:aequus#Latin|aequo]] <u>Marte</u> ad [[wikt:en:dimicandum#Latin|dimicandum]] [[wikt:en:existimaret#Latin|existimaret]],
**<small>(ガッリア勢がローマ勢に対して)</small>ほぼ互角の戦い<small>(の条件)</small>で闘うつもりでいると考えただろう。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、[[wikt:en:Mars#Proper_noun_22|Mars]]「戦争の神マールス」ではなく、<br> [[wikt:en:Mars#Noun_4|Mars]]「戦争、闘い」そのものを指す。)</span>
; ガッリア勢は不利なのに虚勢を張っているのか?
*qui [[wikt:en:iniquitas#Latin|iniquitatem]] [[wikt:en:condicio#Latin|condicionis]] [[wikt:en:perspiceret#Latin|perspiceret]],
**<small>(ガッリア勢の)</small>条件の不利なことを見通した者は、
*[[wikt:en:inanis#Latin|inani]] [[wikt:en:simulatio#Latin|simulatione]] sese [[wikt:en:ostentare#Latin|ostentare]] [[wikt:en:cognosceret#Latin|cognosceret]].
**<small>(ガッリア勢が)</small>虚栄の見せかけで己を誇示していることを、理解しただろう。
:
; カエサルが、至近距離の敵への攻撃にいきり立つ将兵らを教え諭す
*<!--❹--><sup>(4)</sup> [[wikt:en:indignans#Latin|Indignantes]] [[wikt:en:miles#Latin|milites]] Gaesar,
**カエサルは<small>(ガッリア勢の誇示に)</small>憤慨している兵士たちに、
*quod [[wikt:en:conspectus#Noun_2|conspectum]] suum hostes <u>perferre</u> [[wikt:en:possent#Latin|possent]] [[wikt:en:tantulus#Latin|tantulo]] [[wikt:en:spatium#Latin|spatio]] [[wikt:en:interiectus#Latin|interiecto]],
**──というのも、これほどのわずかな距離しか介在してないのに、敵勢が自分らを<small>(平然と)</small>見据えていられるためだが──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:perferre#Latin|perferre]] だが、β系写本では [[wikt:en:ferre#Latin|ferre]] となっている。)</span>
*et signum proelii [[wikt:en:exposcens#Latin|exposcentes]] [[wikt:en:edocet#Latin|edocet]],
**および戦闘の合図を熱心に求めている者たちに対して<small>(以下のように)</small>説く。
*[[wikt:en:quantus#Latin|quanto]] [[wikt:en:detrimentum#Latin|detrimento]] et [[wikt:en:quot#Latin|quot]] [[wikt:en:vir#Latin|virorum]] [[wikt:en:fortis#Latin|fortium]] [[wikt:en:mors#Latin|morte]] [[wikt:en:necesse#Adverb|necesse]] sit [[wikt:en:constare#Latin|constare]] [[wikt:en:victoria#Latin|victoriam]];
**勝利を確実にすることが、どれほどの損害と、どれほど多くの勇敢な<ruby><rb>兵士</rb><rp>(</rp><rt>ウィル</rt><rp>)</rp></ruby>たちの死を必要とするか、を。
: <!-- [[wikt:en:| -->
; 多くのローマ兵が死に瀕すれば、カエサル自身が戦争犯罪で弾劾されるだろう
*<!--❺--><sup>(5)</sup> quos cum <u>sic</u> [[wikt:en:animus#Latin|animo]] [[wikt:en:paratus#Latin|paratos]] [[wikt:en:videat#Latin|videat]], <u>ut</u> [[wikt:en:nullus#Determiner|nullum]] pro sua [[wikt:en:laus#Latin|laude]] [[wikt:en:periculum#Latin|periculum]] [[wikt:en:recusent#Latin|recusent]],
**彼ら<small>〔兵士たち〕</small>が己の賞賛のためにいかなる危険をも辞さない心積もりであると<small>(カエサルは)</small>見て取ったので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:sic#Latin|sīc]] ~, [[wikt:en:ut#Latin|ut]] ・・・「…であるように~である」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:pro sua laude 「自らの賞賛のために」は、「カエサルの賞賛のために」と解することもできる。<br> しかし、共和制国家に忠誠を誓っているはずの兵士らが、カエサル個人のために命を投げ出そうとする記述は、<br> 野心家カエサルが軍隊を私兵化しようとしている野望をさらけ出すことになり、政敵たちを利することになる。)</span>
*[[wikt:en:summus#Latin|summae]] se [[wikt:en:iniquitas#Latin|iniquitatis]] [[wikt:en:condemnari#Latin|condemnari]] [[wikt:en:debere#Latin|debere]], [[wikt:en:nisi#Conjunction|nisi]] eorum [[wikt:en:vita#Latin|vitam]] sua [[wikt:en:salus#Latin|salute]] [[wikt:en:habeat#Latin|habeat]] [[wikt:en:carior#Latin|cariorem]].
**<small></small>彼ら<small>〔兵士〕</small>の生命を己<small>〔カエサル〕</small>の安全より貴重と思わない限り、自分<small>〔カエサル〕</small>は極度の不正のために告発されるに違いない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:すでにサビーヌスら多くのローマ市民が戦死しており、ここでさらに多くのローマ市民を死なせることは、<br> カエサルから軍隊を取り上げることを主張していた政敵たちから厳しく糾弾されることになったであろう。)</span>
: <!-- [[wikt:en:| -->
*<!--❻--><sup>(6)</sup> Sic [[wikt:en:miles#Latin|milites]] [[wikt:en:consolatus#Latin|consolatus]]
**<small>(カエサルは)</small>このように兵士たちを<ruby><rb>宥</rb><rp>(</rp><rt>なだ</rt><rp>)</rp></ruby>めて、
*eodem die [[wikt:en:reducit#Latin|reducit]] in castra
**同日に陣営の中に連れ戻して、
*[[wikt:en:reliquus#Latin|reliqua]]<nowiki>que</nowiki> quae ad [[wikt:en:oppugnatio#Latin|oppugnationem]] <u>[[wikt:en:pertinebant#Latin|pertinebant]] [[wikt:en:oppidum#Latin|oppidi]]</u> [[wikt:en:administrare#Latin|administrare]] [[wikt:en:instituit#Latin|instituit]].
**城塞都市<small>〔アウァーリクム〕</small>の攻略に関わっているほかのことに従事することを決めた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、χ系・B・M・S写本では pertinebant oppidi の語順だが、<br> L・N・β系写本では oppidi pertinebant の語順となっている。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===20節===
*<span style="background-color:#ffd;">[[/注解/20節]] {{進捗|00%|2026-05-04}}</span>
;ウェルキンゲトリークスが味方に弁明し、捕虜に問い質す
:
*<!--❶--><sup>(1)</sup> [[wikt:en:Vercingetorix#Latin|Vercingetorix]], cum ad suos [[wikt:en:redisset#Latin|redisset]], [[wikt:en:proditio#Latin|proditionis]] [[wikt:en:insimulatus#Latin|insimulatus]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、味方のもとに戻った際に、<small>(以下のことで)</small>裏切りだと非難されていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:以下、[[wikt:en:quod#Conjunction|quod]] ~ で箇条書き。)</span>
*quod [[wikt:en:castra#Latin|castra]] [[wikt:en:propius#Latin|propius]] [[wikt:en:Romani#Latin|Romanos]] [[wikt:en:movisset#Latin|movisset]],
**陣営をローマ人たちのより近くに移動させていたこと、
*quod cum omni [[wikt:en:equitatus#Noun|equitatu]] [[wikt:en:discessisset#Latin|discessisset]],
**全[[w:騎兵|騎兵隊]]とともに<small>(陣営を)</small>離れていたこと、
*quod sine [[wikt:en:imperium#Latin|imperio]] [[wikt:en:tantus#Latin|tantas]] [[wikt:en:copiae#Latin|copias]] [[wikt:en:reliquisset#Latin|reliquisset]],
**司令権<small>(を持つ者)</small>なしに、これほど多くの軍勢を置き去りにしていたこと、
*quod eius [[wikt:en:discessus#Noun|discessu]] [[wikt:en:Romani#Latin|Romani]] [[wikt:en:tantus#Latin|tanta]] [[wikt:en:opportunitas#Latin|opportunitate]] et [[wikt:en:celeritas#Latin|celeritate]] [[wikt:en:venissent#Latin|venissent]];
**彼<small>〔ウェルキンゲトリークス〕</small>の退去によりローマ人がこれほどの好機とこれほどの迅速さでやって来ていたこと、である。
:
*<!--❷--><sup>(2)</sup> non haec omnia [[wikt:en:fortuito#Latin|fortuito]] aut sine [[wikt:en:consilium#Latin|consilio]] [[wikt:en:accido#Etymology_1|accidere]] [[wikt:en:potuisse#Latin|potuisse]];
**──これらすべてが偶然に、あるいは謀りごとなしに起こることはあり得なかったのだ。
*[[wikt:en:regnum#Latin|regnum]] illum Galliae <u>malle</u> Caesaris [[wikt:en:concessus#Noun|concessu]] <u>quam</u> ipsorum habere [[wikt:en:beneficium#Latin|beneficio]]
**彼<small>〔ウェルキンゲトリークス〕</small>は<small>(ガッリア人)</small>自身の厚遇を得ることよりもむしろカエサルの許しにより[[w:ガリア|ガッリア]]の王権<small>(を持つこと)</small>を好んでいるのだ。──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:malle#Latin|malle]] ~ quam …「…よりも、むしろ~を好む(選ぶ)」)</span>
**:<span style="color:#009900;">(訳注:ウェルキンゲトリークスが王権を望むあまり、同盟部族の生命をカエサルに売り渡したということである。)</span>
[[画像:Vercingetorix_stater_n2_CdM_alternate.jpg|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の横顔が刻まれたガッリアの金貨(パリの[[w:ビブリオテーク・ナショナル|仏国立図書館]]貨幣部蔵)]]
:
; ━━ウェルキンゲトリークスの弁明が始まる━━
*<!--❸--><sup>(3)</sup> [[wikt:en:talis#Latin|tali]] [[wikt:en:modus#Latin|modo]] [[wikt:en:accusatus#Latin|accusatus]]
**こんな風に非難されて、
*ad haec [[wikt:en:respondit#Latin|respondit]]:
**<small>(ウェルキンゲトリークスは)</small>これらのことへ答えた。
*Quod [[wikt:en:castra#Latin|castra]] [[wikt:en:movisset#Latin|movisset]],
**陣営を移動させていたことは、
*[[wikt:en:factus#Latin|factum]] [[wikt:en:inopia#Latin|inopia]] [[wikt:en:pabulum#Latin|pabuli]],
**[[w:糧秣|糧秣]]の欠乏によりなされたのであり、
*etiam ipsis [[wikt:en:hortans#Latin|hortantibus]];
**<small>(ガッリア人たち)</small>自身が熱心に勧めることさえしているのだ。
*quod [[wikt:en:propius#Latin|propius]] [[wikt:en:Romani#Latin|Romanos]] [[wikt:en:accessisset#Latin|accessisset]],
**ローマ人たちのより近くに近寄っていたことは、
*[[wikt:en:persuasus#Latin|persuasum]] loci [[wikt:en:opportunitas#Latin|opportunitate]], qui se <u>ipsum</u> [[wikt:en:munitio#Latin|munitione]] [[wikt:en:defenderet#Latin|defenderet]];
**<small>(移動先の丘陵が)</small>それ自体を<small>(沼地という天然の)</small>要害により守っているという地の利に納得させられたのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:上記の se <u>ipsum</u> munitione defenderet 「そのものを防御物によって守る」は主要写本 ω の記述で、<br>''[[ガリア戦記/注解編/写本と校訂版#Bentley,_Thomas|Th. Bentley]]'' は se <u>ipse sine</u> munitione defenderet 「そのものが防御物なしで守る」と修正提案している。)</span>
:
; 騎兵は、湿地帯での任務に適していない
*<!--❹--><sup>(4)</sup> [[wikt:en:eques#Latin|equitum]] vero [[wikt:en:opera#Latin|operam]]
**騎兵たちの働きはまさに、
*neque in loco [[wikt:en:paluster#Latin|palustri]] [[wikt:en:desiderari#Latin|desiderari]] [[wikt:en:debuisse#Latin|debuisse]]
**沼沢地において望まれるべきものではなかったし、
**:<span style="color:#009900;">(訳注:湿地・沼地では、ぬかるみに馬の足が取られるため、<br> 騎兵の長所である機動力が著しく低下し、<br> 速さを活かした偵察・突撃・迂回・追撃などがし難くなる。)</span>
*et [[wikt:en:illic#Adverb|illic]] fuisse [[wikt:en:utilis#Latin|utilem]], quo sint [[wikt:en:profectus#Participle_2|profecti]].
**<small>(騎兵たちが)</small>発って行ったところにおいては有効だったのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[#16節|16節]]冒頭の説明によれば、<br> ウェルキンゲトリークスが最初に宿営した場所は、<br> アウァーリクムから16マイル離れ、沼地や森林に守られていた。<br> [[#19節|19節]]では、より近い、沼地に囲まれたゆるやかな丘陵に移動したという。<br> この移動前後の地勢の優劣を、カエサルは必ずしも明瞭に説明していない。)</span>
:
; 兵は拙速を尊ぶ
*<!--❺--><sup>(5)</sup> [[wikt:en:summa#Latin|Summam]] [[wikt:en:imperium#Latin|imperii]]
**<small>(軍勢の)</small>最高司令権は、
*se [[wikt:en:consulto#Adverb|consulto]] [[wikt:en:nullus#Latin|nulli]] [[wikt:en:discedens#Latin|discedentem]] [[wikt:en:tradidisse#Latin|tradidisse]],
**<small>(ウェルキンゲトリークス)</small>自らが意図的に、立ち去るに当たって、誰にも委託しなかった。
*[[wikt:en:ne#Latin|ne]] is [[wikt:en:multitudo#Latin|multitudinis]] [[wikt:en:studium#Latin|studio]] ad [[wikt:en:dimicandus#Latin|dimicandum]] [[wikt:en:impelleretur#Latin|impelleretur]];
**その者が大勢の熱意によって<small>(ローマ人と)</small>闘うことに駆り立てられないように、である。
*cui rei <u>propter animi [[wikt:en:mollities#Latin|mollitiem]]</u> [[wikt:en:studere#Latin|studere]] omnes [[wikt:en:videret#Latin|videret]],
**その事<small>〔闘って決着を付けること〕</small>を、<u>心の柔弱さのゆえに</u>、皆が求めたがっている。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:「心の柔弱さのゆえに、闘いがしたくなる」というのは、<br> 一見すると奇妙に感じられるが、ここでの柔弱さ([[wikt:en:mollities#Latin|mollities]])とは、<br> 長期の攻囲戦の労苦や疲弊に持ちこたえる忍耐力のなさを指し、<br> 長い苦難から逃避するために早期決戦を志向する心理を意味すると考えられる。)</span>
*quod [[wikt:en:diutius#Latin|diutius]] [[wikt:en:labor#Latin|laborem]] ferre non [[wikt:en:possent#Latin|possent]].
**──というのは、<small>(兵は)</small>より長く<small>(攻囲戦の)</small>労苦に耐えることができないからだ──。
**:<span style="color:#009900;"> (訳注:[[w:孫子 (書物)|孫子]]に曰く「兵は拙速を聞くも、未だ巧の久しきを<ruby><rb>睹</rb><rp>(</rp><rt>み</rt><rp>)</rp></ruby>ざるなり」<ref>[[wikt:en:故に兵は拙速を聞くも、未だ巧の久しきを睹ざるなり|故に兵は拙速を聞くも、未だ巧の久しきを睹ざるなり]]
「戦争というものは、拙劣に短期決戦を挑んだ事例は聞くが、巧妙に長期戦を続けた事例は聞かない」の意。長い戦争は人々を消耗させ、疲弊させてしまう。</ref>)</span>
:
; ローマ人は、闘わずに退却したではないか
*<!--❻--><sup>(6)</sup> Romani si [[wikt:en:casu#Latin|casu]] [[wikt:en:intervenerint#Latin|intervenerint]], [[wikt:en:fortuna#Latin|fortunae]],
**もしローマ人たちが偶然に現われたのならば、命運に<small>(感謝するべきであり)</small>、
*si [[wikt:en:alicuius#Latin|alicuius]] [[wikt:en:indicium#Latin|indicio]] [[wikt:en:vocatus#Latin|vocati]], huic [[wikt:en:habendus#Latin|habendam]] [[wikt:en:gratia#Latin|gratiam]],
**もし<small>(ローマ人たちが)</small>何者かの申し立てに呼ばれて来たのならば、その者に感謝するべきだ。
*quod <u>et</u> [[wikt:en:paucitas#Latin|paucitatem]] eorum ex loco [[wikt:en:superior#Latin|superiore]] [[wikt:en:cognosco#Latin|cognoscere]]
**──というのは、より高い位置から彼ら<small>〔ローマ人〕</small>の少なさを知ることも、
*<u>et</u> [[wikt:en:virtus#Latin|virtutem]] [[wikt:en:despicio#Latin|despicere]] [[wikt:en:potuerint#Latin|potuerint]],
**<small>(ローマ人の)</small>武勇とやらを見下すこともできたのだから。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et ~ et …「~も…も」)</span>
*qui [[wikt:en:dimico#Latin|dimicare]] non [[wikt:en:ausus#Participle|ausi]]
**彼ら<small>〔ローマ人〕</small>は闘うことをあえてせずに、
*[[wikt:en:turpiter#Latin|turpiter]] se in castra [[wikt:en:receperint#Latin|receperint]].
**見苦しくも陣営に退却したのだ──。
:
; ガッリア人が勝つのだから、カエサルに寝返るはずがない
*<!--❼--><sup>(7)</sup> [[wikt:en:imperium#Latin|Imperium]] se <u>ab</u> Caesare per [[wikt:en:proditio#Latin|proditionem]] [[wikt:en:nullus#Latin|nullum]] [[wikt:en:desidero#Latin|desiderare]],
**自分<small>〔ウェルキンゲトリークス〕</small>は、カエサルから裏切りを通じて、どのような司令権も望んではいない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:上の (2) 項では、味方のガッリア人たちは、ウェルキンゲトリークスが<br> カエサルにより [[wikt:en:regnum#Latin|regnum]](王権、支配権)を得ようとしていると非難したのに対し、<br> 彼は [[wikt:en:imperium#Latin|imperium]](軍隊司令権、または支配権)という言葉を巧妙に引きずって答えている。<br> もちろん、言葉を変えたのは、筆者カエサル自身であろう。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ab はα系写本の記述で、β系写本では a となっている。)</span>
*quod habere [[wikt:en:victoria#Latin|victoria]] [[wikt:en:posset#Latin|posset]],
**<small>(支配権は、ローマ人に対する)</small>勝利によって得られるものであり、
*quae iam esset sibi atque omnibus [[wikt:en:Galli#Latin|Gallis]] [[wikt:en:exploratus#Latin|explorata]];
**<small>(勝利は)</small>もはや自分とすべてのガッリア人にとって確実なものとされているのだ。
*quin etiam ipsis <u>remittere</u>,
**いやそればかりか<small>(以下の様であれば、ガッリア人たち)</small>自身に<small>(司令官職を)</small>返還しているだろう。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:remitto#Latin|remittere]] は、写本Sの記述および ''[[ガリア戦記/注解編/写本と校訂版#Stephanus_(Estienne)|Stephanus]]'' や ''[[ガリア戦記/注解編/写本と校訂版#Vascosanus|Vascosanus]]'' による修正提案で、<br> β系・χ系写本・写本B・M・L・N では [[wikt:en:remitteret#Latin|remitteret]] となっている。)</span>
*si sibi <u>magis</u> [[wikt:en:honor#Latin|honorem]] [[wikt:en:tribuo#Latin|tribuere]], <u>quam</u> ab se [[wikt:en:salus#Latin|salutem]] [[wikt:en:accipio#Latin|accipere]] [[wikt:en:videantur#Latin|videantur]].
**もし<small>(ガッリア人が)</small>自分から安全を受け取っているよりも、むしろ顕職を自分に授けていると思っているのならば、だが。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:magis#Latin|magis]] ~, quam …「…というよりは、むしろ~」)</span>
:
; 捕虜のローマ人たちに訊いてみなさい
*<!--❽--><sup>(8)</sup> <!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> Haec ut [[wikt:en:intellegatis#Latin|intellegatis]], <span style="color:#009900;">»</span> </span> [[wikt:en:inquit#Latin|inquit]], <!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> a me [[wikt:en:sincere#Latin|sincere]] [[wikt:en:pronuntiari#Latin|pronuntiari]], [[wikt:en:audite#Latin|audite]] [[wikt:en:Romanus#Adjective|Romanos]] [[wikt:en:miles#Latin|milites]]. <span style="color:#009900;">»</span> </span>
**「これらは諸君が理解しているように、私により率直に示された。ローマ兵たちに聞いてみよ」と言った。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:<!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> ~ <span style="color:#009900;">»</span> </span> の箇所は、直接話法で記されている。)</span>
:
*<!--❾--><sup>(9)</sup> [[wikt:en:producit#Latin|Producit]] [[wikt:en:servus#Latin|servos]], quos in [[wikt:en:pabulatio#Latin|pabulatione]] paucis ante diebus [[wikt:en:exceperat#Latin|exceperat]] et [[wikt:en:fames#Latin|fame]] [[wikt:en:vinculum#Latin|vinculis]]<nowiki>que</nowiki> [[wikt:en:excruciaverat#Latin|excruciaverat]].
**数日前に糧秣徴発しているのを<small>(彼が)</small>ひっ捕らえて、飢えと鎖で拷問していたところの奴隷たちを引き出す。
**:<span style="color:#009900;">(訳注:[[wikt:en:calo#Noun_5|cālō]] カーロー(軍属奴隷)と呼ばれる輜重や陣営を管理する奴隷たちのことであろう。)</span>
:
*<!--❿--><sup>(10)</sup> Hi iam ante [[wikt:en:edoctus#Latin|edocti]], quae [[wikt:en:interrogatus#Latin|interrogati]] [[wikt:en:pronuntiarent#Latin|pronuntiarent]],
**彼ら<small>〔奴隷〕</small>は、すでに前もって<small>(ガッリア勢から)</small>訊問された際に語ることを<small>(ローマ人から)</small>教え込まれており、
**:<span style="color:#009900;">(訳注:カエサルは奴隷たちが誰に教え込まれたのか明記していないため、<br> ウェルキンゲトリークスに教え込まれたと訳している場合もある。)</span>
*[[wikt:en:miles#Latin|milites]] se esse [[wikt:en:legionarius#Latin|legionarios]] [[wikt:en:dicunt#Latin|dicunt]];
**自分たちは[[w:軍団兵|軍団兵]]であると言った。
**:<span style="color:#009900;">(訳注:糧秣徴発に出かけていた者は、たとえ軍団兵でも軽装であったであろうが、<br> 奴隷たちは、もともと戦争で捕虜になったガッリア人たち等であったと考えられるので、<br> 地中海人種のローマ人とは容易に見分けが付きそうなものではある。)</span>
*[[wikt:en:fames#Latin|fame]] <u>et</u> [[wikt:en:inopia#Noun_2|inopia]] [[wikt:en:adductus#Latin|adductos]] [[wikt:en:clam#Latin|clam]] ex castris [[wikt:en:exisse#Latin|exisse]], si [[wikt:en:aliquis#Latin|quid]] [[wikt:en:frumentum#Latin|frumenti]] aut [[wikt:en:pecus#Latin|pecoris]] in agris [[wikt:en:reperio#Latin|reperire]] [[wikt:en:possent#Latin|possent]];
**<small>(奴隷たち曰く)</small>飢えと欠乏に動かされて、何か穀物または家畜が野に見出せないかと、ひそかに陣営から抜け出した。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et はα系写本の記述で、β系写本では atque となっている。)</span>
:
*<!--⓫--><sup>(11)</sup> [[wikt:en:similis#Latin|simili]] omnem [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:inopia#Noun_2|inopia]] [[wikt:en:premi#Latin|premi]],
**<small>(ローマ人の)</small>全軍隊が同様の欠乏に悩まされて、
*<u>nec</u> iam [[wikt:en:vis#Latin|vires]] [[wikt:en:sufficio#Latin|sufficere]] [[wikt:en:quisquam#Latin|cuiusquam]] <u>nec</u> ferre [[wikt:en:opus#Latin|operis]] [[wikt:en:labor#Latin|laborem]] posse;
**もはや<small>(兵士の)</small>誰もが十分な能力がなく、<small>(城攻めの)</small>作業の労苦に耐えることができない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:nec ~ nec …「~でもなく、…でもない」)</span>
*itaque [[wikt:en:statuisse#Latin|statuisse]] [[wikt:en:imperator#Latin|imperatorem]], si [[wikt:en:nihil#Latin|nihil]] in [[wikt:en:oppugnatio#Latin|oppugnatione]] oppidi <u>profecissent</u>, [[wikt:en:triduum#Latin|triduo]] [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:deduco#Latin|deducere]].
**こうして将軍<small>〔カエサル〕</small>は、もし城塞都市の攻略において何ら得られないならば、3日間で軍隊を連れ帰ると決めた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、写本S・L・Nでは [[wikt:en:profecissent#Latin|profecissent]]<sub> (3人称・<u>複数</u>・過去完了・接続法)</sub> だが、<br> β系写本では [[wikt:en:profecisset#Latin|profecisset]]<sub> (3人称・<u>単数</u>・過去完了・接続法)</sub> となっており、<br> χ系および写本B・Mでは proficissent という綴りになっている。)</span>
: <!-- [[wikt:en:| -->
*<!--⓬--><sup>(12)</sup> <!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> Haec, <span style="color:#009900;">»</span> </span> [[wikt:en:inquit#Latin|inquit]], <!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> a me, <span style="color:#009900;">»</span> </span> [[wikt:en:Vercingetorix#Latin|Vercingetorix]],
**「これぞ」「私によって」とウェルキンゲトリークスは言った。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:以下、<!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> ~ <span style="color:#009900;">»</span> </span> の箇所は、直接話法で記されている。)</span>
*<!--▲直接話法--><span style="background-color:#e8e8ff;"> <span style="color:#009900;">«</span> [[wikt:en:beneficium#Latin|beneficia]] [[wikt:en:habetis#Latin|habetis]], quem [[wikt:en:proditio#Latin|proditionis]] [[wikt:en:insimulatis#Verb|insimulatis]];
**「裏切りだと諸君が糾弾している<small>(私という)</small>者のおかげで得ているのだ。
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> cuius [[wikt:en:opera#Latin|opera]] sine [[wikt:en:vester#Latin|vestro]] [[wikt:en:sanguis#Latin|sanguine]]
**その<small>(私という)</small>者の尽力により、諸君らの流血なしに、
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> tantum [[wikt:en:exercitus#Noun|exercitum]] [[wikt:en:victor#Latin|victorem]] [[wikt:en:fames#Latin|fame]] <u>paene</u> [[wikt:en:consumptus#Latin|consumptum]] [[wikt:en:videtis#Latin|videtis]];
**これほどの軍隊の勝利者<small>〔ローマ人〕</small>を飢えにより、ほとんど滅ぼしたのを諸君は見ているのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:paene は β系写本の記述で、α系写本にはない。)</span>
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> quem [[wikt:en:turpiter#Latin|turpiter]] se ex <u>hac</u> fuga [[wikt:en:recipiens#Latin|recipientem]]
**彼ら<small>〔ローマ人〕</small>が見苦しくもこのような逃亡から退却したところを、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:hac は β系写本の記述で、α系写本にはない。)</span>
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> ne [[wikt:en:aliqua#Pronoun|qua]] [[wikt:en:civitas#Latin|civitas]] suis finibus [[wikt:en:recipiat#Latin|recipiat]],
**<small>(それらの退却したローマ人を)</small>どの部族も自らの領土に受け入れないように、
*<!--➡直接話法--><span style="background-color:#e8e8ff;"> a me [[wikt:en:provisus#Latin|provisum]] est. <span style="color:#009900;">»</span> </span>
**私<small>〔ウェルキンゲトリークス〕</small>により、手配された。」
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===21節===
*<span style="background-color:#ffd;">[[/注解/21節]] {{進捗|00%|2026-05-10}}</span>
;ウェルキンゲトリークスの誠心とアウァーリクムの重要性を確認
:
*<!--❶--><sup>(1)</sup> [[wikt:en:conclamat#Latin|Conclamat]] omnis [[wikt:en:multitudo#Latin|multitudo]]
**群集すべてが雄叫びを上げて、
*et suo [[wikt:en:mos#Latin|more]] [[wikt:en:arma#Latin|armis]] [[wikt:en:concrepat#Latin|concrepat]],
**自分たちの慣習で武具を打ち鳴らす。
*quod facere in eo [[wikt:en:consuerunt#Verb_2|consuerunt]], cuius [[wikt:en:oratio#Latin|orationem]] [[wikt:en:adprobant#Latin|adprobant]];
**<small>(演説した)</small>その者の雄弁に賛同したら、その者に対してそれをすることが常であったのだ。
*summum esse [[wikt:en:Vercingetorix#Latin|Vercingetorigem]] [[wikt:en:dux#Latin|ducem]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は最高の将帥であり、
*<u>nec</u> de eius [[wikt:en:fides#Latin|fide]] [[wikt:en:dubitandus#Latin|dubitandum]],
**彼の信義については疑念を抱くべきではなく、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:nec#Latin|nec]] ~, nec …「~でもないし、…でもない」)</span>
*<u>nec</u> [[wikt:en:maior#Latin|maiore]] [[wikt:en:ratio#Latin|ratione]] bellum [[wikt:en:administrari#Latin|administrari]] posse.
**これ以上の作戦で戦争を指導することはできない<small>(と、叫んで武具を打ち鳴らす)</small>。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:statuunt#Latin|Statuunt]], ut decem<sub> (X)</sub> milia hominum [[wikt:en:delectus#Latin|delecta]] ex omnibus [[wikt:en:copiae#Latin|copiis]] in oppidum <u>mittantur</u>,
**<small>(彼らは)</small>すべての軍勢から選り抜かれた兵員1万を<small>(アウァーリクムの)</small>[[w:オッピドゥム|城塞都市]]の中に派遣すると決定する。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:mittantur#Latin|mittantur]] だが、<br> β系写本では [[wikt:en:submittantur#Latin|submittantur]] となっている。)</span>
:
*<!--❸--><sup>(3)</sup> nec [[wikt:en:solus#Latin|solis]] [[wikt:en:Bituriges#Latin|Biturigibus]] [[wikt:en:communis#Latin|communem]] [[wikt:en:salus#Latin|salutem]] [[wikt:en:committendus#Latin|committendam]] [[wikt:en:censent#Latin|censent]],
**<small>(ガッリア)</small>共通の安全をビトゥリゲース族だけに託すべきではないと考える。
*quod <u>penes eos</u>, si id oppidum [[wikt:en:retinuissent#Latin|retinuissent]],
**というのは、<u>彼らのもとで</u>、その城塞都市を維持したか否かが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> 主要写本ω では [[wikt:en:penes#Latin|penes]] eos 「彼らのもとで」だが、<br> オックスフォード写本 ''[[ガリア戦記/注解編/写本と校訂版#Codex_Oxoniensis_Andino|codd. Andino. Oxon.]]'' や ''[[ガリア戦記/注解編/写本と校訂版#Aldus|Aldus]]'' は paene in eo 「ほぼそのことにおいて」としている。)</span>
*[[wikt:en:summa#Latin|summam]] victoriae [[wikt:en:consto#Latin|constare]] [[wikt:en:intellegebant#Latin|intellegebant]].
**勝利の天王山を確かなものにすること、を理解していたからである。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===22節===
*<span style="background-color:#ffd;">[[/注解/22節]] {{進捗|00%|2026-06-01}}</span>
;アウァーリクムの籠城ガッリア勢が坑道戦で攻防に努める
:
*<!--❶--><sup>(1)</sup> [[wikt:en:singularis#Latin|Singulari]] [[wikt:en:miles#Latin|militum]] nostrorum [[wikt:en:virtus#Latin|virtuti]]
**我が方<small>〔ローマ勢〕</small>の兵士の卓越した武勇に、
*[[wikt:en:consilium#Latin|consilia]] [[wikt:en:quisque#Latin|cuiusque]] [[wikt:en:modus#Latin|modi]] [[wikt:en:Galli#Latin|Gallorum]] [[wikt:en:occurrebant#Latin|occurrebant]],
**<small>(敵勢は)</small>ガッリア人のあらゆる流儀の方策で抗戦していた。
*ut est summae [[wikt:en:genus#Latin|genus]] [[wikt:en:sollertia#Latin|sollertiae]]
**確かに<small>(ガッリア人は)</small>このうえなく器用な種族であり、
*atque ad [[wikt:en:omnia#Noun|omnia]] [[wikt:en:imitandus#Latin|imitanda]] et [[wikt:en:efficiendus#Latin|efficienda]], quae ab [[wikt:en:quisque#Latin|quoque]] [[wikt:en:traduntur#Latin|traduntur]], [[wikt:en:aptissimus#Latin|aptissimum]].
**誰かによって教えられることすべてを模倣すること、造り出すことにとても適しているのだ。
:
; 鉄鉱山の土地柄で、坑道戦を展開する
*<!--❷--><sup>(2)</sup> Nam <u>et</u> [[wikt:en:laqueus#Latin|laqueis]] [[wikt:en:falx#Latin|falces]] [[wikt:en:avertebant#Latin|avertebant]],
**すなわち、輪縄で<small>(ローマ勢の)</small>破城鎌をそらし、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et ~, et …「~でもあり、…でもある」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:破城鎌([[w:en:Falx|falx]])については、右図や[[ガリア戦記 第5巻#42節|第5巻42節]]を参照)</span>
[[画像:Falx_bgiu.png|thumb|right|250px|破城鎌([[w:en:Falx|falx]])の想像画(再掲)]]
[[画像:Doura_Europos_tunnel.jpg|thumb|right|250px|ローマ支配下の城砦跡に残る[[w:坑道|坑道]]の例(シリアの[[w:ドゥラ・エウロポス|ドゥラ・エウロポス]]遺跡)。[[w:サーサーン朝|サーサーン朝]]軍が[[w:坑道戦|坑道戦]]のために掘削したと考えられている。]]
*quas, cum [[wikt:en:destinaverant#Latin|destinaverant]],
**それを縛り付けておいてから、
*[[wikt:en:tormentum#Latin|tormentis]] [[wikt:en:introrsus#Latin|introrsus]] [[wikt:en:reducebant#Latin|reducebant]],
**巻揚げ機で<small>(城塞都市の)</small>内部に引き込んでいたし、
*<u>et</u> [[wikt:en:agger#Latin|aggerem]] [[wikt:en:cuniculus#Latin|cuniculis]] [[wikt:en:subtrahebant#Latin|subtrahebant]],
**<small>(ローマ勢の)</small><ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby> を[[w:坑道|坑道]]によって陥没させたりもした。
*<u>eo</u> [[wikt:en:scienter#Latin|scientius]]
**<small>(以下の理由により、彼らはそのことに)</small>より習熟しているのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:eo#Pronoun_5|eō]] ~ [[wikt:en:quod#Conjunction|quod]] …「…という理由で~」)</span>
*<u>quod</u> apud eos magnae sunt [[wikt:en:ferraria#Latin|ferrariae]]
**──というのも、彼らのもとには多くの[[w:鉄鉱石|鉄鉱]]山があり、
*atque [[wikt:en:omnis#Latin|omne]] [[wikt:en:genus#Latin|genus]] [[wikt:en:cuniculus#Latin|cuniculorum]] [[wikt:en:notus#Latin|notum]]
**坑道のあらゆる類いが知られていて
*atque [[wikt:en:usitatus#Latin|usitatum]] est.
**慣れていただけに<small>(習熟しているのだ)</small>。──
:
; アウァーリクムの全周に防御のための櫓を建てる
*<!--❸--><sup>(3)</sup> [[wikt:en:totus#Latin|Totum]] autem [[wikt:en:murus#Latin|murum]] ex omni parte
**他方で、城壁の全体をあらゆる方向から、
*[[wikt:en:turris#Latin|turribus]] [[wikt:en:contabulaverant#Latin|contabulaverant]]
**<ruby><rb>[[w:攻城塔|攻城櫓]]</rb><rp>(</rp><rt>トゥッリス</rt><rp>)</rp></ruby>を<small>(何層にも)</small>構築しておいて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:動詞 [[wikt:en:contabulo#Latin|contabulare]] は「板張りする」。[[内乱記_第2巻#9節|『内乱記』第2巻9節]]には [[wikt:en:contabulatio#Latin|contabulatio]]「床板張り」という単語が出て来る。)</span>
*atque has [[wikt:en:corium#Latin|coriis]] [[wikt:en:intexerant#Latin|intexerant]].
**これらを皮革で覆っていた。
:
*<!--❹--><sup>(4)</sup> Tum [[wikt:en:creber#Latin|crebris]] [[wikt:en:diurnus#Latin|diurnis]] [[wikt:en:nocturnus#Latin|nocturnis]]<nowiki>que</nowiki> [[wikt:en:eruptio#Latin|eruptionibus]]
**それから、たびたび昼間も夜間も出撃して、
*aut [[wikt:en:agger#Latin|aggeri]] [[wikt:en:ignis#Latin|ignem]] [[wikt:en:inferebant#Latin|inferebant]]
**あるいは土塁に火災を引き起こしたり、
*aut [[wikt:en:miles#Latin|milites]] [[wikt:en:occupatus#Latin|occupatos]] in [[wikt:en:opus#Latin|opere]] [[wikt:en:adoriebantur#Latin|adoriebantur]],
**あるいは工事に従事している<small>(ローマ人)</small>兵士たちを襲撃したりした。
[[画像:University_of_Queensland_Pitch_drop_experiment-white_bg.jpg|thumb|right|200px|<ruby><rb>[[w:ピッチ (樹脂)|樹脂]]</rb><rp>(</rp><rt>ピッチ</rt><rp>)</rp></ruby>の滴下実験の様子(豪州[[w:クイーンズランド大学|クイーンズランド大学]])。[[w:木材|木材]]を密閉加熱すると[[w:木炭|木炭]]が得られるが、その残り物から[[w:乾留液#木タール|木タール]]を[[w:蒸留|蒸留]]させた残り<ruby><rb>滓</rb><rp>(</rp><rt>かす</rt><rp>)</rp></ruby>がピッチである。樹木から得られるピッチは、黒色で[[w:粘度|粘っこく]]、高温で燃焼する。中世ヨーロッパでは城砦の防衛に使用され、城壁に近づく敵の上から熱したピッチを注いで焼死させたりしたという([[w:fr:Poix (matière)|fr:poix]])。]]
*et nostrarum [[wikt:en:turris#Latin|turrium]] [[wikt:en:altitudo#Latin|altitudinem]],
**我が方<small>〔ローマ勢〕</small>の[[w:攻城塔|攻城櫓]]の高さを、
*[[wikt:en:quantum#Latin|quantum]] has [[wikt:en:cotidianus#Latin|cotidianus]] agger [[wikt:en:expresserat#Latin|expresserat]],
**毎日のようにこれらを<small>(ローマ側の)</small>土塁が押し出した分だけ、
*[[wikt:en:commissus#Latin|commissis]] suarum [[wikt:en:turris#Latin|turrium]] [[wikt:en:malus#Noun_5|malis]] [[wikt:en:adaequabant#Latin|adaequabant]],
**自分たち<small>〔ガッリア勢〕</small>の櫓を、柱を組み立てることにより、<small>(ローマ側の櫓の高さと)</small>等しくしようとした。
:
*<!--❺--><sup>(5)</sup> et [[wikt:en:apertus#Latin|apertos]] [[wikt:en:cuniculus#Latin|cuniculos]]
**<small>(ローマ勢が掘削した)</small>坑道の露出したところを
*[[wikt:en:praeustus#Latin|praeusta]] et [[wikt:en:praeacutus#Latin|praeacuta]] [[wikt:en:materia#Latin|materia]]
**先端を焼いて尖らせた木材や、
*et [[wikt:en:pix#Latin|pice]] [[wikt:en:fervefactus#Latin|fervefacta]]
**熱した<ruby><rb>[[w:ピッチ (樹脂)|樹脂]]</rb><rp>(</rp><rt>ピッチ</rt><rp>)</rp></ruby>や、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:pix は<ruby><rb>[[w:歴青|瀝青]]</rb><rp>(</rp><rt>れきせい</rt><rp>)</rp></ruby>と訳されることもあるが、とくに[[w:ピッチ (樹脂)|ピッチ]]を指す<ref>[https://kotobank.jp/word/%E6%9C%A8%E3%81%9F%E3%83%BC%E3%82%8B-3173189 木タール] などを蒸留したあとに残る黒色の物質。</ref>。<br> [[w:歴青|瀝青]]は「ビチューメン」ともいい、ラテン語の [[wikt:en:bitumen#Latin|bitūmen]] に由来する。<br> [[w:ピッチ (樹脂)|ピッチ]]([[w:en:Pitch (resin)|Pitch]])は、ラテン語の [[wikt:en:pix#Latin|pix]] に由来する。)</span>
*et [[wikt:en:maximus#Latin|maximi]] [[wikt:en:pondus#Latin|ponderis]] [[wikt:en:saxum#Latin|saxis]] [[wikt:en:morabantur#Etymology_1|morabantur]]
**たいへんな重さの岩石で、<small>(ローマ勢の掘削を)</small>滞らせたり、
*[[wikt:en:moenia#Latin|moenibus]]<nowiki>que</nowiki> [[wikt:en:adpropinquo#Latin|adpropinquare]] [[wikt:en:prohibebant#Latin|prohibebant]].
**<small>(ローマ勢が)</small>城壁に接近することを<small>(ガッリア勢が)</small>妨げたりしていた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===23節===
{{Commons|Category:Murus gallicus|Murus gallicus}}
*<span style="background-color:#ffd;">[[/注解/23節]] {{進捗|00%|2026-06-14}}</span>
;ガッリア式城壁の構造
:
*<!--❶--><sup>(1)</sup> [[wikt:en:murus#Latin|Muri]] autem omnes [[wikt:en:Gallicus#Latin|Gallici]] hac fere [[wikt:en:forma#Latin|forma]] sunt.
**ところで、ガッリアの<ruby><rb>城壁</rb><rp>(</rp><rt>ムルス</rt><rp>)</rp></ruby>のすべては、ほぼ以下のような形態である。
:
; 木材を2ペースずつ等間隔で離して、ずっと並べていく
*<u>Trabes</u> [[wikt:en:derectus#Latin|derectae]] [[wikt:en:perpetuus#Latin|perpetuae]] <u>in longitudinem</u>
**<u><ruby><rb>木材</rb><rp>(</rp><rt>トラプス</rt><rp>)</rp></ruby></u>が<small>(城壁の)</small><u><ruby><rb>長手方向</rb><rp>(</rp><rt>ロンギトゥードー</rt><rp>)</rp></ruby></u>に、<small>(垂直に)</small>真っ直ぐに、ずっと続いて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:trabs#Latin|trabes]] は、とくに梁のような水平材を指していると思われる。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:in [[wikt:en:longitudo#Latin|longitudinem]] は、ここでは、城壁に沿った長手方向を指す。)</span>
[[画像:Murus gallicus de Lyon Fourvière - Maquette de Nicolas Hirsch - Service Archéologique de la Ville de Lyon - Détail structure.jpg|thumb|right|300px|ガッリア式城壁の[[w:ジオラマ|ジオラマ]](仏[[w:リヨン|リヨン市]]考古学局)。木材を約60cmの間隔で並べる。]]
*[[wikt:en:par#Latin|paribus]] [[wikt:en:intervallum#Latin|intervallis]], [[wikt:en:distans#Latin|distantes]] inter se [[wikt:en:binus#Latin|binos]] [[wikt:en:pes#Latin|pedes]],
**等間隔で、互いに2<u>ペース</u>ずつ離れて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、2ペースは約60 cm弱。)</span>
*in [[wikt:en:solum#Latin|solo]] [[wikt:en:conlocantur#Latin|conlocantur]].
**<ruby><rb>地面</rb><rp>(</rp><rt>ソルム</rt><rp>)</rp></ruby>に配置される。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:右の画像を参照。)</span>
:
; 木材をつなぎ合わせ、土砂を埋めて、石材をかぶせる
[[画像:2018 Rheinisches Landesmuseum Trier, Keltischer Wehrmauer.jpg|thumb|right|300px|同じく城壁のジオラマ(独[[w:トリーア|トリーア市]])。]]
*<!--❷--><sup>(2)</sup> [[wikt:en:hae#Latin|Hae]] [[wikt:en:revinciuntur#Latin|revinciuntur]] [[wikt:en:introrsus#Latin|introrsus]]
**これら<small>〔木材〕</small>は、内側で緊結されて、
**:<span style="color:#009900;">(訳注:明瞭な説明ではなく、肝心な記述が欠落している。<br> 上記の2ペースずつ等間隔で並べられた平行な木材は、<br> 節末で述べられるような40ペースの長い木材によって<br> 井桁状に組み合わされて、鉄の釘で固定されたようである。<br> 右上と右のジオラマの画像を参照。)</span>
*et [[wikt:en:multus#Latin|multo]] [[wikt:en:agger#Latin|aggere]] [[wikt:en:vestiuntur#Latin|vestiuntur]];
**多くの<ruby><rb>土砂</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>で覆われる。
*ea autem, quae [[wikt:en:diximus#Verb|diximus]], [[wikt:en:intervallum#Latin|intervalla]]
**さらに、前述した<small>(2ペースの)</small>間隔には、
*[[wikt:en:grandis#Latin|grandibus]] in [[wikt:en:frons#Latin:_forehead|fronte]] [[wikt:en:saxum#Latin|saxis]] <u>efferciuntur</u>.
**前面に大きな<ruby><rb>石塊</rb><rp>(</rp><rt>サクスム</rt><rp>)</rp></ruby>が詰め込まれる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、ρ系写本・写本V では [[wikt:en:efferciuntur#Latin|efferciuntur]] と表記され、<br> α系写本・写本T では [[wikt:en:effarciuntur#Latin|effarciuntur]] と表記されるが、<br> [[w:母音弱化|母音弱化]]の語形である前者の方が、共和制末期のカエサルが用いたと考えられる。)</span>
[[画像:Keltenmauer.gif|thumb|right|280px|ガッリア式城壁の構成図(上が側面、中が上面、下が前面)。木材を水平な井桁状に並べて[[w:釘|釘]]で緊結し、土砂で覆って何層にも重ね、前面には石をはめ込む。井桁状の骨組によって[[w:破城槌|破城槌]]など横からの力(水平荷重)に耐えられるように工夫されている。]]
:
*<!--❸--><sup>(3)</sup> His [[wikt:en:conlocatus#Latin|conlocatis]] et [[wikt:en:coagmentatus#Latin|coagmentatis]]
**<u>これら</u>が配置されて結び合わされると、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:<u>これら</u> とは、上述の木材や石材のこと。)</span>
*alius [[wikt:en:insuper#Latin|insuper]] [[wikt:en:ordo#Latin|ordo]] [[wikt:en:additur#Latin|additur]],
**上に別の<ruby><rb>階層</rb><rp>(</rp><rt>オルドー</rt><rp>)</rp></ruby>が付け加えられる。
*ut idem illud [[wikt:en:intervallum#Latin|intervallum]] [[wikt:en:servetur#Latin|servetur]],
**その同じ<small>(2ペースの)</small>間隔が保たれて、
*neque inter se [[wikt:en:contingant#Latin|contingant]] [[wikt:en:trabs#Latin|trabes]],
**かつ<ruby><rb>木材</rb><rp>(</rp><rt>トラプス</rt><rp>)</rp></ruby>が互いに接触しないように、
**:<span style="color:#009900;">(訳注:上下の層の水平材どうしが接触しないように、<br> 互い違いに並べているようである。)</span>
*sed [[wikt:en:par#Latin|paribus]] [[wikt:en:intermissus#Latin|intermissae]] [[wikt:en:spatium#Latin|spatiis]] [[wikt:en:singulus#Latin|singulae]]
**けれども、等間隔で間をあけられたそれぞれ<small>(の木材)</small>は、
*[[wikt:en:singulus#Latin|singulis]] [[wikt:en:saxum#Latin|saxis]] [[wikt:en:interiectus#Latin|interiectis]]
**それぞれの<ruby><rb>石塊</rb><rp>(</rp><rt>サクスム</rt><rp>)</rp></ruby>が間に挟まれることによって、
*[[wikt:en:arte#Adverb|arte]] [[wikt:en:contineantur#Latin|contineantur]].
**緊密に連結される。
:
*<!--❹--><sup>(4)</sup> Sic [[wikt:en:deinceps#Latin|deinceps]] omne [[wikt:en:opus#Latin|opus]] [[wikt:en:contexitur#Latin|contexitur]], [[wikt:en:dum#Latin|dum]] [[wikt:en:iustus#Latin|iusta]] [[wikt:en:murus#Latin|muri]] [[wikt:en:altitudo#Latin|altitudo]] [[wikt:en:expleatur#Latin|expleatur]].
**このように、<ruby><rb>城壁</rb><rp>(</rp><rt>ムルス</rt><rp>)</rp></ruby>の十分な高さが満たされるまで、すべての<ruby><rb>工作物</rb><rp>(</rp><rt>オプス</rt><rp>)</rp></ruby>が続けて組み立てられる。
[[画像:Bibracte_murus_gallicus1.jpg|thumb|right|300px|ガッリア式城壁の[[w:ジオラマ|ジオラマ]](仏[[w:ビブラクテ|ビブラクテ]]遺跡のケルト文明博物館)。この構造形式はカエサルの記述から「[[w:ムルス・ガリクス|ムルス・ガリクス]](ガッリア壁)」と呼ばれるが、ガッリアに限らず、[[w:鉄器時代|鉄器時代]]末期すなわちBC1世紀頃の後期[[w:ラ・テーヌ文化|ラ・テーヌ文化]]が及んだ各地に遺構として残る。木材どうしを緊結するために数百トンもの[[w:鉄|鉄]]の[[w:釘|釘]]を用いているのが大きな特徴で、[[w:鉄#製錬|製鉄]]・[[w:鋳造|鋳造]]技術の発達を示す。]]
:
; ガッリア式城壁は、外観が見事で、城塞都市の防御にも有益
:<span style="color:#009900;font-family:Times New Roman;">(訳注:以下、cum ~ tum … の構文「~だけでなく、また…でもある」。)</span>
*<!--❺--><sup>(5)</sup> Hoc <u>cum</u> in [[wikt:en:species#Latin|speciem]] [[wikt:en:varietas#Latin|varietatem]]<nowiki>que</nowiki> [[wikt:en:opus#Latin|opus]] [[wikt:en:deformis#Latin|deforme]] non est [[wikt:en:alternus#Latin|alternis]] [[wikt:en:trabs#Latin|trabibus]] ac [[wikt:en:saxum#Latin|saxis]],
**<ruby><rb>この</rb><rp>(</rp><rt>ホク</rt><rp>)</rp></ruby><ruby><rb>工作物</rb><rp>(</rp><rt>オプス</rt><rp>)</rp></ruby>は、互い違いの<ruby><rb>木材</rb><rp>(</rp><rt>トラプス</rt><rp>)</rp></ruby>と<ruby><rb>石塊</rb><rp>(</rp><rt>サクスム</rt><rp>)</rp></ruby>により、変化に富む外観において不格好でなく、
*quae [[wikt:en:rectus#Latin|rectis]] [[wikt:en:linea#Latin|lineis]] suos [[wikt:en:ordo#Latin|ordines]] [[wikt:en:servant#Latin|servant]],
**──それら<small>〔木材と石〕</small>は真っ直ぐな線により、その<ruby><rb>階層</rb><rp>(</rp><rt>オルドー</rt><rp>)</rp></ruby>を保っているのだが──
*<u>tum</u> ad [[wikt:en:utilitas#Latin|utilitatem]] et [[wikt:en:defensio#Latin|defensionem]] [[wikt:en:urbs#Latin|urbium]]
**同様に、都市の防御の有益性のためにも、
*summam [[wikt:en:habet#Latin|habet]] [[wikt:en:opportunitas#Latin|opportunitatem]],
**きわめて好都合となっている。
*quod et ab [[wikt:en:incendio#Latin|incendio]] [[wikt:en:lapis#Latin|lapis]] et ab [[wikt:en:aries#Latin|ariete]] [[wikt:en:materia#Latin|materia]] [[wikt:en:defendit#Latin|defendit]],
**──というのは、<ruby><rb>石材</rb><rp>(</rp><rt>ラピス</rt><rp>)</rp></ruby>が火災からも、<ruby><rb>材木</rb><rp>(</rp><rt>マーテリア</rt><rp>)</rp></ruby>が<ruby><rb>[[w:破城槌|破城槌]]</rb><rp>(</rp><rt>はじょうつい</rt><rp>)</rp></ruby>からも、防護しており、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:et ~ et …「~でもあり、…でもある」)</span>
*quae [[wikt:en:perpetuus#Latin|perpetuis]] [[wikt:en:trabs#Latin|trabibus]] [[wikt:en:pes#Latin|pedes]] [[wikt:en:quadragenus#Latin|quadragenos]] [[wikt:en:plerumque#Adverb|plerumque]] [[wikt:en:introrsus#Latin|introrsus]] [[wikt:en:revinctus#Latin|revincta]]
**それ<small>〔短手方向の材木〕</small>は、たいてい40<u>ペース</u>にわたって<small>(長手方向に)</small>続く<ruby><rb>木材</rb><rp>(</rp><rt>トラプス</rt><rp>)</rp></ruby>により内部で緊結されており、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、40ペースは約12メートル。)</span>
*neque [[wikt:en:perrumpi#Latin|perrumpi]] neque [[wikt:en:distrahi#Latin|distrahi]] potest.
**突破されることも、引きはがされることもできないからである。──
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===24節===
[[画像:Avaricum_westpoint_july_2006.jpg|thumb|right|350px|[[w:アウァリクム包囲戦|アウァーリクム攻略戦]]の[[w:ジオラマ|ジオラマ]]<small>([[w:陸軍士官学校 (アメリカ合衆国)|米国陸軍士官学校]]博物館)</small>。ローマ軍の<ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>は、城壁(奥)の手前に材木と土砂を積み重ねた構築物が築き上げられ、左右の土手道をそれぞれ4層の[[w:攻城塔|攻城櫓]]が城壁に迫る。土塁の周辺には<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby>(vinea)を多数つないだ通路(坑道)が延びている。手前には2台の<ruby><rb>投射機</rb><rp>(</rp><rt>スコルピオ</rt><rp>)</rp></ruby>が見える。]]
*<span style="background-color:#ffd;">[[/注解/24節]] {{進捗|00%|2026-06-15}}</span>
;ローマ勢が徹夜の土塁工事、籠城ガッリア勢の攻勢
:
; ローマ勢が、25日間で大がかりな攻城設備を構築する
*<!--❶--><sup>(1)</sup> His [[wikt:en:tot#Latin|tot]] rebus [[wikt:en:impeditus#Latin|impedita]] [[wikt:en:oppugnatio#Latin|oppugnatione]]
**これら多くの事情により攻囲が妨げられて、
*[[wikt:en:miles#Latin|milites]],
**兵士たちは、
*cum [[wikt:en:totus#Etymology_1|toto]] tempore <u>luto</u> [[wikt:en:frigus#Latin|frigore]] et [[wikt:en:adsiduus#Latin|adsiduis]] [[wikt:en:imber#Latin|imbribus]] <u>tardarentur</u>,
**常時、<ruby><rb><u>泥土</u></rb><rp>(</rp><rt>ルトゥム</rt><rp>)</rp></ruby>、寒さと絶え間ない<ruby><rb>雨嵐</rb><rp>(</rp><rt>イムベル</rt><rp>)</rp></ruby>によって遅らせられていたが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:lutum#Latin|luto]] は、β系写本の記述で、<br> α系写本にはない。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の二つ目は、<br> χ系・β系写本では [[wikt:en:tardarentur#Latin|tardarentur]] だが、<br> 写本B・M・Sでは traderentur、<br> 写本L・Nでは terrerentur などとなっている。)</span>
*tamen [[wikt:en:continens#Adjective|continenti]] [[wikt:en:labor#Latin|labore]] omnia haec [[wikt:en:superaverunt#Latin|superaverunt]]
**しかしながら、絶え間ない労働によってこれらすべてに打ち克って、
*et diebus XXV<small> ([[wikt:en:quinque#Latin|quinque]] et [[wikt:en:viginti#Latin|viginti]])</small>
**25日間で、
*[[wikt:en:agger#Latin|aggerem]] [[wikt:en:latus#Latin:_wide|latum]] [[wikt:en:pes#Latin|pedes]] CCCXXX<small> ([[wikt:en:trecenti#Latin|trecenti]] [[wikt:en:triginta#Latin|triginta]])</small>, [[wikt:en:altus#Latin|altum]] pedes LXXX<small> ([[wikt:en:octoginta#Latin|octoginta]])</small> [[wikt:en:exstruxerunt#Latin|exstruxerunt]].
**幅330<u>ペース</u>、高さ80<u>ペース</u>の<ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>を築き上げた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:1[[ガイウス・ユリウス・カエサルの著作/通貨・計量単位#ペース|ペース]]は約29.6cmで、幅330ペースは約98メートル。高さ80ペースは約24メートル。)</span>
:
; アウァーリクムに籠城するガッリア勢が、攻囲するローマ勢の土塁に夜襲をしかける
*<!--❷--><sup>(2)</sup> Cum is [[wikt:en:murus#Latin|murum]] hostium paene [[wikt:en:contingeret#Latin|contingeret]],
**それ<small>〔ローマ側の土塁〕</small>が敵の城壁にほとんど接しようとしていたとき、
*et Caesar ad [[wikt:en:opus#Latin|opus]] [[wikt:en:consuetudo#Latin|consuetudine]] [[wikt:en:excubaret#Latin|excubaret]]
**かつ、カエサルが習慣により作業のそばで寝ずの番をしていて、
*[[wikt:en:miles#Latin|milites]]<nowiki>que</nowiki> [[wikt:en:hortaretur#Latin|hortaretur]], ne [[wikt:en:aliquod#Latin|quod]] [[wikt:en:omnino#Latin|omnino]] [[wikt:en:tempus#Latin|tempus]] ab [[wikt:en:opus#Latin|opere]] [[wikt:en:intermitteretur#Latin|intermitteretur]],
**いかなる時も作業がまったく中断されないように、と兵士たちを励ましていたときに、
*paulo ante tertiam [[wikt:en:vigilia#Latin|vigiliam]]
**第三夜警時の少し前に、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:第三夜警時は、真夜中から日の出までの時間帯の前半。「未明」<br> [[古代ローマの不定時法#夜警時|#夜警時]] を参照。)</span>
*est [[wikt:en:animadversus#Participle|animadversum]] [[wikt:en:fumo#Latin|fumare]] [[wikt:en:agger#Latin|aggerem]],
**土塁に煙が上がっていることが気付かれた。
*quem [[wikt:en:cuniculus#Latin|cuniculo]] hostes [[wikt:en:succenderant#Latin|succenderant]];
**<small>(その土塁を)</small>[[w:坑道|坑道]]によって敵たちが焼き討ちしていたものである。
:
*<!--❸--><sup>(3)</sup> [[wikt:en:idem#Latin|eodem]]<nowiki>que</nowiki> [[wikt:en:tempus#Latin|tempore]]
**そして同時に、
*[[wikt:en:totus#Latin|toto]] [[wikt:en:murus#Latin|muro]] [[wikt:en:clamor#Latin|clamore]] [[wikt:en:sublatus#Latin:_raised|sublato]],
**<small>(アウァーリクムの)</small>城壁全体で雄叫びが上がって、
*duabus portis ab [[wikt:en:uterque#Latin|utroque]] [[wikt:en:latus#Latin:_side|latere]] [[wikt:en:turris#Latin|turrium]]
**二つの城門より、<small>(ローマ勢の)</small>[[w:攻城塔|攻城櫓]]の両方の側面から
*[[wikt:en:eruptio#Latin|eruptio]] [[wikt:en:fiebat#Latin|fiebat]].
**<small>(ガッリア勢による)</small>突撃がなされていた。
:
*<!--❹--><sup>(4)</sup> Alii [[wikt:en:fax#Latin|faces]] atque [[wikt:en:aridus#Latin|aridam]] <u>materiam</u> de [[wikt:en:murus#Latin|muro]] in [[wikt:en:agger#Latin|aggerem]] [[wikt:en:eminus#Latin|eminus]] [[wikt:en:iaciebant#Latin|iaciebant]],
**<small>(ガッリア勢の)</small>他の者たちは、<ruby><rb>[[w:たいまつ|松明]]</rb><rp>(</rp><rt>たいまつ</rt><rp>)</rp></ruby>および乾いた材木を、城壁から<small>(ローマ側の)</small>土塁に、遠くから投げ込んで、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系写本では [[wikt:en:materiam#Latin|materiam]] だが、<br> α系写本では [[wikt:en:materiem#Latin|materiem]] となっている。<br> 文法学者[[w:カエサレアのプリスキアヌス|プリスキアーヌス]]は、カエサルの文法書 "De Analogia" について materiam と引用している。)</span>
*[[wikt:en:pix#Latin|picem]] [[wikt:en:reliquus#Latin|reliquas]]<nowiki>que</nowiki> res, quibus [[wikt:en:ignis#Latin|ignis]] [[wikt:en:excitari#Latin|excitari]] potest, [[wikt:en:fundebant#Latin|fundebant]],
**<ruby><rb>[[w:ピッチ (樹脂)|樹脂]]</rb><rp>(</rp><rt>ピッチ</rt><rp>)</rp></ruby>や、火を燃え立たせられるほかのもの<small>〔可燃物〕</small>を注ぎ込んだ。
*ut, [[wikt:en:quo#Latin:_where|quo]] primum <u>curreretur</u> aut cui rei [[wikt:en:ferretur#Latin|ferretur]] [[wikt:en:auxilium#Latin|auxilium]],
**それで、まずどこに駆け付けるのか、あるいはどの事態に支援がなされるのか、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:curreretur#Latin|curreretur]] だが、<br> β系写本では [[wikt:en:occurreretur#Latin|occurreretur]] となっている。)</span>
*vix [[wikt:en:ratio#Latin|ratio]] [[wikt:en:iniri#Latin|iniri]] posset.
**<small>(ローマ兵には)</small>ほとんど分別され得なかった。
:
*<!--❺--><sup>(5)</sup> Tamen, quod [[wikt:en:institutum#Latin|instituto]] Caesaris <u>semper duae</u> [[wikt:en:legio#Latin|legiones]] pro [[wikt:en:castra#Latin|castris]] [[wikt:en:excubabant#Latin|excubabant]]
**しかしながら、カエサルの定めにより常に2個[[w:ローマ軍団|軍団]]が陣営の前に寝ずの番をしていたので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本の語順では semper duae だが、<br> β系写本の語順では duae semper となっている。)</span>
*[[wikt:en:plus#Latin|plures]]<nowiki>que</nowiki> [[wikt:en:partitus#Latin|partitis]] [[wikt:en:tempus#Latin|temporibus]] erant in [[wikt:en:opus#Latin|opere]],
**かつ、より多くの者たちが時間を割り当てられて作業していたので、
*celeriter [[wikt:en:factus#Latin|factum]] est,
**<small>(防戦は)</small>速やかになされた。
*ut <u>alii</u> [[wikt:en:eruptio#Latin|eruptionibus]] [[wikt:en:resisterent#Latin|resisterent]],
**ある者たちは<small>(ガッリア勢の)</small>突撃に抵抗しており、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:alii ~ alii …「~する者もいれば、…する者もいる。」)</span>
*<u>alii</u> [[wikt:en:turris#Latin|turres]] [[wikt:en:reducerent#Latin|reducerent]]
**別のある者たちは[[w:攻城塔|攻城櫓]]を引き戻して、
*[[wikt:en:agger#Latin|aggerem]]<nowiki>que</nowiki> [[wikt:en:interscinderent#Latin|interscinderent]],
**土塁を<small>(城壁側から)</small>切り離していた。
*omnis vero ex [[wikt:en:castra#Latin|castris]] [[wikt:en:multitudo#Latin|multitudo]] ad [[wikt:en:restinguendum#Verb|restinguendum]] [[wikt:en:concurreret#Latin|concurreret]].
**さらに陣営から大勢の皆が、消火するために急ぎ集まっていた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===25節===
*<span style="background-color:#ffd;">[[/注解/25節]] {{進捗|00%|2026-06-29}}</span>
;籠城ガッリア勢が必死の防戦
:
*<!--❶--><sup>(1)</sup> Cum in omnibus locis, <u>[[wikt:en:consumptus#Latin|consumpta]] iam reliqua parte noctis</u>, [[wikt:en:pugnaretur#Latin|pugnaretur]],
**<u>すでに夜も明けて</u>、至る所で戦われていたときに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の直訳は「すでに夜の残りの部分も費やされて」。)</span>
*[[wikt:en:semper#Latin|semper]]<nowiki>que</nowiki> hostibus [[wikt:en:spes#Latin|spes]] [[wikt:en:victoria#Latin|victoriae]] [[wikt:en:redintegraretur#Latin|redintegraretur]],
**かつ、常に敵たちにとって勝利の希望が蘇っており、
*<u>eo magis, quod</u> [[wikt:en:deustus#Latin|deustos]] [[wikt:en:pluteus#Latin|pluteos]] [[wikt:en:turris#Latin|turrium]] [[wikt:en:videbant#Latin|videbant]] nec facile [[wikt:en:adire#Latin|adire]] [[wikt:en:apertus#Latin|apertos]] ad [[wikt:en:auxiliandum#Verb|auxiliandum]] [[wikt:en:animadvertebant#Latin|animadvertebant]],
**<span style="font-family:Times New Roman;font-size:11pt;">[[w:攻城塔|攻城櫓]]の<ruby><rb>障壁</rb><rp>(</rp><rt>プルテウス</rt><rp>)</rp></ruby>が<ruby><rb>焼き落された</rb><rp>(</rp><rt>デウストゥス</rt><rp>)</rp></ruby>のを見ていて、<ruby><rb>身を曝した者</rb><rp>(</rp><rt>アペルトゥス</rt><rp>)</rp></ruby>たちが救援のために容易に近づけないのに気付いていた<u>のでなおさらだったが</u>、</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:eo magis quod|eo magis quod]] ~ 「~なので、その分だけ、より一層」。[[ガリア戦記 第3巻#14節|第3巻14節]]も参照。)</span>
*[[wikt:en:semper#Latin|semper]]<nowiki>que</nowiki> ipsi [[wikt:en:recens#Adjective|recentes]] [[wikt:en:defessus#Latin|defessis]] [[wikt:en:succederent#Latin|succederent]]
**常に彼ら自身<small>〔籠城ガッリア勢〕</small>は新たな者たちが疲れ果てた者たちに交代しており、
*[[wikt:en:omnis#Latin|omnem]]<nowiki>que</nowiki> Galliae [[wikt:en:salus#Latin|salutem]] <u>in illo [[wikt:en:vestigium#Latin|vestigio]] temporis [[wikt:en:positus#Participle|positam]] <span style="color:#009900;"><small>(esse)</small></span></u> [[wikt:en:arbitrarentur#Latin|arbitrarentur]],
**ガッリアのすべての安全が、<u>その瞬間にかかっている</u>と思われていたので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の直訳は「その時の足跡(瞬間)に置かれている」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:以上の cum ~ arbitrarentur, が状況や理由を説明する副文で、以下が主文となっている。)</span>
*[[wikt:en:accidit#Etymology_1|accidit]] [[wikt:en:inspectans#Latin|inspectantibus]] nobis,
**我が方<small>〔ローマ勢〕</small>が見ているなかで起こったのは、
*[[wikt:en:quod#Pronoun|quod]] [[wikt:en:dignus#Latin|dignum]] [[wikt:en:memoria#Latin|memoria]] [[wikt:en:visus#Participle|visum]] [[wikt:en:praetereundus#Latin|praetereundum]] non [[wikt:en:existimavimus#Latin|existimavimus]].
**記憶に値すると思われたことを<small>(我がローマ勢が)</small>見過ごすべきではないと考えていたことである。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:この主文の主語を省略せずに記せば、以下のようになる。<br> [id], quod dignum memoria visum [esse] praetereundum [esse] non existimavimus.)</span>
[[画像:048_Conrad_Cichorius,_Die_Reliefs_der_Traianssäule,_Tafel_XLVIII_(Ausschnitt 01).jpg|thumb|right|250px|<ruby><rb>[[w:スコルピオ|投射機]]</rb><rp>(</rp><rt>スコルピオー</rt><rp>)</rp></ruby>を操作する[[w:ダキア人|ダキア人]]の彫刻([[w:トラヤヌスの記念柱|トラヤヌス帝の記念柱]]に刻まれた[[w:レリーフ|レリーフ]])。]]
[[画像:Balliste_fireing.jpg|thumb|right|250px|<ruby><rb>[[w:スコルピオ|投射機]]</rb><rp>(</rp><rt>スコルピオー</rt><rp>)</rp></ruby>([[w:en:Scorpio (dart-thrower)|Scorpio]])の現代における復元。]]
:
*<!--❷--><sup>(2)</sup> [[wikt:en:quidam#Determiner|Quidam]] ante portam oppidi [[wikt:en:Gallus#Noun|Gallus]], <u>qui</u>
**城塞都市の城門の前にいた、ある<small>(1人の)</small>ガッリア人が、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の qui は、β系写本の記述で、α系写本にはない。)</span>
*per [[wikt:en:manus#Latin:_hand|manus]] [[wikt:en:sebum#Latin|sebi]] ac [[wikt:en:pix#Latin|picis]] [[wikt:en:traditus#Participle|traditas]] [[wikt:en:glaeba#Latin|glaebas]]
**手から手へと渡された<ruby><rb>獣脂</rb><rp>(</rp><rt>セーブム</rt><rp>)</rp></ruby>や<ruby><rb>[[w:ピッチ (樹脂)|樹脂]]</rb><rp>(</rp><rt>ピッチ</rt><rp>)</rp></ruby>の塊を、
*in [[wikt:en:ignis#Latin|ignem]] <u>e regione</u> turris [[wikt:en:proiciebat#Latin|proiciebat]]:
**攻城櫓の正面にある火炎の中に投げ込んでいたが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:e_regione#Latin|ē regiōne]]「まっすぐに」「~の真向かいに」。)</span>
*[[wikt:en:scorpio#Latin|scorpione]] ab [[wikt:en:latus#Latin:_side|latere]] [[wikt:en:dexter#Latin|dextro]] [[wikt:en:traiectus#Participle|traiectus]]
**<ruby><rb>[[w:スコルピオ|投射機]]</rb><rp>(</rp><rt>スコルピオー</rt><rp>)</rp></ruby>で右の横腹を射られて、
*[[wikt:en:exanimatus#Latin|exanimatus]]<nowiki>que</nowiki> [[wikt:en:concidit#Verb|concidit]].
**息絶えて倒れた。
:
*<!--❸--><sup>(3)</sup> Hunc ex [[wikt:en:proximus#Noun|proximis]] unus [[wikt:en:iacens#Latin|iacentem]] [[wikt:en:transgressus#Latin|transgressus]]
**彼が倒れているのを、すぐ近くの者たちのうちの1人が乗り越えて、
*[[wikt:en:idem#Latin|eodem]] illo [[wikt:en:munus#Latin|munere]] [[wikt:en:fungebatur#Latin|fungebatur]];
**その同じ<ruby><rb>任務</rb><rp>(</rp><rt>ムーヌス</rt><rp>)</rp></ruby>を果たしていた。
*[[wikt:en:idem#Latin|Eadem]] [[wikt:en:ratio#Latin|ratione]] [[wikt:en:ictus#Noun_4|ictu]] [[wikt:en:scorpio#Latin|scorpionis]] [[wikt:en:exanimatus#Latin|exanimato]]
**<small>(その第2の者が)</small>同様に<ruby><rb>[[w:スコルピオ|投射機]]</rb><rp>(</rp><rt>スコルピオー</rt><rp>)</rp></ruby>の射撃で息絶えさせられると
*alteri [[wikt:en:successit#Latin|successit]] tertius
**<small>(息絶えた)</small>第2の者に第3の者が代わって、
*et tertio quartus,
**<small>(さらに)</small>第3の者に第4の者が<small>(代わった)</small>。
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> <u>nec prius</u> ille est a [[wikt:en:propugnator#Latin|propugnatoribus]] [[wikt:en:vacuus#Latin|vacuus]] [[wikt:en:relictus#Participle|relictus]] locus
**防戦者たちは、持ち場を放棄することがなかった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:直訳は「その場(ille locus)は、防戦者たちによって空<small>〔無人〕</small>にして置かれることがなかった。」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:nec [[wikt:en:prius#Adverb|prius]] ~ [[wikt:en:quam#Conjunction|quam]] …「…するまでは~しなかった」)</span>
*<u>quam</u> [[wikt:en:restinctus#Latin|restincto]] [[wikt:en:agger#Latin|aggere]] atque <u>omni ex parte</u> [[wikt:en:submotus#Latin|submotis]] hostibus [[wikt:en:finis#Latin:_end|finis]] est [[wikt:en:pugnandi#Verb|pugnandi]] [[wikt:en:factus#Latin:_done|factus]].
**<ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>が鎮火されて、そのすべての方面から敵たちが追い払われて、戦いに終止符が打たれる<u>までは</u>。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、omni <u>ex</u> parte は ''[[ガリア戦記/注解編/写本と校訂版#Ciacconius|Ciacconius]]'' による修正で、<br> α系写本では omni <u>ea</u> parte <br> β系写本では omni parte となっている。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===26節===
*<span style="background-color:#ffd;">[[/注解/26節]] {{進捗|00%|2026-07-13}}</span>
;アウァーリクム脱出の企て、女たちの絶叫
:
; 万策尽きたガッリア勢が、アウァーリクム脱出を企てる
*<!--❶--><sup>(1)</sup> [[wikt:en:omnia#Noun|Omnia]] [[wikt:en:expertus#Participle|experti]] [[wikt:en:Galli#Latin|Galli]],
**ガッリア人たちはあらゆることを試みたが、
*quod res [[wikt:en:nullus#Determiner|nulla]] [[wikt:en:successerat#Latin|successerat]],
**何ら事が成功しなかったので、
*[[wikt:en:posterus#Latin|postero]] die [[wikt:en:consilium#Latin|consilium]] [[wikt:en:ceperunt#Latin|ceperunt]] ex [[wikt:en:oppidum#Latin|oppido]] [[wikt:en:profugio#Latin|profugere]],
**<small>(戦いの夜が明けて)</small>翌日には、<small>(アウァーリクムの)</small><ruby><rb>城塞都市</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>から退避する計画を立てた。
*[[wikt:en:hortans#Latin|hortante]] et [[wikt:en:iubens#Latin|iubente]] [[wikt:en:Vercingetorix#Latin|Vercingetorige]].
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]によって促され、命じられたものであった。
:
; 脱出をはかるガッリア勢の期待とその理由
*<!--❷--><sup>(2)</sup> Id [[wikt:en:silentium#Latin|silentio]] noctis [[wikt:en:conatus#Participle|conati]]
**そのこと<small>〔アウァーリクムからの退避〕</small>を夜の静けさのうちに試みても、
*non magna <u>iactura</u> suorum
**味方の大きな<ruby><rb>犠牲</rb><rp>(</rp><rt>ヤクトゥーラ</rt><rp>)</rp></ruby>もなしに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:iactura#Noun|iactura]] は「投げ捨てること」、比喩的に「損害、犠牲」。)</span>
*sese [[wikt:en:effecturus#Latin|effecturos]] <span style="color:#009900;"><small>(esse)</small></span> [[wikt:en:sperabant#Latin|sperabant]],
**自分たちは成し遂げるだろうと期待していた。
*<u>propterea quod</u> <u>neque</u> longe ab oppido [[wikt:en:castra#Latin|castra]] [[wikt:en:Vercingetorix#Latin|Vercingetorigis]] [[wikt:en:aberant#Latin|aberant]],
**──というのも、ウェルキンゲトリークスの陣営は<small>(アウァーリクムの)</small></small><ruby><rb>城塞都市</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>からあまり離れていなかったし、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:propterea_quod#Latin|propterea quod]] ~「なぜなら~からである」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:neque ~ et …「~ではなく、…である」)</span>
*<u>et</u> [[wikt:en:palus#Latin|palus]], <u>quae [[wikt:en:perpetuus#Latin|perpetua]]</u> [[wikt:en:intercedebat#Latin|intercedebat]], [[wikt:en:Romani#Latin|Romanos]] ad [[wikt:en:insequendum#Verb|insequendum]] [[wikt:en:tardabat#Latin|tardabat]].
**沼地も絶え間なく介在していて、ローマ人たちの追跡を遅らせていたからだ。──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:二つ目の下線部は、α系写本の語順は quae perpetua だが、<br> β系写本の語順は perpetua quae となっている。)</span>
:
; 母親たちが男たちに、女子供を置き去りにして敵のいけにえにするな、と哀願する
*<!--❸--><sup>(3)</sup> [[wikt:en:iam#Latin|Iam]]<nowiki>que</nowiki> <u>hoc</u> facere [[wikt:en:noctu#Latin|noctu]] [[wikt:en:apparabant#Latin|apparabant]],
**すでに、<u>このことを</u>実行することを夜間に準備していた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、主要写本ω では [[wikt:en:haec#Latin|haec]]<sub> (中性・複数・対格)</sub> だが、<br> 最初の印刷本 [[ガリア戦記/注解編/写本と校訂版#Editio_princeps|ed.pr]] では [[wikt:en:hoc#Latin:_this|hoc]]<sub> (中性・単数・対格)</sub> としている。)</span>
*<u>cum</u> [[wikt:en:mater#Latin|matres]] [[wikt:en:familia#Latin|familiae]] [[wikt:en:repente#Adverb_2|repente]] in [[wikt:en:publicum#Noun|publicum]] [[wikt:en:procurrerunt#Latin|procurrerunt]],
**そのときに家族の母親たちが不意に公の場に走り出て来て、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の cum は、「倒逆のcum」([[wikt:en:cum inversum|cum inversum]])と呼ばれ、<br> cum 以下 ~ impediret までの副文が、上記の主文よりも重要な構文の中心になる。)</span>
*[[wikt:en:flens#Latin|flentes]]<nowiki>que</nowiki> [[wikt:en:proiectus#Latin|proiectae]] ad [[wikt:en:pes#Latin|pedes]] suorum
**泣きながら、味方<small>(の男たち)</small>の足元に<small>(身を)</small>投げ出して、
*omnibus [[wikt:en:prex#Latin|precibus]] [[wikt:en:petierunt#Latin|petierunt]],
**あらゆる懇願でもって頼んだ。
*ne se et [[wikt:en:communis#Latin|communes]] [[wikt:en:liberi#Noun_2|liberos]] hostibus ad [[wikt:en:supplicium#Latin|supplicium]] [[wikt:en:dederent#Latin|dederent]],
**自分たち<small>〔女たち〕</small>と<small>(男たちとの)</small>共通の子供たちを、処刑されることのために敵方に引き渡さないで、
*<u>quos</u> ad [[wikt:en:capiendus#Latin|capiendam]] [[wikt:en:fuga#Latin|fugam]] [[wikt:en:natura#Latin|naturae]] et [[wikt:en:vis#Latin|virium]] [[wikt:en:infirmitas#Latin|infirmitas]] [[wikt:en:impediret#Latin|impediret]].
**それらの者<small>〔女子供たち〕</small>が逃亡をとるためには、性質や体力の弱さが、妨げるのだ、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:quos#Latin|quos]]<sub> (男性・複数・対格)</sub> だが、<br> β系写本では [[wikt:en:quas#Latin|quas]]<sub> (女性・複数・対格)</sub> となっている。)</span>
:
; 窮した母親たちが、男たちの脱出の兆候をローマ人に伝えようとする
*<!--❹--><sup>(4)</sup> [[wikt:en:ubi#Latin|Ubi]] eos in [[wikt:en:sententia#Latin|sententia]] [[wikt:en:perstare#Latin|perstare]] [[wikt:en:viderunt#Latin|viderunt]],
**彼ら<small>〔男たち〕</small>が<small>(女・子供を置き去りで脱出するという)</small>意思を固持していると<small>〔女たちが〕</small>見て取るや、
*[[wikt:en:quod#Conjunction|quod]] [[wikt:en:plerumque#Adverb|plerumque]] in [[wikt:en:summus#Latin|summo]] [[wikt:en:periculum#Latin|periculo]] [[wikt:en:timor#Latin|timor]] [[wikt:en:misericordia#Latin|misericordiam]] non [[wikt:en:recipit#Latin|recipit]],
**──というのは、たいてい最大級の危険においては、恐怖が<ruby><rb>憐憫</rb><rp>(</rp><rt>れんびん</rt><rp>)</rp></ruby>の<ruby><rb>情</rb><rp>(</rp><rt>じょう</rt><rp>)</rp></ruby>を受け入れないものであるからだが、──
*[[wikt:en:conclamo#Latin|conclamare]] et [[wikt:en:significo#Latin|significare]] de [[wikt:en:fuga#Latin|fuga]] [[wikt:en:Romani#Latin|Romanis]] [[wikt:en:coeperunt#Latin|coeperunt]].
**<small>(女たちは)</small>叫び声を上げて、ローマ人たちに<small>(男たちの)</small>逃亡について知らしめ始めた。
:
; ガッリア勢の男たちが、ローマ側の騎兵隊を恐れて、アウァーリクム脱出を断念する
*<!--❺--><sup>(5)</sup> [[wikt:en:qui#Determiner|Quo]] [[wikt:en:timor#Latin|timore]] [[wikt:en:perterritus#Latin|perterriti]] [[wikt:en:Galli#Latin|Galli]],
**<small>(女たちがローマ側へ男たちの脱出について報知したことで)</small>その恐怖によって脅かされたガッリア人<small>(の男)</small>たちは、
*[[wikt:en:ne#Latin:_no|ne]] ab [[wikt:en:equitatus#Latin|equitatu]] Romanorum [[wikt:en:via#Latin|viae]] [[wikt:en:praeoccuparentur#Latin|praeoccuparentur]],
**ローマ方の[[w:騎兵|騎兵隊]]によって道があらかじめ占拠されないように、
*[[wikt:en:consilium#Latin|consilio]] [[wikt:en:destiterunt#Latin|destiterunt]].
**<small>(アウァーリクムからの脱出の)</small>計画を取り止めた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===27節===
[[画像:Avaricum_westpoint_july_2006.jpg|thumb|right|300px|[[w:アウァリクム包囲戦|アウァーリクム攻略戦]]の[[w:ジオラマ|ジオラマ]](再掲;[[w:陸軍士官学校 (アメリカ合衆国)|米国陸軍士官学校]]博物館)。ローマ軍の<ruby><rb>[[w:アッゲル|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>の周辺には、<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby>(vinea)の両端を開いて多数つないだ廊下状の通路(坑道)が延びている。]]
*<span style="background-color:#ffd;">[[/注解/27節]] {{進捗|00%|2026-08-01}}</span>
;ローマ軍が大雨の中でアウァーリクムの城壁を占拠
:
*<!--❶--><sup>(1)</sup> Postero die Caesar,
**翌日にカエサルは、
*[[wikt:en:promotus#Latin|promota]] [[wikt:en:turris#Latin|turri]]
**<small>(後退していた)</small>[[w:攻城塔|攻城櫓]]<small>(の1基)</small>が前進させられて、
*<u>perfectis</u><nowiki>que</nowiki> [[wikt:en:opus#Latin|operibus]], quae facere [[wikt:en:instituerat#Latin|instituerat]],
**実施を定めていた作業が<u>成し遂げられると</u>、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、<br> π系写本では [[wikt:en:perfectis#Latin|perfectīs]] 「完成されると」だが、<br> α系・ρ系写本では [[wikt:en:derectis#Latin|dērēctīs]] 「整えられると」<br> となっている。)</span>
*magno [[wikt:en:coortus#Latin|coorto]] <u>imbre</u>
**激しい嵐が起こったが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:imbre#Latin|imbre]] だが、β系写本では [[wikt:en:imbri#Latin|imbri]] となっている。)</span>
*non [[wikt:en:inutilis#Latin|inutilem]] hanc ad [[wikt:en:capiendus#Latin|capiendum]] [[wikt:en:consilium#Latin|consilium]] [[wikt:en:tempestas#Latin|tempestatem]] <u>arbitratus est</u>,
**作戦計画を立てるために、この天候は不利ではないと思われた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:arbitratus#Participle|arbitratus]] est だが、β系写本では単に arbitratus となっている。)</span>
*[[wikt:en:quod#Conjunction|quod]] paulo [[wikt:en:incautius#Adverb|incautius]] [[wikt:en:custodia#Latin|custodias]] in [[wikt:en:murus#Latin|muro]] [[wikt:en:dispositus#Latin|dispositas]] [[wikt:en:videbat#Latin|videbat]],
**──というのは、城壁に配置された番兵たちが少しより油断していると見ていたからだが、──
*<u>suosque</u> [[wikt:en:languide#Adverb|languidius]] in [[wikt:en:opus#Latin|opere]] [[wikt:en:versor#Latin|versari]] [[wikt:en:iussit#Verb|iussit]]
**配下の者たちには<small>(わざと)</small>より緩慢に作業に従事することを命じて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:suos#Latin|suōs]]<nowiki>que</nowiki> だが、β系写本では [[wikt:en:suos#Latin|suōs]] [[wikt:en:quoque#Adverb|quoque]] となっている。)</span>
*et, [[wikt:en:quid#Pronoun_2|quid]] [[wikt:en:fieri#Latin|fieri]] [[wikt:en:vellet#Latin|vellet]], [[wikt:en:ostendit#Latin|ostendit]].
**何がなされることを<small>(カエサルが)</small>欲しているか、を示した。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:legio#Latin|Legionibus]]<nowiki>que</nowiki> <u>extra castra intra [[wikt:en:vinea#Latin|vineas]]</u> in occulto [[wikt:en:expeditus#Participle|expeditis]],
**[[w:ローマ軍団|諸軍団]]が<u>陣営の外の<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby>の内側で</u>ひそかに準備を整えており、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、写本や校訂版によって異同がある。[[ガリア戦記_第7巻/注解/27節#注記|注記]]を参照。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:in_occulto#Latin|in occulto]]「ひそかに」「隠れた所で」)</span>
*[[wikt:en:cohortatus#Latin|cohortatus]], ut [[wikt:en:aliquando#Latin|aliquando]] pro [[wikt:en:tantus#Latin|tantis]] [[wikt:en:labor#Latin|laboribus]] [[wikt:en:fructus#Latin:_noun|fructum]] victoriae [[wikt:en:perciperent#Latin|perciperent]],
**<small>(カエサルは)</small>やっと、これほどの労苦の見合う勝利の報酬を我がものとするように激励し、
*iis, qui [[wikt:en:primus#Latin|primi]] [[wikt:en:murus#Latin|murum]] [[wikt:en:adscendissent#Latin|adscendissent]], [[wikt:en:praemium#Latin|praemia]] [[wikt:en:proposuit#Latin|proposuit]]
**一番乗りとして城壁に登った者たちには、恩賞を約束して、
*[[wikt:en:miles#Latin|militibus]]<nowiki>que</nowiki> [[wikt:en:signum#Latin|signum]] [[wikt:en:dedit#Latin|dedit]].
**兵士たちに号令を発した。
:
*<!--❸--><sup>(3)</sup> Illi [[wikt:en:subito#Adverb_8|subito]] ex omnibus partibus [[wikt:en:evolaverunt#Latin|evolaverunt]]
**彼ら<small>〔ローマ軍団兵〕</small>は不意にあらゆる方角から飛び出して、
*[[wikt:en:murus#Latin|murum]]<nowiki>que</nowiki> celeriter [[wikt:en:compleverunt#Latin|compleverunt]].
**速やかに<small>(アウァーリクムの)</small>城壁を埋め尽くしたのだ。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===28節===
*<span style="background-color:#ffd;">[[/注解/28節]] {{進捗|00%|2026-08-11}}</span>
;ローマ軍がアウァーリクムの市民4万人を大虐殺
:
*<!--❶--><sup>(1)</sup> Hostes re nova [[wikt:en:perterritus#Latin|perterriti]],
**敵たち<small>〔籠城するガッリア勢〕</small>は新たな事態に脅かされて、
*[[wikt:en:murus#Latin|muro]] [[wikt:en:turris#Latin|turribus]]<nowiki>que</nowiki> [[wikt:en:deiectus#Participle|deiecti]]
**<small>(ローマ兵によって)</small>城壁や櫓から追い落とされて、
*in [[wikt:en:forum#Latin|foro]] ac locis [[wikt:en:patentior#Latin|patentioribus]] [[wikt:en:cuneatim#Latin|cuneatim]] [[wikt:en:constiterunt#Etymology_1|constiterunt]],
**<ruby><rb>広場</rb><rp>(</rp><rt>フォルム</rt><rp>)</rp></ruby>や開けた場所に楔状に立ちふさがった。
*hoc animo, ut, si [[wikt:en:aliqui#Latin|qua]] ex parte [[wikt:en:obviam#Adverb|obviam]] <span style="color:#009900;">[</span>contra<span style="color:#009900;">]</span> [[wikt:en:veniretur#Latin|veniretur]], [[wikt:en:acies#Latin|acie]] [[wikt:en:instructus#Latin|instructa]] [[wikt:en:depugnarent#Latin|depugnarent]].
**もし、どの方向から相対して対抗して来られても、戦列を整えて決戦しようという心積もりでいたのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:contra#Latin|contra]] は α系・π系写本・写本Rにある記述だが、<br> 写本U にはなく、削除提案されている。)</span>
:
*<!--❷--><sup>(2)</sup> Ubi [[wikt:en:nemo#Latin|neminem]] in aequum locum sese [[wikt:en:demitto#Latin|demittere]], sed [[wikt:en:totus#Latin:_whole|toto]] [[wikt:en:undique#Latin|undique]] [[wikt:en:murus#Latin|muro]] [[wikt:en:circumfundi#Latin|circumfundi]] [[wikt:en:viderunt#Latin|viderunt]],
**<small>(ローマ兵が)</small>誰も平らな所に降りて来ず、しかし城壁全体の至る所で取り囲まれたことを見たときに、
*[[wikt:en:veritus#Latin|veriti]], ne [[wikt:en:omnino#Latin|omnino]] spes fugae [[wikt:en:tolleretur#Latin|tolleretur]],
**<small>(籠城ガッリア勢は)</small>逃亡のあらゆる希望を奪われないかと怖れて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:veriti, [[wikt:en:ne#Latin:_no|ne]] ~ 「~ではないかと恐れて」恐れの表現。)</span>
*[[wikt:en:abiectus#Latin|abiectis]] [[wikt:en:arma#Latin|armis]]
**武器を投げ捨てて、
*[[wikt:en:ultimus#Latin|ultimas]] oppidi partes
**城塞都市の<small>(ローマ勢から)</small>最も遠くの方面を
*[[wikt:en:continens#Latin|continenti]] [[wikt:en:impetus#Latin|impetu]] [[wikt:en:petiverunt#Latin|petiverunt]],
**絶え間ない殺到によって求めた。
:
*<!--❸--><sup>(3)</sup> <u>pars</u><nowiki>que</nowiki> ibi, cum [[wikt:en:angustus#Latin|angusto]] [[wikt:en:exitus#Latin|exitu]] portarum se ipsi [[wikt:en:premerent#Latin|premerent]], a militibus,
**ある者たちは、城門の狭い出口で自分らで互いに押し合っていたので、そこで<small>(ローマ人)</small>兵士たちによって<small>(殺され)</small>、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:pars#Latin|pars]] ~, pars …「ある者たちは~、別の者たちは…」。)</span>
*<u>pars</u> iam [[wikt:en:egressus#Latin|egressa]] portis ab [[wikt:en:eques#Latin|equitibus]] est [[wikt:en:interfectus#Latin|interfecta]].
**別の者たちはすでに城門を出ていたが、<small>(ローマ側の)</small>[[w:騎兵|騎兵]]たちによって虐殺された。
:
*<!--❹--><sup>(4)</sup> [[wikt:en:nec#Latin|Nec]] fuit [[wikt:en:quisquam#Pronoun|quisquam]], qui [[wikt:en:praeda#Latin|praedae]] [[wikt:en:studeret#Latin|studeret]].
**<small>(ローマ勢には)</small>戦利品を熱心に求める何者もいなかった。
*[[wikt:en:sic#Latin|Sic]] et <u>Cenabi</u> [[wikt:en:caedes#Latin|caede]] et [[wikt:en:labor#Latin|labore]] [[wikt:en:opus#Latin|operis]] [[wikt:en:incitatus#Latin|incitati]]
**このように、ケナブムの<small>(ローマ市民の)</small>殺害にも、(攻城)作業の労苦にも煽られて
**:<span style="color:#009900;">(訳注:カルヌーテース族によるローマ市民の殺害については[[#3節|3節]]を参照。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の cenabi は、α系写本では [[wikt:en:Genabi#Latin|genabi]] <br> ρ系写本や写本Tでは [[wikt:en:Genabensi#Adjective|genabensi]]<br> 写本Uおよび写本Tの一部では cenabensi となっている。<br> なお、cenabi, cenabensi はケルト語風の表記である。)</span>
*non [[wikt:en:aetas#Latin|aetate]] [[wikt:en:confectus#Latin|confectis]],
**<small>(ローマ勢は)</small>年老いた者たちも、
*non [[wikt:en:mulier#Latin|mulieribus]],
**妻女たちも、
*non [[wikt:en:infans#Noun|infantibus]] [[wikt:en:pepercerunt#Latin|pepercerunt]].
**乳幼児たちも<small>(虐殺することを)</small>思いとどまらなかった。
**:<span style="color:#009900;">(訳注:ビトゥリゲース族はローマ市民の殺害には関与しておらず、報復される対象とするのは的外れである。</span>
**:<span style="color:#009900;">ましてや非戦闘員である老人・女性・子供たちまで殺戮するのは、戦争の狂気というしかない。)</span>
:
*<!--❺--><sup>(5)</sup> [[wikt:en:denique#Latin|Denique]] ex omni <u><span style="color:#009900;">eo</span></u> numero, qui fuit circiter milium XL<small> ([[wikt:en:quadraginta#Latin|quadraginta]])</small>,
**ついには、約40000名もいたすべての人員のうち、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:eo#Latin:_there|eo]] は β系写本の記述で、α系写本にはない。)</span>
*vix DCCC<small> ([[wikt:en:octingenti#Latin|octingenti]])</small>, qui primo [[wikt:en:clamor#Latin|clamore]] [[wikt:en:auditus#Latin|audito]] se ex oppido <u>eiecerunt</u>,
**やっと800名が、はじめにどよめきを聞いて、城塞都市から急ぎ出て、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:eiecerunt#Latin|eiecerunt]]<small> (直接法・完了)</small> だが、<br> β系写本では [[wikt:en:eiecerant#Latin|eiecerant]]<small> (直接法・過去完了)</small> となっている。)</span>
*[[wikt:en:incolumis#Latin|incolumes]] ad [[wikt:en:Vercingetorix#Latin|Vercingetorigem]] [[wikt:en:pervenerunt#Latin|pervenerunt]].
**無傷のままで[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]のもとへ到着した。
:
*<!--❻--><sup>(6)</sup> Quos ille multa iam nocte <u>silentio</u> ex fuga [[wikt:en:excepit#Latin|excepit]],
**彼<small>〔ウェルキンゲトリークス〕</small>は、逃亡して来たその者たちを、すでに夜も更けた<u>静寂のうちに</u>迎え入れた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:silentio#Latin|silentio]] だが、β系写本にはない。<br> 他方、β系写本では [[wikt:en:sic#Latin|sic]] とあるが、α系写本にはない。)</span>
*[[wikt:en:veritus#Latin|veritus]], ne qua in castris ex eorum [[wikt:en:concursus#Latin:_convergence|concursu]] et [[wikt:en:misericordia#Latin|misericordia]] [[wikt:en:vulgus#Latin|vulgi]] seditio <u>oreretur</u>,
**彼らの密集や一般兵士たちの同情から、陣営の中で何らかの暴動が生じないように怖れて、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ne [[wikt:en:aliqui#Latin|qua (aliqua)]] ~ [[wikt:en:seditio#Latin|seditio]]「何らかの暴動が~ないように」
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、一部の写本は [[wikt:en:oreretur#Latin|oreretur]] だが、<br> 他の写本では [[wikt:en:oriretur#Latin|oriretur]] となっているが、語形の相違。)</span>
*ut procul in via [[wikt:en:dispositus#Latin|dispositis]] [[wikt:en:familiaris#Noun|familiaribus]] suis [[wikt:en:princeps#Latin|principibus]]<nowiki>que</nowiki> [[wikt:en:civitas#Latin|civitatum]],
**自らの郎党たちや部族の領袖たちを<small></small>(陣営の)遠くから道沿いに配置して、
*[[wikt:en:disparandus#Latin|disparandos]] [[wikt:en:deducendus#Latin|deducendos]]<nowiki>que</nowiki> ad suos [[wikt:en:curaret#Latin|curaret]],
**<small>(敗走者たちを)</small>味方のもとへ、引き離して連れて行くように手配した。
*quae [[wikt:en:cuique#Latin|cuique]] civitati pars castrorum ab [[wikt:en:initium#Latin|initio]] [[wikt:en:obvenerat#Latin|obvenerat]].
**陣営の各部分は、おのおのの部族にはじめから与えられていたのだ。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===29節===
*<span style="background-color:#ffd;">[[/注解/29節]] {{進捗|00%|2026-08-11}}</span>
[[画像:Vercingetorix stater CdM.jpg|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の横顔が刻まれたガリアの金貨(パリの[[w:ビブリオテーク・ナショナル|仏国立図書館]]貨幣部蔵)]]
;ウェルキンゲトリークスが演説で味方を鼓舞する
:
*<!--❶--><sup>(1)</sup> Postero die [[wikt:en:concilium#Latin|concilio]] [[wikt:en:convocatus#Latin|convocato]],
**翌日に、会合が召集されると、
*[[wikt:en:consolatus#Latin|consolatus]] [[wikt:en:cohortatus#Latin|cohortatus]]<nowiki>que</nowiki> est,
**<small>(ウェルキンゲトリークスは、味方の者たちを)</small>慰めて、励ました:
*<u>ne</u> se [[wikt:en:admodum#Latin|admodum]] animo [[wikt:en:demitterent#Latin|demitterent]],
**あまり気を落とさないように、
*<u>ne</u> [[wikt:en:perturbarentur#Latin|perturbarentur]] [[wikt:en:incommodum#Latin|incommodo]].
**敗北により取り乱さないように、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:上の下線部は、α系写本では [[wikt:en:ne#Latin:_no|ne]] ~ ne だが、<br> β系写本では ne ~ [[wikt:en:neve#Latin|neve]] となっている。)</span>
:
*<!--❷--><sup>(2)</sup> Non [[wikt:en:virtus#Latin|virtute]] neque in [[wikt:en:acies#Latin|acie]] [[wikt:en:vicisse#Latin|vicisse]] [[wikt:en:Romani#Latin|Romanos]],
**ローマ人たちが勝ったのは、武勇においてでも、戦列<small>〔野外の合戦〕</small>においてでもなく、
*sed [[wikt:en:artificium#Noun|artificio]] [[wikt:en:quidam#Determiner|quodam]] et [[wikt:en:scientia#Latin:_knowledge|scientia]] [[wikt:en:oppugnatio#Latin|oppugnationis]],
**ある種の技巧および攻城戦の知識によるものであって、
*cuius rei [[wikt:en:fuerint#Latin|fuerint]] ipsi [[wikt:en:imperitus#Latin|imperiti]].
**その事柄に<small>(ガッリア人)</small>自身が通じていなかったのだ。
**:<span style="color:#009900;">(訳注:[[ガリア戦記 第5巻#42節|第5巻42節]]では、ネルウィイー族らガッリア北部のベルガエ勢はローマ人の攻城術をまねていた。)</span>
:
*<!--❸--><sup>(3)</sup> [[wikt:en:erro#Latin:_wander|Errare]], si [[wikt:en:aliqui#Latin|qui]] in [[wikt:en:bellum#Latin|bello]] omnes [[wikt:en:secundus#Adjective|secundos]] rerum [[wikt:en:proventus#Latin|proventus]] [[wikt:en:exspectent#Latin|exspectent]].
**誰であれ、戦争において、万事が順調な成功になることを期待するのならば、<small>(その者らは)</small>誤っている。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:語順が判りにくいが、<br> 物事のすべて(omnes rerum)が幸運な結果(secundos proventus)であることを期待するのならば~。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:errare の意味上の主語([[wikt:en:eos#Latin|eos]])が省略されている。)</span>
:
*<!--❹--><sup>(4)</sup> Sibi [[wikt:en:numquam#Latin|numquam]] [[wikt:en:placuisse#Latin|placuisse]] [[wikt:en:Avaricum#Latin|Avaricum]] [[wikt:en:defendi#Latin|defendi]],
**自分<small>〔ウェルキンゲトリークス〕</small>にとって、アウァーリクムが防衛されることは決して好ましいものではなかった。
*cuius rei [[wikt:en:testis#Latin:_witness|testes]] ipsos [[wikt:en:haberet#Latin|haberet]];
**その事の証人は<small>(諸君ら)</small>自身である。
*sed <u>factum</u> [[wikt:en:inprudentia#Latin|inprudentia]] [[wikt:en:Bituriges#Latin|Biturigum]] et [[wikt:en:nimius#Latin|nimia]] [[wikt:en:obsequentia#Latin|obsequentia]] reliquorum, <u>uti</u> hoc [[wikt:en:incommodum#Latin|incommodum]] [[wikt:en:acciperetur#Latin|acciperetur]].
**だが、ビトゥリゲース族の軽率さと、ほかの者たちの過度な同調により、この敗北を蒙るようになったのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:factus#Latin:_done|factum]] (esse) ~ [[wikt:en:uti#Latin:_how|uti]] …「…ようになった」)</span>
:
*<!--❺--><sup>(5)</sup> Id tamen se celeriter [[wikt:en:maior#Adjective_2|maioribus]] [[wikt:en:commodum#Latin:noun|commodis]] [[wikt:en:sanaturus#Latin|sanaturum]] <span style="color:#009900;">(esse)</span>.
**しかしながら、自分がそれ<small>〔敗北〕</small>を速やかに大いなる勝利によって埋め合わせるであろう。
:
*<!--❻--><sup>(6)</sup> Nam quae ab reliquis [[wikt:en:Galli#Latin:_Gauls|Gallis]] civitates [[wikt:en:dissentirent#Latin|dissentirent]],
**一方、<small>(ウェルキンゲトリークスら)</small>ほかのガッリア人たちとは意見を相異する諸部族、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:先行詞 [[wikt:en:civitas#Latin|civitates]] が quae 以下の関係文中に入り込む倒置の語順。)</span>
*has sua [[wikt:en:diligentia#Noun|diligentia]] [[wikt:en:adiuncturus#Latin|adiuncturum]] <span style="color:#009900;">(esse)</span>
**彼ら<small>〔諸部族〕</small>を自分<small>〔ウェルキンゲトリークス〕</small>の入念さにより合流させるであろうし、
*atque unum [[wikt:en:consilium#Latin|consilium]] [[wikt:en:totus#Latin:_whole|totius]] [[wikt:en:Gallia#Latin|Galliae]] [[wikt:en:effecturus#Latin|effecturum]] <span style="color:#009900;">(esse)</span>,
**全ガッリアの考えを一つにするであろう。
*cuius [[wikt:en:consensus#Latin|consensui]] ne orbis quidem terrarum [[wikt:en:possit#Latin|possit]] [[wikt:en:obsistere#Latin|obsistere]];
**その団結には、全世界でさえ邪魔することはできない。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:orbis#Latin|orbis]] [[wikt:en:/terrarum#Latin|terrarum]]「全世界」)</span>
*[[wikt:en:id#Latin|id]]<nowiki>que</nowiki> se [[wikt:en:prope#Adverb|prope]] iam [[wikt:en:effectus#Latin:_participle|effectum]] habere.
**それを自分<small>〔ウェルキンゲトリークス〕</small>は、ほとんどすでに成し遂げたと思う。
:
*<!--❼--><sup>(7)</sup> [[wikt:en:interea#Latin|Interea]] [[wikt:en:aequus#Latin|aequum]] esse ab iis [[wikt:en:communis#Latin|communis]] [[wikt:en:salus#Latin|salutis]] causa [[wikt:en:impetrari#Latin|impetrari]],
**その間に<small>(ガッリアの)</small>共通の安全のために、彼ら<small>〔ガッリア人〕</small>によって<small>(以下のように)</small>達成されることが好都合である。
*ut castra [[wikt:en:munio#Latin|munire]] [[wikt:en:instituerent#Latin|instituerent]],
**陣営を防御することを実施するように、
*[[wikt:en:quo#Latin:_where|quo]] [[wikt:en:facilius#Latin|facilius]] [[wikt:en:repentinus#Latin|repentinos]] hostium [[wikt:en:impetus#Latin|impetus]] <u>sustinerent</u>.
**それにより、敵たち<small>〔ローマ人〕</small>の予期せぬ襲撃に対して、より容易に持ちこたえられるように。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:sustinerent#Latin|sustinerent]] だが、<br> β系写本では [[wikt:en:sustinere#Latin|sustinere]] [[wikt:en:possent#Latin|possent]] となっている。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===30節===
*<span style="background-color:#ffd;">[[/注解/30節]] {{進捗|00%|2026-08-29}}</span>
;ガッリア勢がウェルキンゲトリークスに心服し、希望を抱く
:
*<!--❶--><sup>(1)</sup> Fuit haec [[wikt:en:oratio#Latin|oratio]] non [[wikt:en:ingratus#Latin|ingrata]] [[wikt:en:Galli#Latin:_Gauls|Gallis]],
**この演説は、ガッリア人たちにとっては不快なものではなかった。
*et maxime, quod ipse animo non [[wikt:en:defecerat#Latin|defecerat]], [[wikt:en:tantus#Latin|tanto]] [[wikt:en:acceptus#Latin|accepto]] [[wikt:en:incommodum#Latin|incommodo]],
**──というのは、とりわけ<small>(ウェルキンゲトリークス)</small>自身がこれほどの敗北を蒙っても意気消沈することなく、
*neque <u>se</u> [[wikt:en:in_occultum#Latin|in occultum]] [[wikt:en:abdiderat#Latin|abdiderat]]
**秘密の場所に身を隠したり、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の再帰代名詞 se は 最初の印刷本 [[ガリア戦記/注解編/写本と校訂版#Editio_princeps|''ed. pr.'']] で挿入されたもので、主要写本 ω にはない。)</span>
*et [[wikt:en:conspectus#Latin:_noun|conspectum]] [[wikt:en:multitudo#Latin|multitudinis]] [[wikt:en:fugerat#Latin|fugerat]]<!--,-->;
**大勢の見ているところを避けたりしなかったからである──。
:
*<!--❷--><sup>(2)</sup> [[wikt:en:plus#Latin:_adverb|plus]]<nowiki>que</nowiki> animo [[wikt:en:provideo#Latin|providere]] et [[wikt:en:praesentio#Latin|praesentire]] [[wikt:en:existimabatur#Latin|existimabatur]],
**<small>(ウェルキンゲトリークスは他の者よりも)</small>より先見の明があり、予感していると考えられていた。
*quod re [[wikt:en:integer#Latin|integra]]
**──というのは、事態が手つかずのままで、
*[[wikt:en:primo#Latin:_adverb|primo]] [[wikt:en:incendendus#Latin|incendendum]] <span style="color:#009900;">(esse)</span> [[wikt:en:Avaricum#Latin|Avaricum]],
**当初はアウァーリクムが焼き払われるべきだと<small>(主張し)</small>、
*post [[wikt:en:deserendus#Latin|deserendum]] <span style="color:#009900;">(esse)</span>, [[wikt:en:censuerat#Latin|censuerat]].
**後には<small>(アウァーリクムは)</small>放棄されるべきだ、と主張していたからだ──。
:
*<!--❸--><sup>(3)</sup> [[wikt:en:itaque#Latin|Itaque]] <u>ut</u> [[wikt:en:reliquus#Latin|reliquorum]] [[wikt:en:imperator#Latin|imperatorum]] res adversae [[wikt:en:auctoritas#Latin|auctoritatem]] [[wikt:en:minuunt#Latin|minuunt]],
**それゆえに、逆境がほかの将軍たちの影響力を減ずる一方で、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ut#Conjunction|ut]] ~, [[wikt:en:sic#Latin|sic]] …「~であるように、同様に…」あるいは「~である一方で、…」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:res#Latin|res]] [[wikt:en:adversus#Participle|adversae]]「逆境、(戦争における)敗北」。)</span>
*<u>sic</u> huius <u>ex contrario</u> [[wikt:en:dignitas#Latin|dignitas]] <u>incommodo</u> [[wikt:en:acceptus#Latin|accepto]] <u>in dies</u> [[wikt:en:augebatur#Latin|augebatur]].
**それどころか、彼の威厳は、災難を蒙っても、日ごとに高まっていたのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ex_contrario#Latin|ex contrario]]「それどころか」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:incommodum#Latin|incommodum]]「不運、災難、(戦争における)敗北」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:in_dies#Latin|in dies]]「日に日に」「日ごとに」。)</span>
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> [[wikt:en:simul#Latin|Simul]] <u>in spem [[wikt:en:veniebant#Latin|veniebant]]</u> eius [[wikt:en:adfirmatio#Latin|adfirmatione]] de reliquis [[wikt:en:adiungendus#Latin|adiungendis]] [[wikt:en:civitas#Latin|civitatibus]];
**同時に、彼の断言によって<small>(ガッリア人たちは)</small>ほかの諸部族を合流させることについて希望を抱いていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:in [[wikt:en:spes#Latin|spem]] [[wikt:en:venio#Latin|venire]]「希望を抱くようになる」。)</span>
*[[wikt:en:primum#Adverb|primum]]<nowiki>que</nowiki> eo tempore [[wikt:en:Galli#Latin:_Gauls|Galli]] [[wikt:en:castra#Latin|castra]] [[wikt:en:munio#Latin|munire]] [[wikt:en:instituerunt#Latin|instituerunt]],
**そのときに初めて、ガッリア人たちは陣営の防備を固めることに着手した。
*et <u>sic</u> <u>sunt</u> animo <u>consternati</u>, homines [[wikt:en:insuetus#Latin|insueti]] [[wikt:en:labor#Latin|laboris]],
**<small>(陣営の防備という)</small>労苦に慣れていない人々が、<u>気持ちが狼狽していたので、</u>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:sic#Latin|sic]] ~, [[wikt:en:ut#Conjunction|ut]] …「~であるので、その結果…ほどだった」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の sunt は主要写本 ω の記述だが、erant とする修正提案もある。<br> sunt なら未完了過去 (sunt consternati)、erant なら過去完了 (erant consternati) になる。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:consternati#Latin|consternati]] は主要写本 ω の記述だが、<br> ''[[ガリア戦記/注解編/写本と校訂版#Nipperdey|Nipperdey]]'' は [[wikt:en:confirmati#Latin|confirmati]] と修正提案している。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:写本の読みは sunt [[wikt:en:consternati#Latin|consternati]] 「(彼らは)恐怖に陥っていた、混乱していた。」だが、<br> 修正読みでは sunt [[wikt:en:confirmati#Latin|confirmati]] 「(彼らは)励まされた」。)</span>
*<u>ut</u> omnia, quae [[wikt:en:imperarentur#Latin|imperarentur]], sibi [[wikt:en:patiendus#Latin|patienda]] <span style="color:#009900;">(esse)</span> <u>et perferenda <span style="color:#009900;">(esse)</span></u> [[wikt:en:existimarent#Latin|existimarent]].
**自分たちにとって、命令されたことすべてを耐えるべきであり、<u>成就するべきである</u>と考えるに至ったほどであった。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の et [[wikt:en:perferenda#Latin|perferenda]] (esseは省略されている) はβ系写本の記述で、<br> α系写本にはない。)</span>
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===31節===
*<span style="background-color:#ffd;">[[/注解/31節]] {{進捗|00%|2026-08-29}}</span>
;ウェルキンゲトリークスがほかの諸部族を勧誘し、兵力を補充する
:
; ウェルキンゲトリークスが、さらに多くの部族に同盟を誘いかける
*<!--❶--><sup>(1)</sup> Nec minus, quam est [[wikt:en:pollicitus#Latin|pollicitus]],
**約束したことに劣らず、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:nec#Latin|nec]] [[wikt:en:minus#Adverb_4|minus]] [[wikt:en:quam#Latin|quam]] ~「~に劣らず」。)</span>
*[[wikt:en:Vercingetorix#Latin|Vercingetorix]] animo [[wikt:en:laborabat#Latin|laborabat]], ut reliquas [[wikt:en:civitas#Latin|civitates]] [[wikt:en:adiungeret#Latin|adiungeret]],
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、ほかの諸部族を加盟させるように、心から努力した。
*atque <u>earum principes donis pollicitationibusque</u> [[wikt:en:adliciebat#Latin|adliciebat]].
**それらの領袖たちに贈物を約束することによって、誘い込もうとしていた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、β系写本では earum [[wikt:en:princeps#Noun_3|principes]] [[wikt:en:donum#Latin|donis]] [[wikt:en:pollicitatio#Latin|pollicitationibus]]<nowiki>que</nowiki> だが、<br> α系写本では eas donis pollicitationibus となっている。)</span>
:
*<!--❷--><sup>(2)</sup> Huic rei [[wikt:en:idoneus#Latin|idoneos]] homines [[wikt:en:deligebat#Latin|deligebat]],
**この事<small>〔同盟に誘うこと〕</small>に適切な人物たちを<small>(ウェルキンゲトリークスが)</small>選び出して、
*quorum [[wikt:en:quisque#Latin|quisque]] aut [[wikt:en:oratio#Latin|oratione]] [[wikt:en:subdolus#Latin|subdola]] aut [[wikt:en:amicitia#Latin|amicitia]]
**その者たちのおのおのは、巧妙な演説により、あるいは友情により、
*[[wikt:en:facillime#Latin|facillime]] <u>capere</u> posset.
**かなり容易に<small>(同盟者を)</small>得ることができた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、χ系写本・写本Lでは [[wikt:en:capere#Latin|capere]] だが、<br> β系写本では [[wikt:en:capi#Latin|capi]] となっている。)</span>
:
; アウァーリクムからの逃亡者たちに、武具と衣服を支給する
*<!--❸--><sup>(3)</sup> <span style="color:#009900;">[eos]</span> qui [[wikt:en:Avaricum#Latin|Avarico]] [[wikt:en:expugnatus#Latin|expugnato]] [[wikt:en:refugerant#Latin|refugerant]],
**<small>(ウェルキンゲトリークスは)</small>アウァーリクムが攻略されたので逃げて来ていた者たちに、
*[[wikt:en:armandus#Latin|armandos]] [[wikt:en:vestiendus#Latin|vestiendos]]<nowiki>que</nowiki> [[wikt:en:curat#Latin|curat]];
**武装させられ、服を着せられるように、手配する。
:
; 同盟部族に徴集する兵員の数と集まる期日を指示する
*<!--❹--><sup>(4)</sup> [[wikt:en:simul#Latin|simul]], ut [[wikt:en:deminutus#Latin|deminutae]] [[wikt:en:copiae#Latin|copiae]] [[wikt:en:redintegrarentur#Latin|redintegrarentur]],
**同時に、減り衰えた軍勢が補充されるように、
*[[wikt:en:imperat#Latin|imperat]] [[wikt:en:certus#Latin|certum]] <u>numerum</u> militum civitatibus, <u>quem</u> et <u>quam ante diem</u> in castra [[wikt:en:adduci#Latin|adduci]] [[wikt:en:velit#Latin|velit]],
**諸部族に、兵の一定の<u>数</u>を<u>どれほど</u>、かつ、<u>いつの日の前までに</u>陣営に連れて来ることを欲しているかを指図し、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:qui#Determiner|quem]] [[wikt:en:numerus#Latin|numerum]] 「どれほどの数を」。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:qui#Determiner|quam]] ante [[wikt:en:dies#Latin|diem]] 「いつの日の前までに」。)</span>
*[[wikt:en:sagittarius#Noun|sagittarios]]<u>que</u> omnes, quorum erat [[wikt:en:permagnus#Latin|permagnus]] <u>numerus in Gallia</u>, [[wikt:en:conquiri#Latin|conquiri]] et ad se [[wikt:en:mitti#Latin|mitti]] [[wikt:en:iubet#Latin|iubet]].
**ガッリアにかなり大勢がいた弓兵のすべてを、徴募して自分<small>〔ウェルキンゲトリークス〕</small>のもとへ派遣することを命じる。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本の語順は numerus in Gallia で、<br> β系写本の語順は in Gallia numerus となっている。)</span>
*His rebus celeriter id, quod [[wikt:en:Avaricum#Latin|Avarici]] [[wikt:en:deperierat#Latin|deperierat]], [[wikt:en:expletur#Latin|expletur]].
**これらの事により、速やかに、アウァーリクムで壊滅していたそれら<small>(の軍勢)</small>が補充される。
:
; ニティオブロゲース族の王テウトマトゥスが、騎兵隊らとともにウェルキンゲトリークスに合流する
*<!--❺--><sup>(5)</sup> [[wikt:en:interim#Latin|Interim]] [[wikt:en:Teutomatus#Latin|Teutomatus]], [[wikt:en:Ollovico#Latin|Olloviconis]] filius, rex <u>Nitiobrogum</u>,
**その間に、オッロウィコーの息子で、ニティオブロゲース族の王であるテウトマトゥスが、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、主要写本ω では Nitiobrogum だが、<br> 写本Uの一部では [[wikt:en:Nitiobriges#Latin|Nitiobrigum]] となっている。)</span>
*cuius pater ab [[wikt:en:senatus#Latin|senatu]] nostro amicus erat [[wikt:en:appellatus#Latin|appellatus]],
**その父<small>〔オッロウィコー〕</small>は、我が方<small>〔ローマ人〕</small>の[[w:元老院 (ローマ)|元老院]]から友人と呼ばれていたのだが、
*cum magno [[wikt:en:eques#Latin|equitum]] suorum numero et quos ex [[wikt:en:Aquitania#Latin|Aquitania]] [[wikt:en:conduxerat#Latin|conduxerat]] ad eum [[wikt:en:pervenit#Etymology_2|pervenit]].
**自らの騎兵の多数およびアクィーターニアから募っていた者たちとともに、彼<small>〔ウェルキンゲトリークス〕</small>のもとへ到着した。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
==ゲルゴウィア攻略戦、ハエドゥイー族の離反==
===32節===
*<span style="background-color:#ffd;">[[/注解/32節]] {{進捗|00%|2026-09-23}}</span>
;ハエドゥイー族内紛の危機
:
*<!--❶--><sup>(1)</sup> Caesar [[wikt:en:Avarici#Latin|Avarici]] complures dies [[wikt:en:commoratus#Latin|commoratus]]
**カエサルは、アウァーリクムに幾日も留まって、
*[[wikt:en:summus#Latin|summam]]<nowiki>que</nowiki> ibi [[wikt:en:copia#Latin|copiam]] [[wikt:en:frumentum#Latin|frumenti]] et reliqui [[wikt:en:commeatus#Latin:_noun|commeatus]] [[wikt:en:nactus#Latin|nactus]]
**そこでかなり多量の糧食やほかの必需品を手に入れて、
*[[wikt:en:exercitus#Latin:_noun|exercitum]] ex [[wikt:en:labor#Latin:_work|labore]] atque [[wikt:en:inopia#Latin:_noun|inopia]] <u>reficit</u>.
**軍隊を労苦や欠乏から回復させた。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、χ系・β系写本では [[wikt:en:reficit#Latin|reficit]]<sub> (現在形)</sub> だが、<br> φ系写本では [[wikt:en:refecit#Latin|refecit]]<sub> (完了形)</sub> となっている。)</span>
:
*<!--❷--><sup>(2)</sup> Iam [[wikt:en:prope#Adverb|prope]] [[wikt:en:hiems#Latin|hieme]] [[wikt:en:confectus#Latin|confecta]],
**すでに、ほぼ冬は過ぎ去り、
*cum ipso anni tempore ad [[wikt:en:gerendus#Latin|gerendum]] bellum [[wikt:en:vocaretur#Latin|vocaretur]] et ad hostem [[wikt:en:proficisci#Latin|proficisci]] [[wikt:en:constituisset#Latin|constituisset]],
**<small>(カエサルが)</small>まさにその時季に戦争を遂行するために呼び寄せられて、敵の方へ発つことを決意していたときに、
*<u>sive</u> eum ex [[wikt:en:palus#Latin|paludibus]] [[wikt:en:silva#Latin|silvis]]<nowiki>que</nowiki> [[wikt:en:elicio#Latin|elicere]] <u>sive</u> [[wikt:en:obsidio#Latin|obsidione]] [[wikt:en:premo#Latin|premere]] [[wikt:en:posset#Latin|posset]],
**<u>あるいは</u><small>(敵を)</small>沼地や森林から誘い出せるか、<u>あるいは</u>包囲により圧倒することができるか、というときに、
**:<span style="color:#009900;">(訳注:sive ~ sive …「あるいは~、あるいは…」)</span>
*[[wikt:en:legatus#Latin:_noun|legati]] ad eum [[wikt:en:princeps#Latin:_noun|principes]] [[wikt:en:Haedui#Latin|Haeduorum]] [[wikt:en:veniunt#Latin|veniunt]]
**[[w:ハエドゥイ族|ハエドゥイー族]]の領袖たちが使節として彼<small>〔カエサル〕</small>のもとへやって来る。
*[[wikt:en:oratum#Latin:_supine|oratum]], ut maxime [[wikt:en:necessarius#Latin:_unavoidable|necessario]] tempore [[wikt:en:civitas#Latin|civitati]] [[wikt:en:subveniat#Latin|subveniat]]<!--;-->:
**きわめて緊急の時に、部族を助けてくれるように、と頼むために。
:
; ハエドゥイー族の救援要請(以下、間接話法)
*<!--❸--><sup>(3)</sup> [[wikt:en:summus#Latin|summo]] esse in [[wikt:en:periculum#Latin|periculo]] rem,
**事態は最大の危機にある。
*quod, cum [[wikt:en:singulus#Latin|singuli]] [[wikt:en:magistratus#Latin|magistratus]] [[wikt:en:antiquitus#Latin|antiquitus]] [[wikt:en:creari#Latin|creari]] atque [[wikt:en:regius#Latin|regiam]] [[wikt:en:potestas#Latin|potestatem]] <u>annum</u> [[wikt:en:obtineo#Latin|obtinere]] [[wikt:en:consuessent#Latin|consuessent]],
**──というのは、昔から一人ずつの統領が選出されて、一年ごとに支配権力に就くことが常であったのに、
**:<span style="color:#009900;">(訳注:[[ガリア戦記 第1巻#16節|第1巻16節]]によれば、ウェルゴブレトゥス [[w:la:Vergobretus|Vergobretus]]という最高官職が毎年選ばれて大権を司る。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:annum#Latin|annum]] だが、<br> β系写本では [[wikt:en:annuam#Adjective|annuam]] となっている。)</span>
*duo [[wikt:en:magistratus#Latin|magistratum]] [[wikt:en:gerant#Latin|gerant]]
**2名が統領を司り、
*et se [[wikt:en:uterque#Latin|uterque]] eorum legibus <u>creatum esse</u> [[wikt:en:dicat#Latin:_speak|dicat]].
**彼らの双方ともに自分は法により<small>〔合法的に〕</small>選出されたのであると言っているのだから──。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、α系写本では [[wikt:en:creatus#Latin|creatum]] esse だが、<br> β系写本では esse は省かれている。)</span>
: <!-- [[wikt:en:| -->
{{wikipedia|en:Convictolitavis}}
*<!--❹--><sup>(4)</sup> Horum esse alterum [[wikt:en:Convictolitavis#Latin|Convictolitavem]], [[wikt:en:florens#Latin|florentem]] et [[wikt:en:inlustris#Latin|inlustrem]] [[wikt:en:adulescens#Noun|adulescentem]]<!--,-->;
**彼らの一方は、コンウィクトリタウィスで、声望があり、秀でた青年である。
*alterum [[wikt:en:Cotus#Latin|Cotum]], [[wikt:en:antiquissimus#Latin|antiquissima]] familia [[wikt:en:natus#Latin:_born|natum]]
**他方は、コトゥスで、とても古くからの家系に生まれて、
*atque ipsum hominem summae [[wikt:en:potentia#Latin|potentiae]] et magnae [[wikt:en:cognatio#Latin|cognationis]],
**自身も最大勢力と多くの縁戚関係をもつ人物であり、
*cuius frater Valetiacus proximo anno eundem [[wikt:en:magistratus#Latin|magistratum]] [[wikt:en:gesserit#Latin|gesserit]].
**その兄弟ウァレティアクスは前年に同じ統領を司っていたのである。
: <!-- [[wikt:en:| -->
*<!--❺--><sup>(5)</sup> Civitatem esse omnem in [[wikt:en:arma#Latin|armis]];
**部族は皆が武装している。
*[[wikt:en:divisus#Latin|divisum]] [[wikt:en:senatus#Latin|senatum]], divisum [[wikt:en:populus#Latin:_people|populum]], <u>suas</u> [[wikt:en:cuiusque#Latin|cuiusque]] eorum [[wikt:en:clientela#Latin|clientelas]].
**評議会も分裂し、民衆も分裂し、彼ら<small>〔2名〕</small>の<small>(それぞれの)</small>庇護民となっている。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の suas は主要写本ωの記述だが、より劣った写本では in suas となっている。)</span>
*[[wikt:en:quodsi#Latin|Quodsi]] [[wikt:en:diutius#Latin|diutius]] [[wikt:en:alatur#Latin|alatur]] [[wikt:en:controversia#Latin|controversia]],
**もしこれ以上、紛争が進められれば、
*fore uti pars cum parte civitatis [[wikt:en:confligat#Latin|confligat]].
**部族の派閥と派閥が激突することになるであろう。
*Id ne [[wikt:en:accidat#Etymology_1|accidat]], [[wikt:en:positus#Latin|positum]] in eius [[wikt:en:diligentia#Latin|diligentia]] atque [[wikt:en:auctoritas#Latin|auctoritate]].
**それが起こらないかは、彼(カエサル)の入念さと影響力にかかっている。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===33節===
*<span style="background-color:#ffd;">[[/注解/33節]] {{進捗|00%|2026-10-04}}</span>
;カエサルがハエドゥイー族の権力をコンウィクトリタウィスに与える
:
; カエサルが、ハエドゥイー族の内紛を危惧する
*<!--❶--><sup>(1)</sup> Caesar, <u>etsi</u> a bello atque hoste [[wikt:en:discedo#Latin|discedere]] [[wikt:en:detrimentosus#Latin|detrimentosum]] esse [[wikt:en:existimabat#Latin|existimabat]],
**カエサルは、戦争や敵から離れることは損害をもたらすものである、と考えていたのではあるが、
*<u>tamen</u> non [[wikt:en:ignorans#Latin|ignorans]], [[wikt:en:quantus#Latin|quanta]] ex [[wikt:en:dissensionibus#Latin|dissensionibus]] [[wikt:en:incommodum#Noun|incommoda]] [[wikt:en:oriri#Latin|oriri]] [[wikt:en:consuessent#Latin|consuessent]],
**しかしながら、[[wikt:ja:内訌|内訌]]からどれほどの災厄が生じることが常であるか、知らないではなかったし、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:etsi#Latin|etsi]] ~, [[wikt:en:tamen#Latin|tamen]] …「~ではあるが、しかしながら…」)</span>
*ne [[wikt:en:tantus#Latin|tanta]] et [[wikt:en:tam#Latin|tam]] [[wikt:en:coniunctus#Latin:_participle|coniuncta]] [[wikt:en:populus#Latin|populo]] [[wikt:en:Romanus#Adjective|Romano]] [[wikt:en:civitas#Latin|civitas]],
**──これほど大きく、これほどローマ人民と協同している<small>(ハエドゥイーの)</small>{{ruby|部族国家|キーウィタース}}が、
*quam ipse semper [[wikt:en:aluisset#Latin|aluisset]] [[wikt:en:omnis#Latin|omnibus]]<nowiki>que</nowiki> rebus [[wikt:en:ornasset#Latin|ornasset]],
**彼らのことを<small>(カエサル)</small>自身は常に助成して、かつあらゆる事柄で敬意を表していたのだが、
*ad [[wikt:en:vis#Latin|vim]] atque [[wikt:en:arma#Latin|arma]] [[wikt:en:descenderet#Latin|descenderet]],
**<small>(彼らが内紛という)</small>暴力や戦乱に沈み込まないように、
*atque ea pars, quae [[wikt:en:minus#Latin:_adverb|minus]] sibi [[wikt:en:confideret#Latin|confideret]], [[wikt:en:auxilia#Latin|auxilia]] a [[wikt:en:Vercingetorix#Latin|Vercingetorige]] [[wikt:en:arcesseret#Latin|arcesseret]],
**かつ、自分たちにとって劣勢だと確信している一派が[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の支援を呼び寄せないように──
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:ne ~ civitas, ~ descenderet, ~ arcesseret「~部族が、~沈まないように、~招かないように」)</span>
*huic rei [[wikt:en:praevertendus#Latin|praevertendum]] [[wikt:en:existimavit#Latin|existimavit]],
**この事柄は<small>(戦争遂行よりも)</small>優先されるべき、と考えた。
:
; ハエドゥイー族の内紛を沙汰すべく、カエサル自らが赴く
*<!--❷--><sup>(2)</sup> et, quod [[wikt:en:lex#Latin|legibus]] [[wikt:en:Haedui#Latin|Haeduorum]] iis, qui summum [[wikt:en:magistratus#Latin|magistratum]] [[wikt:en:obtinerent#Latin|obtinerent]], [[wikt:en:excedo#Latin|excedere]] ex finibus non [[wikt:en:liceret#Latin|liceret]],
**──というのは、[[w:ハエドゥイ族|ハエドゥイー族]]の法により、最高官職に就いている者は領土から出ることを許されないので──
*ne [[wikt:en:aliquid#Latin:_pronoun|quid]] de [[wikt:en:ius#Latin:_justice|iure]] aut de [[wikt:en:lex#Latin|legibus]] eorum [[wikt:en:deminuisse#Latin|deminuisse]] [[wikt:en:videretur#Latin|videretur]],
**<small>(カエサルが)</small>彼らの法令あるいは法制について何ら軽視したとは思われないように、
[[画像:FR-58-Decize29.JPG|thumb|right|250px|デケティア([[w:la:Decetia|Decetia]])すなわち現在のドスィーズ([[w:fr:Decize|Decize]])の景観。[[w:ハエドゥイ族|ハエドゥイー族]]の版図であった[[w:ニエーヴル県|ニエーヴル県]]の南部にあり、リゲル川(現[[w:ロワール川|ロワール川]])のほとりに位置している。]]
*ipse in [[wikt:en:Haedui#Latin|Haeduos]] [[wikt:en:proficisci#Latin|proficisci]] [[wikt:en:statuit#Latin|statuit]]
**<small>(カエサル)</small>自身がハエドゥイー族のもとに出発することを決心した。
*[[wikt:en:senatus#Latin|senatum]]<nowiki>que</nowiki> omnem et <u>quos inter [[wikt:en:controversia#Latin|controversia]] [[wikt:en:esset#Latin:_be|esset]]</u>
**かつ、<u>評議会</u>の全員、および紛争が介在しているところの者たちを
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:部族国家の合議制統治機関を、カエサルの『ガリア戦記』では<br> ローマの元老院になぞらえて [[wikt:en:senatus#Latin|senatus]] と呼んでいるが、<br> 区別して「評議会」と訳す。)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:quos inter ~ は、関係節の関係代名詞 quos が<br> 前置詞 inter の前に出ている語順。)</span>
*ad se [[wikt:en:Decetia#Latin|Decetiam]] [[wikt:en:evocavit#Latin|evocavit]].
**デケティアの自分<small>〔カエサル〕</small>のもとへ呼び出した。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:デケティア [[w:la:Decetia|Decetia]] は、現在の[[w:en:Decize|Decize]] ドシーズ(ドゥスィズ<ref>Decize の発音は [[wikt:fr:Decize|Decize]] を参照せよ。</ref>)であると考えられている。)</span>
:
*<!--❸--><sup>(3)</sup> Cum prope omnis civitas eo [[wikt:en:convenisset#Latin|convenisset]], [[wikt:en:doceretur#Latin|doceretur]]<nowiki>que</nowiki>
**部族のほぼすべての<small>(主だった)</small>者たちがそこに集まっていたときに、<small>(以下のことが)</small>報知された。
*[[wikt:en:paucus#Latin|paucis]] [[wikt:en:clam#Latin|clam]] [[wikt:en:convocatus#Latin|convocatis]] [[wikt:en:alius#Latin|alio]] loco, [[wikt:en:alius#Latin|alio]] tempore atque [[wikt:en:oportuerit#Latin|oportuerit]],
**わずかな者たちが密かに、あるべきはずとは別の場所、別の時に呼び集められて、
*[[wikt:en:fratrem#Latin|fratrem]] a [[wikt:en:fratre#Latin|fratre]] [[wikt:en:renuntiatus#Latin|renuntiatum]] <span style="color:#009900;">[esse]</span>,
**兄により弟<small>(の就位)</small>が告げられたというのだ。
**:<span style="color:#009900;">(訳注:前年に統領であった兄ウァレティアクスによって<br> 弟コトゥスの統領への就位が告げられたということであろう。)</span>
*<span style="font-size:11pt;">cum leges <u>duo</u> ex una familia [[wikt:en:vivus#Latin|vivo]] [[wikt:en:utroque#Latin|utroque]] <u>non solum</u> [[wikt:en:magistratus#Latin|magistratus]] [[wikt:en:creari#Latin|creari]] [[wikt:en:vetarent#Latin|vetarent]], <u>sed etiam</u> in [[wikt:en:senatus#Latin|senatu]] esse [[wikt:en:prohiberent#Latin|prohiberent]],</span>
**<span style="font-size:11pt;">──法が、一家族の2名が双方とも存命中に、統領に選出されるのを禁じるだけでなく、<u>評議会</u>にいることも禁じているのに──</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:non [[wikt:en:solum#Latin:_adverb|solum]] ~ [[wikt:en:sed#Latin|sed]] [[wikt:en:etiam#Latin|etiam]] …「~のみならず、…もまた」)</span>
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部は、χ・β系写本や写本B・M・Sでは [[wikt:en:duo#Latin|duo]] だが、<br> 写本L・Nでは [[wikt:en:duos#Latin|duos]] となっている。)</span>
*[[wikt:en:Cotus#Latin|Cotum]] [[wikt:en:imperium#Latin|imperium]] [[wikt:en:depono#Latin|deponere]] [[wikt:en:coegit#Latin|coegit]]<!--,-->;
**(カエサルは)コトゥスに支配権を放棄することを強要した。
: <!-- [[wikt:en:| -->
*<!--❹--><sup>(4)</sup> [[wikt:en:Convictolitavis#Latin|Convictolitavem]], qui per [[wikt:en:sacerdos#Latin|sacerdotes]] [[wikt:en:mos#Latin|more]] [[wikt:en:civitas#Latin|civitatis]] [[wikt:en:intermissus#Latin|intermissis]] [[wikt:en:magistratus#Latin|magistratibus]] [[wikt:en:esset#Latin:_be|esset]] [[wikt:en:creatus#Latin|creatus]],
**コンウィクトリタウィスは、統領が空位になったときに、部族の規則により、<u>祭司</u>を通じて選出されたので、
**:<span style="color:#009900;">(訳注:ここでいう祭司 sacerdos が[[ガリア戦記 第6巻#13節|第6巻13節]]以下で説明された[[w:ドルイド|ドルイド]]と同じか否かは不詳である。)</span>
*[[wikt:en:potestas#Latin|potestatem]] [[wikt:en:obtineo#Latin|obtinere]] [[wikt:en:iussit#Latin|iussit]].
**<small>(カエサルは彼に)</small>権力の座に就くことを命じた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===34節===
*<span style="background-color:#ffd;">[[/注解/34節]] {{進捗|00%|2026-10-18}}</span>
;ハエドゥイー族を動員し、ローマ軍をカエサルとラビエーヌスの二隊に分散
:
*<!--❶--><sup>(1)</sup> Hoc [[wikt:en:decretum#Latin|decreto]] [[wikt:en:interpositus#Latin|interposito]],
**この裁定を裁決すると、
*[[wikt:en:cohortatus#Latin|cohortatus]] [[wikt:en:Haedui#Latin|Haeduos]],
**<small>(カエサルは)</small>[[w:ハエドゥイ族|ハエドゥイー族]]を<small>(以下のように)</small>激励して、
*ut [[wikt:en:controversia#Latin|controversiarum]] ac [[wikt:en:dissensio#Latin|dissensionis]] [[wikt:en:obliviscerentur#Latin|obliviscerentur]]
**<span style="color:#009900;font-size:20pt;">【</span><small>(部族内部の)</small>論争や不和を忘れるように、
*atque, omnibus [[wikt:en:omissus#Latin|omissis]] his rebus
**かつ、これらすべての事情を度外視して、
*huic bello [[wikt:en:servirent#Latin|servirent]],
**<small>(ウェルキンゲトリークスとの)</small>この戦争に尽くすように、
*<u>[[wikt:en:ea#Latin:_things|ea]]<nowiki>que</nowiki>, quae</u> [[wikt:en:meruissent#Latin|meruissent]], [[wikt:en:praemium#Latin|praemia]] ab se [[wikt:en:devictus#Latin|devicta]] Gallia [[wikt:en:exspectarent#Latin|exspectarent]],
**ガッリアが征服されたときには<small>(彼らが)</small>得るに値する自分<small>〔カエサル〕</small>からの恩賞を期待するように、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:下線部の [[wikt:en:ea#Latin:_things|ea]]<nowiki>que</nowiki> quae は、最初の印刷本 [[ガリア戦記/注解編/写本と校訂版#Editio_princeps|ed. pr.]] による修正で、<br> α系・ρ系写本では [[wikt:en:ea#Latin:_things|ea]] quae <br> π系写本では atque quae となっている。)</span>
*[[wikt:en:equitatus#Latin:_cavalry|equitatum]]<nowiki>que</nowiki> omnem et [[wikt:en:pedes#Latin|peditum]] [[wikt:en:mille#Latin|milia]] X([[wikt:en:decem#Latin|decem]]) sibi celeriter [[wikt:en:mitterent#Latin|mitterent]],
**<small>(ハエドゥイー族の)</small>騎兵隊のすべてと歩兵1万名を自分<small>〔カエサル〕</small>に速やかに派遣するように、
*quae in [[wikt:en:praesidium#Latin|praesidiis]] rei [[wikt:en:frumentarius#Latin|frumentariae]] causa [[wikt:en:disponeret#Latin|disponeret]],
**それらは糧食供給のために守備隊として分けて置くものである、と<span style="color:#009900;font-size:20pt;">】</span>
*exercitum in duas partes [[wikt:en:divisit#Latin|divisit]]:
**<small>(カエサルは)</small>軍隊を二つの方面軍に分けた。
: <!-- [[wikt:en:| -->
*<!--❷--><sup>(2)</sup> [[wikt:en:quattuor#Latin|quattuor]] [[wikt:en:legio#Latin|legiones]] in [[wikt:en:Senones#Latin|Senones]] [[wikt:en:Parisii#Latin|Parisios]]<nowiki>que</nowiki> [[wikt:en:Labienus#Latin|Labieno]] [[wikt:en:ducendus#Latin|ducendas]] [[wikt:en:dedit#Latin|dedit]],
**4個[[w:ローマ軍団|軍団]]をセノネース族やパリスィイー族のところに率いて行くべく[[w:ティトゥス・ラビエヌス|ラビエーヌス]]に委ねた。
**:<span style="color:#009900;">(訳注:ラビエーヌス [[w:la:Titus Labienus|Labienus]] のこの遠征については<br> [[#57節|57節]]~62節で述べられる。)</span>
*[[wikt:en:sex#Latin|sex]] ipse in [[wikt:en:Arverni#Latin|Arvernos]] ad oppidum [[wikt:en:Gergovia#Latin|Gergoviam]]
**6個<small>(軍団)</small>を自身<small>〔カエサル〕</small>がアルウェルニー族のところの城塞都市ゲルゴウィアへ
[[画像:Brioude pont.JPEG|thumb|right|250px|エラウェル川([[w:la:Elaver|Elaver]])こと現在の[[w:アリエ川|アリエ川]](Allier)。ハエドゥイー族領の境辺りでリゲル川([[w:la:Liger|Liger]])こと現[[w:ロワール川|ロワール川]]([[w:fr:Loire (fleuve)|Loire]])に合流する。]]
*[[wikt:en:secundum#Preposition_2|secundum]] flumen [[wikt:en:Elaver#Latin|Elaver]] [[wikt:en:duxit#Latin|duxit]];
**エラウェル川に沿って率いて行った。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:エラウェル川 [[w:la:Elaver|Elaver]] は現在の[[w:アリエ川|アリエ川]] Allier である。)</span>
*equitatus partem illi [[wikt:en:adtribuit#Latin|adtribuit]],
**騎兵隊の一部を彼<small>〔ラビエーヌス〕</small>に割り当てて、
*partem sibi [[wikt:en:reliquit#Latin|reliquit]].
**<small>(別の)</small>一部を自分<small>〔カエサル〕</small>に残した。
: <!-- [[wikt:en:| -->
*<!--❸--><sup>(3)</sup> Qua re cognita
**その事を知ると、
*[[wikt:en:Vercingetorix#Latin|Vercingetorix]]
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は
*omnibus interruptis eius fluminis pontibus
**その川のすべての橋を破却しながら、
*ab altera fluminis parte iter facere coepit.
**川の別の側を行軍し始めた。
<!--
<span style="color:#009900;"></span>
<small></small>
**:<span style="color:#009900;">(訳注:
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:
-->
===35節===
'''カエサルが陽動によってエラウェル川に架橋、渡河する'''
*① Cum uterque utrimque exisset exercitus<ref>utrimque exisset exercitus はα系写本の記述で、β系写本では utrique esset exercitui となっている。</ref>, in conspectu, fereque e regione castris castra ponebant<ref>ponebant はα系写本の記述で、β系写本では poneret となっている。</ref>,
**(ガッリア勢とローマ勢の)軍隊の双方が互いに視界にあって、ほぼ真向かいに互いの陣営を設置したときに、
*dispositis exploratoribus, necubi effecto ponte Romani copias traducerent,
**(ウェルキンゲトリークスは)ローマ人の軍勢がどこにも橋を造って渡河しないように、偵察者たちを分けて置き、
*erat in magnis Caesaris<ref>Caesaris はα系写本などの記述で、π系写本などでは Caesari となっている。</ref> difficultatibus res,
**カエサルにとって事態は大きな困難になっていた。
*ne maiorem aestatis partem flumine impediretur,
**夏の大部分(の対岸の敵との交戦)が川により妨げられるのではないか、
*quod non fere ante autumnum [[w:la:Elaver|Elaver]] vado transiri solet.
**というのは、[[w:アリエ川|エラウェル川]]は秋の前はほとんど浅瀬を渡らない習わしであったからだ。
*② Itaque, ne id accideret, silvestri loco castris positis
**こうして、それが生じないように、森林地帯に陣営を設置した。
*e regione unius eorum pontium, quos [[w:la:Vercingetorix|Vercingetorix]] rescindendos curaverat,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]が切り裂かれるように手配していたところの橋の一つの真向かいに。
*postero die cum duabus legionibus in occulto restitit;
**翌日に、2個[[w:ローマ軍団|軍団]]とともに密かなところに留まった。
*③ reliquas copias cum omnibus impedimentis, ut consueverat, misit,
**残りの軍勢(=4個軍団)をすべての輜重とともに、通常のように、出発させた。
*captis<ref>写本(ω)では captis となっているが、Herald Fuchs の校訂版(1932年)では sic collocatis という記述が提案されている。etc.</ref> quibusdam cohortibus, uti numerus legionum constare videretur.
**軍団の数を保っていると(敵から)見られるように、いくつかの<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>を含ませていた。
*④ His quam longissime possent egredi<ref>egredi はα系写本の記述で、β系写本では progredi となっている。</ref> iussis,
**彼ら(4個軍団)には、できる限り遠くまで前進することを命じた。
*cum iam ex diei tempore coniecturam ceperat<ref>ceperat はα系写本の記述で、β系写本では caperet となっている。</ref> in castra perventum,
**すでに、日の時刻から(彼らが)宿営地に到達したと(カエサルが)推測をしたときに、
*isdem sublicis, quarum pars inferior integra remanebat, pontem reficere coepit.
**(前述の)同じ橋杭は、そのより下方の部分が損なわれないで残っていたので、橋を修復し始めた。
*⑤ Celeriter effecto opere
**速やかに工事が成し遂げられて、
*legionibusque traductis et loco castris idoneo delecto
**(2個)軍団が渡河させられて、陣営に適切な地点を選んで、
*reliquas copias revocavit.
**残りの軍勢(=4個軍団)を呼び戻した。
*⑥ Vercingetorix re cognita,
**ウェルキンゲトリークスは事態を知って、
*ne contra suam voluntatem dimicare cogeretur,
**自らの意向に反して(ローマ勢と)争闘することを強いられないように、
*magnis itineribus antecessit.
**強行軍で(ゲルゴウィアに向けて)先行した。
===36節===
[[画像:FR-63-Gergovie.JPG|thumb|right|300px|[[w:ゲルゴウィア|ゲルゴウィア]]([[w:la:Gergovia|Gergovia]])すなわち現在のジェルゴヴィ高地([[w:fr:Plateau de Gergovie|Plateau de Gergovie]])の[[w:ピュイ=ド=ドーム県|ピュイ=ド=ドーム県]]県道978号(D978)からの眺望。19世紀の[[w:ウジェーヌ・ストッフェル|ウジェーヌ・ストッフェル]]大佐(colonel Eugène Stoffel)の発掘調査によって、城砦やローマ軍の溝の遺構などが発見され、当地がゲルゴウィアの古戦場だと確認された。]]
[[画像:Siège_GergovieI_-52.png|thumb|right|300px|ゲルゴウィアにおける両軍の布陣図。山の頂にある城塞都市に隣接してガッリア諸部族の陣営(黄色部分)、右方にローマ軍の大きな陣営(赤色部分)と左下にローマ軍の小さな陣営(赤色部分)が見える。推定される位置関係は19世紀の[[w:ウジェーヌ・ストッフェル|ストッフェル]]大佐の発掘調査に依拠しており、小陣営があった地点は現在のラ・ロシュ=ブランシュ([[w:fr:La Roche-Blanche (Puy-de-Dôme)|La Roche-Blanche]])だと考えられている。]]
'''両軍がゲルゴウィアの要衝に陣営を築く'''
*① Caesar ex eo loco quintis castris [[w:la:Gergovia|Gergoviam]] pervenit
**カエサルは(渡河した)その地点から5回目の宿営で[[w:ゲルゴウィア|ゲルゴウィア]]に到着した。
*equestrique eo die proelio levi facto,
**(到着した)その日に(ガッリア勢と)軽微な[[w:騎兵|騎兵]]戦を闘って、
*perspecto urbis situ, quae posita in altissimo monte omnes aditus difficiles habebat,
**山の非常に高いところに位置し、すべての接近路を困難なものとしている(ゲルゴウィアの)町の地勢を認識して、
*de expugnatione<ref>expugnatione はα系写本の記述で、β系写本では oppugnatione となっている。</ref> desperavit,
**(拙速に突撃するような)攻略については断念して、
*de obsessione non prius agendum constituit, quam rem frumentariam expedisset.
**糧食調達の整備をするより前には、攻囲について行なうべきでないと決心した。
*② At [[w:la:Vercingetorix|Vercingetorix]], castris prope oppidum in monte<ref>in monte はβ系写本の記述で、α系写本にはない。</ref> positis,
**それに対して、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、山中の城塞都市の近くに陣営を設置して、
*mediocribus circum se intervallis separatim singularum civitatium<ref>civitatium はB・M・L・N写本の記述で、χ・S・β系写本では civitatum となっている。</ref> copias conlocaverat
**自陣の周りに、適切な間隔で個々の部族の軍勢を別々に駐屯させて、
*atque omnibus eius iugi collibus occupatis, qua despici poterat,
**その尾根のうち(山麓を)見下ろすことができたすべての丘陵を占有して、
*horribilem speciem praebebat;
**恐ろしげな姿を現わした。
*③ principesque earum civitatium<ref>civitatium はA・Q・B・M・L・N写本の記述で、Q・S・β系写本では civitatum となっている。</ref>, quos sibi ad consilium capiendum delegerat,
**(ウェルキンゲトリークス)自らが作戦を立てるために選び出していた諸部族の領袖たちに
*prima luce cotidie ad se convenire iubebat,
**毎日、夜明けに自分のところへ集まることを命じた。
*seu quid communicandum, seu quid administrandum videretur,
**何らかのことを伝達・協議するのか、あるいは何らかのことを指導するのだと思われる。
**:<span style="color:#009900;">(訳注:seu ~ seu …「あるいは~、あるいは…」)</span>
*④ neque ullum fere diem intermittebat, quin equestri proelio interiectis sagittariis,
**騎兵戦に弓兵を介在させることを、ほとんどどの日も中断せずに、
*quid in quoque esset animi ac virtutis suorum, perspiceretur<ref>perspiceretur はα系写本の記述で、T写本では perspiceret、β系写本では periclitaretur となっている。</ref>.
**どのような心構えや武勇が、配下の者たちのおのおのにあるかを、吟味した。
*⑤ Erat e regione oppidi collis sub ipsis radicibus montis
**山のその麓の下方に、城塞都市の真向かいに、丘陵があって、
*egregie munitus atque ex omni parte circumcisus;
**あらゆる方面から周囲が険しくて、(その地形により)すばらしく護られていた。
*quem si tenerent nostri, et aquae magna parte et pabulatione libera prohibituri hostes videbantur.
**もし、それを我が方(ローマ勢)が占めれば、水源の大半と自由な糧秣徴発から敵たちを妨げるであろうと思われた。
*⑥ Sed is locus praesidio ab his, non nimis firmo, tenebatur.
**だが、その地点は、彼ら(ガッリア勢)により、大して強力ではない守備隊で占められていた。
*⑦ Tamen silentio noctis Caesar ex castris egressus,
**にもかかわらず(昼間ではなく)夜の静けさのうちに、カエサルは陣営から出撃して、
*priusquam subsidio ex oppido veniri posset,
**城塞都市(のそばの陣営)から援兵に来られるより前に、
*deiecto praesidio potitus loco duas ibi legiones conlocavit
**守備隊を追い出して、地点を占拠して、そこに2個[[w:ローマ軍団|軍団]]を駐屯させた。
*fossamque duplicem duodenum pedum a maioribus castris ad minora perduxit,
**12[[w:ペース (長さ)|ペース]](=約3.6mの幅)の二重の堀を、より大きな陣営から(この丘陵の)より小さな陣営へ至らしめた。
*ut tuto ab repentino hostium incursu singuli commeare possent.
**敵たちの不意の襲撃から安全に、1人1人が往来することができるように。
===37節===
'''ハエドゥイー族のコンウィクトリタウィスがガッリア同盟軍に内応する'''
*① Dum haec ad [[w:la:Gergovia|Gergoviam]] geruntur,
**これらがゲルゴウィアのところでなされている間に、
*Convictolitavis [[w:la:Haedui|Haeduus]],
**[[w:ハエドゥイ族|ハエドゥイー族]]のコンウィクトリタウィスは、
*cui magistratum adiudicatum a Caesare demonstravimus,
**その者はカエサルによって統領として承認されたと([[#33節|33節]]で)既述したが、
*sollicitatus ab Arvernis pecunia cum quibusdam adulescentibus conloquitur,
**[[w:アルウェルニ族|アルウェルニー族]]により金銭でそそのかされて、ある若者たちと談判した。
*quorum erat princeps Litaviccus atque eius fratres,
**その者たちの領袖は[[w:リタウィックス|リタウィックス]]とその兄弟たちであり、
*amplissima familia nati adulescentes.
**とても強大な一族に生まれた若者たちだった。
*② Cum his praemium communicat
**彼らとともに(アルウェルニー族からの)報酬を共有して、
*hortaturque, ut se liberos et imperio natos meminerint.
**自分たちが自由民で支配層の生まれであるのを思い起こせ、と鼓舞した。
*③ Unam esse Haeduorum civitatem, quae certissimam Galliae victoriam distineat<ref>distineat はM・N・π・R写本などの記述で、Q・U写本などでは destineat 、A・B・S写本などでは dedistineat などとなっている。</ref>;
**ハエドゥイーの部族国家は、ガッリアの至極確実な勝利を阻んでいる唯一のものであり、
*eius auctoritate reliquas contineri;
**その声望により、ほかの(同盟部族の)ものたちが(ローマ側に)保持されているが、
*qua traducta locum consistendi Romanis in Gallia non fore.
**それが(ガッリア勢に)引き入れられることによって、ガッリアにおいてローマ人が留まり続ける場はないであろう。
*④ Esse nonnullo se Caesaris beneficio adfectum,
**自分はカエサルの少なからぬ恩義をかけられているが、
*sic tamen, ut iustissimam apud eum causam obtinuerit;
**しかし、彼(カエサル)のもとで至極合法的な理由を手に入れたまでであり、
*sed plus communi libertati tribuere.
**しかし、(ガッリアの)共通の自由に従うことの方がより大きい。
*⑤ Cur enim potius Haedui de suo iure et de legibus ad Caesarem disceptatorem quam Romani ad Haeduos veniant?
**なぜ実際、ハエドゥイー族は自らの法令や法制について、ローマ人がハエドゥイー族へ来るよりむしろ、カエサルを仲裁者とするのか?
*⑥ Celeriter adulescentibus et oratione magistratus et praemio deductis,
**若者たちは速やかに、統領の演説と報酬によって導き入れられた。
*cum se vel principes eius consilii fore profiterentur,
**自分たちがその謀計の首謀者にすらなろうと申し出たときに、
*ratio perficiendi quaerebatur,
**(謀計を)成し遂げる方法が求められた。
*quod civitatem temere ad suscipiendum bellum adduci posse non confidebant.
**というのは、部族がむやみに(ローマ人との)戦争実行へ動かされることができるとは確信していなかったからだ。
*⑦ Placuit, ut Litaviccus decem illis milibus, quae Caesari ad bellum mitterentur, praeficeretur atque ea ducenda curaret,
**リタウィックスに、カエサルに戦争のために派遣されるあの(歩兵)1万名を指揮させ率いさせるのが良いとされた。
**:<span style="color:#009900;">(訳注:歩兵1万名については[[#34節|34節]]を参照。)</span>
*fratresque eius ad Caesarem praecurrerent.
**彼の兄弟たちは、カエサルのところへ先立って行った。
*Reliqua qua ratione agi placeat constituunt.
**残りのことが、どのようなやり方で行なわれるのが良いかが決められた。
===38節===
'''リタウィックスの鼓舞でハエドゥイー族の歩兵1万が挙兵する'''
*① Litaviccus accepto exercitu
**リタウィックスは(1万名の)歩兵隊を受け取って、
*cum milia passuum circiter XXX(triginta)<ref>XXX(triginta) はα系写本の記述で、β系写本では XL(quadraginta) となっている。</ref> ab<ref>ab は写本(ω)の記述であるが、モイゼル(Henricus Meusel)は a を提案している。</ref> [[w:la:Gergovia|Gergovia]] abesset,
**[[w:ゲルゴウィア|ゲルゴウィア]]から約30[[w:ローママイル|ローママイル]](=45km弱)離れたところに来たときに、
*convocatis subito militibus lacrimans,
**兵士たちを突然に呼び集めて、泣きながら、
*② "Quo proficiscimur," inquit, "milites?
**「兵士らよ、どこへ我々は進むのか?」と言った。
*Omnis noster equitatus, omnis nobilitas interiit;
**「我が方(ハエドゥイー族)のすべての[[w:騎兵|騎兵隊]]とすべての高貴な者たちは滅んだ。
*principes civitatis, [[w:la:Eporedorix|Eporedorix]] et Viridomarus,
**部族の領袖たち、エポレドリクスとウィリドマルスは、
*insimulati proditionis ab Romanis indicta causa interfecti sunt.
**裏切りの罪を着せられて、ローマ人たちによって、弁解の余地なく殺されてしまったのだ。
**:<span style="color:#009900;">(訳注:indicta causa「弁解の余地なく」)</span>
*③ Haec ab ipsis<ref>ipsis はα系写本の記述で、β系写本では his となっている。</ref> cognoscite, qui ex ipsa caede fugerunt;
**これは、その虐殺から逃げて来た当人たちから聞き知ってくれ。
*nam ego fratribus atque omnibus meis propinquis interfectis
**なぜなら、私は、兄弟たちやすべての我が親族たちが殺されて
*dolore prohibeor, quae gesta sunt, pronuntiare."
**悲嘆により、なされたことを物語ることを妨げられているからだ。」
*④ Producuntur hi<ref>hi はφ・β系写本の記述で、A写本では ii 、Q写本では hii となっている。</ref>, quos ille edocuerat quae dici vellet,
**彼(リタウィックス)が言って欲しいことを教え込んでいた者たちが連れ出されて来て、
*atque eadem, quae Litaviccus pronuntiaverat, multitudini exponunt:
**リタウィックスが物語ったのと同じことを群衆に説明した。
*⑤ multos<ref>multos はα系写本の記述で、β系写本では omnes となっている。</ref> equites [[w:la:Haedui|Haeduorum]] interfectos, quod conlocuti cum Arvernis dicerentur;
**ハエドゥイー族の多くの騎兵たちは、アルウェルニー族と談判したと言われたので、殺された、と。
*ipsos se inter multitudinem militum occultasse atque ex media caede fugisse.
**(彼ら)自身は、兵士ら多数の間に身を隠して、虐殺の最中から逃げて来たのだ、と。
*⑥ Conclamant Haedui et Litaviccum obsecrant, ut sibi consulat.
**ハエドゥイー族の者たちは叫び声を上げて、リタウィックスに、自分たちに(どうするべきか)助言するように懇願した。
*"Quasi vero" inquit ille "consilii sit res, ac non necesse sit
**彼は言った「実にあたかも、事態が協議するべきというかのようだ。(協議する)必要はないのだ。
*nobis Gergoviam contendere et cum Arvernis nosmet coniungere.
**我々にとって、ゲルゴウィアに急行して、アルウェルニー族と我々が合流することは。
*⑦ An dubitamus, quin nefario facinore admisso Romani iam ad nos interficiendos concurrant?
**非道の悪行を犯したローマ人がもはや我々を殺戮するために襲いかかって来ることを疑うのかね?
*⑧ Proinde, si quid in nobis animi est,
**それゆえに、もし我々に何らかの心構えがあるならば、
*persequamur eorum mortem, qui indignissime interierunt,
**とても不面目に滅びた者たちの死に仇討ちしようではないか。
*atque hos latrones interficiamus."
**かの略奪者たち(ローマ人)を誅殺しようではないか。」
*Ostendit cives Romanos, qui eius praesidii fiducia una erant<ref>erant は写本(ω)の記述であるが、モムゼン(Mommsen)らは ierant を提案している。</ref>:
**(リタウィックスは)彼の護衛を信頼して一緒にいたローマ市民たちを示した。
*⑨ Continuo<ref>Continuo はβ系写本の記述で、α系写本にはない。</ref> magnum numerum frumenti commeatusque diripit,
**ただちに、(ローマ市民たちの)糧食や必需品の多数を略奪して、
*ipsos crudeliter excruciatos interficit.
**当人たちを残酷に拷問して殺した。
*⑩ Nuntios tota civitate Haeduorum dimittit,
**ハエドゥイー族の伝令たちを、部族全体にわたって遣わして、
*in<ref>in はβ系写本の記述だが、α系写本にはない。</ref> eodem mendacio de caede equitum et principum permovet<ref>permovet はL・N写本の記述だが、B写本では permanet 、χ・M・S・β系写本などでは permonet となっている。</ref>;
**騎兵や領袖たちの虐殺について、同じ嘘によって扇動した。
*hortatur ut simili ratione atque ipse fecerit suas iniurias persequantur.
**(リタウィックス)自身がしたのと同様のやり方で、自分たちの(受けた)無法に仇討ちするようにと鼓舞した。
===39節===
'''エポレドリクスがハエドゥイー勢1万の寝返りをカエサルに知らせる'''
*① [[w:la:Eporedorix|Eporedorix]] [[w:la:Haedui|Haeduus]], summo loco natus adulescens et summae domi potentiae,
**[[w:ハエドゥイ族|ハエドゥイー族]]の[[w:エポレドリクス|エポレドリクス]]は、最高の身分に生まれた青年で、本国で最高の権勢にあった。
*et una Viridomarus, pari aetate et gratia, sed genere dispari,
**とともに、[[w:ウィリドマルス|ウィリドマルス]]も、同じ年輩で、同様に敬意を受けていたが、異なる階級であった。
*quem Caesar ab Diviciaco sibi traditum ex humili loco ad summam dignitatem perduxerat,
**カエサルは彼を[[w:ディウィキアクス|ディウィキアクス]]により託されて、低い身分から最高の地位へと引き立てていた。
**:<span style="color:#009900;">(訳注:ディウィキアクスはかつてローマに援助を求めた有力者で、カエサルに殺されたドゥムノリクスの兄弟。)</span>
*in equitum numero convenerant nominatim ab eo evocati.
**(その2人は)彼(カエサル)から名指しで呼び出されて、[[w:騎兵|騎兵]]として(ローマの陣中に)一緒に来ていた。
*② His erat inter se de principatu contentio
**彼ら(2人)には、互いに指揮官の座についての競争があって、
*et in illa magistratuum controversia
**あの統領をめぐる紛争においても
**:<span style="color:#009900;">([[#32節|32節]]~33節を参照。)</span>
*alter pro Convictolitavi, alter pro Coto summis opibus pugnaverant<ref>pugnaverant はα系写本の記述で、β系写本では pugnaverat となっている。</ref>.
**一方は[[w:コンウィクトリタウィス|コンウィクトリタウィス]]のために、他方は[[w:コトゥス|コトゥス]]のために、最大限の助力で奮闘していた。
*③ Ex his Eporedorix cognito Litavicci consilio
**彼らのうちエポレドリクスが[[w:リタウィックス|リタウィックス]]の謀計を知って、
*media fere nocte rem ad Caesarem defert;
**ほぼ真夜中に、事情をカエサルのところへ報知した。
*orat ne patiatur civitatem pravis adulescentium consiliis ab amicitia populi Romani deficere;
**(ハエドゥイーの)部族が青年たちのゆがんだ謀計によってローマ人民の友好から背くことを容認しないように懇願した。
*quod futurum provideat, si se tot hominum milia cum hostibus coniunxerint,
**もし、このように多くの幾千もの同胞が敵たちと協同するならば、(上記の)ことが生じると用心するように、と。
*quorum salutem neque propinqui neglegere,
**(寝返った1万の歩兵たちの)縁者たちは彼らの身の安全をなおざりにすることはないし、
*neque civitas levi momento aestimare posset.
**部族が(寝返った歩兵たちの)影響力を軽く評価できない、と。
===40節===
'''カエサルが4個軍団を率いてハエドゥイー勢1万を制止し、リタウィックスは逃亡'''
*① Magna adfectus sollicitudine hoc nuntio Caesar,
**この知らせにより、大きな不安を感じたカエサルは、
*quod semper [[w:la:Haedui|Haeduorum]] civitati praecipue indulserat,
**常に[[w:ハエドゥイ族|ハエドゥイーの部族]]にとくに気遣っていたので、
*nulla interposita dubitatione legiones expeditas quattuor equitatumque omnem ex castris educit;
**何らためらいを差しはさまずに、戦備を整えた4個[[w:ローマ軍団|軍団]]と[[w:騎兵|騎兵隊]]すべてを陣営から進発させた。
*② nec fuit spatium tali tempore ad contrahenda castra,
**このような情勢で、陣営を縮小するための余地はなかった。
**:<span style="color:#009900;"> (訳注:[[#36節|36節]]で、カエサルはゲルゴウィアの大きな陣営および敵に近い小さな陣営を6個軍団で守っていた。)</span>
*quod res posita in celeritate videbatur;
**というのは、事態は迅速さにかかっていると思われたからだ。
*C.(Gaium) Fabium legatum cum legionibus duabus castris praesidio relinquit.
**総督副官[[w:ガイウス・ファビウス|ガイウス・ファビウス]]を2個軍団とともに陣営の守備に残しておいた。
*③ Fratres Litavicci cum comprehendi iussisset,
**(カエサルは)リタウィックスの兄弟たちを拘束することを命じていたのだが、
*paulo ante reperit ad hostes fugisse.
**少し前に(ゲルゴウィアの)敵たちのところへ去ったことを探り出した。
*④ Adhortatus milites ne necessario tempore itineris labore permoveantur,
**(カエサルは)緊急の時に、行軍の労苦により乱されないように、兵士たちを激励して、
*cupidissimis omnibus progressus milia passuum [[w:la:Viginti quinque|XXV]] agmen Haeduorum conspicatus<ref>conspicatus はα系写本の記述で、β系写本では conspicatur となっている。</ref>
**皆がとても熱中していたので、25[[w:|ローママイル]](約37km)進んで、ハエドゥイー族の隊列を視認した。
*immisso equitatu iter eorum moratur atque impedit
**騎兵隊を突進させて、彼ら(ハエドゥイー勢)の行軍を妨げて、停止させた。
*interdicitque omnibus ne quemquam interficiant.
**(ハエドゥイー勢を)誰一人殺さないように(ローマ勢の)皆に禁じた。
*⑤ [[w:la:Eporedorix|Eporedorigem]] et Viridomarum, quos illi interfectos existimabant,
**彼ら(ハエドゥイー勢)が、殺されたものと考えていた者たち、[[w:エポレドリクス|エポレドリクス]]と[[w:ウィリドマルス|ウィリドマルス]]に、
*inter equites versari suosque appellare iubet.
**(ハエドゥイー勢の)騎兵たちの間を歩き回って、味方に呼びかけることを命じた。
*⑥ His cognitis et Litavicci fraude perspecta Haedui manus tendere,
**彼ら(2人)に気付いて、リタウィックスのごまかしを見通して、ハエドゥイー族の者たちは手を差し出して、
*deditionem significare et proiectis armis mortem deprecari incipiunt.
**降伏の意を表して、武器を投げ出して、死を赦免されることを求め始めた。
*⑦ Litaviccus cum suis clientibus,
**[[w:リタウィックス|リタウィックス]]は、配下の子分たちとともに、
*quibus more Gallorum nefas est etiam in extrema fortuna deserere patronos,
**ガッリア人の風習では、最悪の境遇にあってさえも(子分が自分の)親分を見捨てることは非道であったので、
*[[w:la:Gergovia|Gergoviam]] profugit.
**(親分・子分ともども)[[w:ゲルゴウィア|ゲルゴウィア]]に逃れた。
===41節===
'''副官ファビウスの報告:ゲルゴウィアの敵勢がローマ陣営に襲来'''
*① Caesar nuntiis ad civitatem [[w:la:Haedui|Haeduorum]] missis,
**カエサルは伝令たちを[[w:ハエドゥイ族|ハエドゥイー]]の部族(当局)に遣わして、
*qui suo beneficio conservatos docerent quos iure belli interficere potuisset,
**彼ら(伝令)に、戦時の権限により殺せた者たち(歩兵1万)は(カエサル)自らの恩恵により許されたのだ、と説かせた。
*tribusque horis noctis exercitui ad quietem datis castra ad [[w:la:Gergovia|Gergoviam]] movit.
**(カエサルは)夜の3時間を軍隊に休息のために与えて、陣営を引き払ってゲルゴウィアの方へ向かった。
**:<span style="color:#009900;">(訳注:古代ローマの不定時法では、夏季の夜の3時間は、現在の定時法の3時間よりかなり短い。)</span>
*② Medio fere itinere equites a Fabio missi,
**(ゲルゴウィアへの)道程のほぼ中間のところで、ファビウスから[[w:騎兵|騎兵]]たちが遣わされて来て、
*quanto res in periculo fuerit, exponunt.
**事態がどれほどの危機にあるか、を打ち明けた。
*Summis copiis castra oppugnata demonstrant,
**(ガッリア勢の)最大級の軍勢により(ローマ勢の)陣営が攻撃された、と説明した。
*cum crebro integri defessis succederent
**そのときに(ガッリア勢は)たびたび新たな者たちが疲労した者たちに交代していたが、
*nostrosque adsiduo labore defatigarent,
**我が方(ローマ勢)は絶え間ない労苦により疲れ果てていた。
*quibus propter magnitudinem castrorum perpetuo esset isdem in vallo permanendum.
**彼ら(ローマ勢)にとり、陣営の大きさのために、同じ者たちが防柵の中に留まらざるを得なかった。
**:<span style="color:#009900;">(訳注:カエサルは[[#40節|40節]]②項で「陣営を縮小するための余地はなかった」とあらかじめ弁解している。)</span>
*③ Multitudine sagittarum atque omnis generis<ref>omnis generis はα系写本の記述で、β系写本では omni genere となっている。</ref> telorum multos vulneratos;
**(ガッリア勢からの)矢の多数と飛び道具のあらゆる類いによって(ローマ勢の)多くのものが傷つけられた。
*ad haec sustinenda magno usui fuisse tormenta.
**これに持ちこたえるために、投石器が大いに役立った。
*④ Fabium discessu eorum duabus relictis portis obstruere ceteras
**ファビウスは、彼ら(ガッリア勢)が退却すると、2つの門を残して、ほか(の門)を閉鎖した。
*pluteosque vallo addere et se in posterum diem similemque casum apparare<ref>similemque casum apparare はα系写本の記述で、β系写本では similem ad casum parare となっている。</ref>.
**胸壁を防柵を付け加えて、翌日における似たような状況に備えた。
*⑤ His rebus cognitis Caesar
**これらの事態を知って、カエサルは、
*summo studio militum ante ortum solis in castra pervenit.
**兵士たちの最大級の努力によって、日の出の前に(ゲルゴウィアの)陣営に到着した。
===42節===
'''ハエドゥイー族の者たちが反ローマ暴動を引き起こす'''
*① Dum haec ad [[w:la:Gergovia|Gergoviam]] geruntur,
**これらがゲルゴウィアの辺りでなされている間に、
*[[w:la:Haedui|Haedui]] primis nuntiis ab Litavicco acceptis
**[[w:ハエドゥイ族|ハエドゥイー族]]の者たちは、[[w:リタウィックス|リタウィックス]]からの最初の知らせを受け取ったが、
*nullum sibi ad cognoscendum spatium relinquunt.
**自分たちには(この知らせを)調べるための余地を何ら残さなかった。
*② Impellit alios avaritia, alios iracundia et temeritas
**ある者たちを貪欲さが、ある者たちを激しやすさや無分別が駆り立てた。
*─ quae maxime illi hominum generi est innata ─ ut levem auditionem habeant pro re comperta.
**あの種族の人々はとりわけ、軽率な風聞を確認された事として見なすように、生まれついているのだ。
*③ Bona civium Romanorum diripiunt, caedes faciunt, in servitutem abstrahunt.
**(ハエドゥイー族の者たちは)ローマ市民たちの財産を略奪し、殺戮を行なって、隷属状態に引きずり込んだ。
*④ Adiuvat rem proclinatam Convictolitavis
**(さらに)傾いた事態を[[w:コンウィクトリタウィス|コンウィクトリタウィス]]が助長して、
*plebemque ad furorem impellit, ut facinore admisso ad sanitatem reverti pudeat.
**民衆を狂暴さへと、悪行を犯して冷静さへ引き返すことを恥と思うように、駆り立てた。
*⑤ M.(Marcum) Aristium tribunum militum iter ad legionem facientem
**<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>であるマルクス・アリスティウスが[[w:ローマ軍団|軍団]]のところへ旅しているところを
*fide data ex oppido [[w:la:Cabillonum|Cavillono]] educunt;
**(安全の)保証を与えて、城塞都市カウィッロヌムから連れ出した。
**:<span style="color:#009900;">(訳注:カウィッロヌム Cavillonum はカビッロヌム Cabillonum とも綴り、現在の[[w:シャロン=スュル=ソーヌ|シャロン=スュル=ソーヌ]])</span>
*idem facere cogunt eos, qui negotiandi causa ibi constiterant.
**そこに商売をするために定住していた(ローマ人の)者たちにも同じことをするように強要した。
*⑥ Hos continuo <in><ref>in は写本にないが、近世の活字本から挿入されている。</ref> itinere adorti omnibus impedimentis exuunt;
**直ちに彼らを途中で襲撃して、すべての手荷物を奪い取った。
*repugnantes diem noctemque obsident;
**抵抗する者たちを昼夜にわたって包囲した。
*multis utrimque interfectis
**(ハエドゥイー族とローマ人の)双方とも多くの者たちが殺されて、
*maiorem multitudinem armatorum<ref>armatorum はα系写本の記述で、β系写本では ad arma となっている。</ref> concitant.
**(ハエドゥイー族の)より多くの群衆を武装へと扇動した。
===43節===
'''ハエドゥイー族当局がカエサルに屈服。ガッリア大動乱の予感'''
*① Interim nuntio adlato omnes eorum milites in potestate Caesaris teneri,
**その間に、彼ら(ハエドゥイー族)の兵士すべてがカエサルの権力下で支配されているという知らせがもたらされて、
*concurrunt ad Aristium,
**(ハエドゥイー族当局の者たちは)アリスティウスのところへ急ぎ集まって、
*nihil publico factum consilio demonstrant;
**(ローマ市民に対する襲撃は)何ら公けに企てがなされたものではないと説明した。
*② quaestionem de bonis direptis decernunt,
**(部族当局は、ローマ市民から)略奪された財産についての究明を決定して、
*Litavicci fratrumque bona publicant,
**リタウィックスと兄弟たちの財産を没収し、
*legatos ad Caesarem sui purgandi gratia mittunt.
**カエサルのところへ使節たちを、自分たちを赦免することのために遣わした。
*③ Haec faciunt reciperandorum<ref>reciperandorum はα系写本の記述で、β系写本では recuperandorum となっている。</ref> suorum causa;
**これらを、配下の者たち(=歩兵1万名)を取り戻すために行なったのだ。
*sed contaminati facinore et capti compendio ex direptis bonis,
**しかし(彼らは)悪行に汚染されていて、略奪した財産の利得にとらわれており、
*quod ea res ad multos pertinebat, timore<ref>timore はα系写本の記述で、β系写本では et timore となっている。</ref> poenae exterriti
**その事に多くの者たちが関与していたので、懲罰の恐れに脅かされて、
*consilia clam de bello inire incipiunt
**ひそかに戦争の謀計に取りかかり始めて、
*civitatesque reliquas legationibus sollicitant.
**ほかの諸部族を使節派遣によって、そそのかした。
*④ Quae tametsi Caesar intellegebat, tamen quam mitissime potest legatos appellat;
**カエサルはそのようなことを認識していたけれども、(ハエドゥイー族の)使節たちにできるだけ平静に話しかけた。
*nihil se propter inscientiam levitatemque vulgi gravius de civitate iudicare
**自分は(ハエドゥイー族の)民衆の無知や軽率さのために、部族を何ら厳重に裁断することはない、と。
*neque de sua in [[w:la:Haedui|Haeduos]] benevolentia deminuere.
**自分のハエドゥイー族に対する好意を減ずることはない、と。
*⑤ Ipse maiorem Galliae motum exspectans,
**(カエサル)自身は、ガッリアのより大きな動乱を予期しており、
*ne ab omnibus civitatibus circumsisteretur,
**すべての部族によって包囲されることがないように、
*consilia inibat, quemadmodum ab<ref>ab はχ系写本の記述で、φ系写本では a となっており、β系写本にはない。</ref> [[w:la:Gergovia|Gergovia]] discederet ac rursus omnem exercitum contraheret,
**どのようにゲルゴウィアから撤退して再び軍隊全体を集結するか、策定に取りかかった。
*ne profectio nata ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> timore defectionis similis<ref>similis はα系写本の記述で、β系写本では similisque となっている。</ref> fugae videretur.
**(諸部族の)背反の恐れから生じた出発が、逃亡同然と見られないように。
===44節===
'''ゲルゴウィアの急所の尾根'''
[[画像:Plateau_of_Gergovia.jpg|thumb|center|900px|ゲルゴウィア([[w:la:Gergovia|Gergovia]])すなわち現在のジェルゴヴィ高地([[w:fr:Plateau de Gergovie|Plateau de Gergovie]])の全景(南方のル・クレスト [[w:fr:Le Crest|Le Crest]] から撮影)。<br>画像中央の右下に、ローマ勢が占領して小さい方の陣営を築いていたと推定されているラ・ロシュ=ブランシュ([[w:fr:La Roche-Blanche (Puy-de-Dôme)|La Roche-Blanche]])の丘陵が見える。<br>本節①項で言及されているのは画像の左端に写る丘陵と思われ、尾根伝いにほぼ平坦なゲルゴウィアの山頂(画像中央)に続いている。<br>これらの位置関係の推定は、19世紀の[[w:ウジェーヌ・ストッフェル|ウジェーヌ・ストッフェル]]大佐(colonel Eugène Stoffel)の発掘調査に依拠したものである。]]
[[画像:La_Roche_Blanche.JPG|thumb|right|300px|ローマ勢が占領して小さい方の陣営を築いていたと推定されているラ・ロシュ=ブランシュ([[w:fr:La Roche-Blanche (Puy-de-Dôme)|La Roche-Blanche]])の丘陵]]
*① Haec cogitanti accidere visa est facultas bene rei gerendae<ref>rei gerendae はα系写本の記述で、β系写本では gerendae rei となっている。</ref>.
**(カエサルが)これらを考慮しているときに、事をうまく行なえる可能性が生じたと思われた。
*Nam cum in minora castra operis perspiciendi causa venisset,
**すなわち、(ローマ勢の)小さい方の陣営に、作業を視察するためにやって来たときに、
*animadvertit collem qui ab hostibus tenebatur nudatum hominibus,
**敵たちによって占められていた丘陵が、無人にされているのに気付いた。
*qui superioribus diebus vix prae multitudine cerni poterat.
**それは、前日には、(ガッリア勢の)大勢の者たちのためにほとんど見分けが付けられないものだった。
*② Admiratus quaerit ex perfugis causam,
**(カエサルは)驚いて、(ゲルゴウィアからの)[[w:脱走兵|脱走兵]]たちに理由を尋ねた。
*quorum magnus ad eum cotidie numerus confluebat.
**その者たちの多数は、毎日、彼(カエサル)のところへ群がり集まっていたのだ。
**:<span style="color:#009900;">(訳注:[[#14節|14節]]⑨項で既述のように、ガッリア勢は[[w:兵役逃れ|兵役忌避]]の多さに悩まされていた。)</span>
*③ Constabat inter omnes
**(脱走兵たち)皆の間では同じ意見であった。
*─ quod iam ipse Caesar per exploratores cognoverat ─
**─ すでにカエサル自身が偵察者たちを通して知っていたことであったが ─
*dorsum esse eius iugi prope aequum, sed silvestre<ref>silvestre はβ系写本の記述で、α系写本では hunc silvestrem となっている。</ref> et angustum,
**その尾根の背面はほぼ平地で、しかし森林におおわれて狭く、
*qua esset aditus ad alteram partem oppidi<ref>partem oppidi はα系写本の記述で、β系写本では oppidi partem となっている。</ref>;
**それによって城塞都市の別の方面への出入口となっている、と。
*④ vehementer huic illos loco<ref>vehementer huic illos loco はα系写本の記述で、β系写本では huic loco vehementer illos となっている。</ref> timere nec iam aliter sentire,
**この地帯を彼ら(ガッリア勢)が極度に恐れ、すでに感じていたことには、
*uno colle ab Romanis occupato, si alterum amisissent,
**ローマ人によって一つの丘陵が占領されているので、もしもう一方をも失ったならば、
*quin paene circumvallati atque omni exitu et pabulatione interclusi viderentur;
**(ゲルゴウィアが)ほとんど包囲されて、あらゆる出口と糧秣徴発を阻まれると思われたのである。
*ad hunc muniendum locum<ref>locum はβ系写本の記述で、α系写本にはない。</ref> omnes a [[w:la:Vercingetorix|Vercingetorige]] evocatos.
**この地帯の辺りを防御するために、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]により総勢が召集されていたのだ、と。
===45節===
'''ローマ勢の陽動部隊が敵を引き付け、本隊が敵の本陣を目指す'''
*① Hac re cognita Caesar mittit complures equitum turmas eodem<ref>eodem はβ系写本の記述で、α系写本では eisdem などとなっており、またモイゼル(Meusel)は eo de と解釈している。</ref> media nocte;
**この事を知って、カエサルは多数の[[w:騎兵|騎兵]]<ruby><rb>小隊</rb><rp>(</rp><rt>トゥルマ</rt><rp>)</rp></ruby>を同じところに真夜中に派遣した。
**:<span style="color:#009900;"> (訳注:騎兵小隊 turma は、ローマの同盟部族などからなる騎兵の単位で、30騎ほどからなるとされている。)</span>
*imperat his<ref>his はβ系写本の記述で、α系写本にはない。</ref> ut paulo tumultuosius omnibus locis vagarentur<ref>vagarentur はα系写本の記述で、β系写本では pervagentur となっている。</ref>.
**彼らには、いくらか騒々しく、あらゆる場所を動き回るように命令した。
*② Prima luce magnum numerum impedimentorum ex castris mulorumque produci deque his stramenta detrahi
**夜明けに、陣営から多数の荷馬や[[w:ラバ|ラバ]]を連れ出して、これらから[[w:鞍|荷鞍]]を取り去って、
*mulionesque cum cassidibus equitum specie ac simulatione collibus circumvehi iubet.
**ラバ引きの者たちを鉄兜とともに、騎兵の外見と真似をさせて、丘々を乗り回すことを命じた。
*③ His paucos addit equites, qui latius ostentationis causa vagarentur<ref>vagarentur はα系写本の記述で、β系写本では vagentur となっている。</ref>.
**彼らに少数の騎兵を付き添わせて、より広く見せびらかすために動き回らせた。
*Longo circuitu easdem omnes iubet petere regiones.
**(ラバ引きと騎兵の)皆には、長く迂回して、同じ一帯を目指すことを命じた。
*④ Haec procul ex oppido videbantur, ut erat a Gergovia despectus in castra,
**これらは<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>から遠くに望見され、ゲルゴウィアから(ローマ勢の)陣営が眺められたほどであったが、
*neque tanto spatio certi quid esset explorari poterat.
**これほどの距離のために(ガッリア勢からは)何ごとか確かなことは探り出されなかった。
*⑤ Legionem unam eodem iugo mittit
**(カエサルは)1個[[w:ローマ軍団|軍団]]を同じ尾根に派遣して、
*et paulum progressam inferiore constituit loco silvisque occultat.
**いくらか前進させて低い場所に駐留させ、森林に隠した。
*⑥ Augetur Gallis suspicio
**(これらを見た)ガッリア人には疑念が増されて、
*atque omnes illo ad munitionem copiae traducuntur.
**軍勢のすべてがあそこ(=無人にしていた急所の丘陵)へ防御のために移動した。
*⑦ Vacua castra hostium Caesar conspicatus
**カエサルは敵たちの(ゲルゴウィア山頂の)陣営が空であると気付いて、
*tectis insignibus suorum occultatisque signis militaribus
**配下の者たちの標章を覆い隠し、軍旗を隠して、
*raros milites, ne ex oppido animadverterentur, ex maioribus castris in minora traducit
**兵士たちをまばらに、城塞都市から気付かれないように、大きい方の陣営から小さい方に移動させた。
*legatisque, quos singulis legionibus praefecerat, quid fieri velit, ostendit;
**個々の軍団を指揮させていた<ruby><rb>[[w:レガトゥス|副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>たちに、何がなされることを欲しているかを示した。
*⑧ in primis monet ut contineant milites,
**第一に、兵士たちを抑え留めるように戒めた。
*ne studio pugnandi aut spe praedae longius progrediantur;
**(兵士たちが)戦うことの熱意、あるいは略奪の希望により、より遠くまで進み出ないように、と。
*⑨ quid iniquitas loci habeat incommodi proponit;
**地勢の不利がどれほど敗北を生じるかを示した。
*hoc una celeritate posse vitari<ref>vitari はβ系写本の記述で、α系写本では mutari となっている。</ref>;
**迅速さのみがこれを避けることができる。
*occasionis esse rem, non proelii.
**事の成否は、戦闘にではなく、好機にかかっている。
*⑩ His rebus expositis signum dat
**これらの事柄を説明して、(副官たちに進軍の)号令を出した。
*et ab dextra parte alio ascensu eodem tempore Haeduos mittit.
**右の方面からは、別の登り道を(ローマ軍本隊と)同時に[[w:ハエドゥイ族|ハエドゥイー族]](の騎兵)を派遣した。
===46節===
'''ローマ軍の本隊が防壁を越えて、敵陣の一部を占拠'''
*① Oppidi murus ab<ref>ab はB・M・L・N写本の記述で、β系写本では a となっている。</ref> planitie atque initio ascensus recta regione,
**(ゲルゴウィアの)<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の城壁は、平地や登り道の始まりから真っ直ぐに(=直線距離で)、
*si nullus amfractus<ref>amfractus はα系写本の記述で、β系写本では anfractus となっている。</ref> intercederet, mille CC(mille ducenti)<ref>mille CC(=1200) はα系写本の記述で、β系写本では CC(=200)となっている。</ref> passus aberat;
**もし何らの湾曲が間になければ、1200[[w:パッスス|パッスス]](=約1.8km)離れていた。
*② quicquid huc circuitus ad molliendum clivum accesserat<ref>accesserat は写本(ω)の記述だが、オットー・ゼール [[w:de:Otto Seel|Otto Seel]] の校訂では accesserit としている。</ref>,
**ここに(山の斜面の)傾斜を緩和するために、何らかの回り道が付け加わっていて、
*id spatium itineris augebat.
**その道のりの距離を増していた。
*③ A medio fere colle in longitudinem, ut natura montis ferebat,
**丘陵のほぼ真ん中から、山の地形が作り出したかのように、長きにわたって、
*ex grandibus saxis sex pedum murum qui nostrum<ref>nostrum は中世の写本(ω)の記述だが、近世の版では nostrorum となっている。</ref> impetum tardaret,
**大きな石垣からなる6[[w:ペース (長さ)|ペース]](=約1.8m)もの、我が方(ローマ勢)の突進を遅らせる防壁を、
*praeduxerant Galli,
**ガッリア人は引いて来ており、
*atque inferiore omni spatio vacuo relicto
**(その石垣の防壁)より下方のすべての空間は人気なく残されていて、
*superiorem partem collis usque ad murum oppidi densissimis castris compleverant.
**丘陵のより上方の部分を、城塞都市の城壁の方へ続けざまに、とても密集した(各部族ごとの)陣営で満たしていた。
*④ Milites dato signo celeriter ad munitionem perveniunt
**(ローマ人の)兵士たちは号令を与えられて、速やかに(石垣の)防壁のところへ到達して、
*eamque transgressi trinis castris potiuntur;
**それを越えて行って、3つの(部族ごとの)陣営を占拠した。
*⑤ ac tanta fuit in castris capiendis<ref>castris capiendis はα系写本の記述で、β系写本では capiendis castris となっている。</ref> celeritas,
**(3つの)陣営を奪取することにおいて、これほどにも迅速さがあったので、
*ut Teutomatus, rex Nitiobrogum, subito in tabernaculo oppressus,
**その結果、[[w:ニティオブロゲス族|ニティオブロゲス族]]の王[[w:テウトマトゥス|テウトマトゥス]]は、[[w:テント|天幕]]において突然に襲われて、
*ut meridie conquieverat, superiore corporis parte nudata<ref>nudata はα系写本の記述で、β系写本では nuda となっている。</ref>
**昼寝をしていたが、上半身は裸のままで、
*vulnerato equo vix se ex manibus praedantium militum eriperet.
**傷付けられた馬によって、略奪している(ローマ人)兵士の手から、やっと自らを救い出した。
===47節===
'''血気にはやるローマ兵たちの猪突猛進、ガッリア女たちの命乞い'''
*① Consecutus id quod animo proposuerat
**心に決めていたことを達成したので、
*Caesar receptui cani iussit
**カエサルは退却ラッパを吹くことを命じた。
*legionique decimae, quacum erat, contionatus signa constituit.
**彼とともにいた[[w:第10軍団エクェストリス|第10軍団]]に呼びかけて、軍旗を停止した。
**:<span style="color:#009900;">(訳注:第10軍団はガッリア戦争初期からの最古参の軍団。軍旗を停止するとは、進軍を止めること。)</span>
*② Ac<ref>ac はα系写本の記述で、β系写本では at となっている。</ref> reliquarum legionum milites non exaudito<ref>exaudito はα系写本の記述で、β系写本では audito となっている。</ref> sono tubae,
**ほかの[[w:ローマ軍団|軍団]]の兵士たちは、ラッパの響きを聞き取れなかった。
*quod satis magna valles intercedebat,
**というのは、十分に大きな峡谷が間にあったからである。
*tamen ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> tribunis militum legatisque, ut erat a Caesare praeceptum, retinebantur;
**しかしながら、<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>たちや<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>たちにより、カエサルから指図されていたように、制止されていた。
*③ Sed elati spe celeris victoriae et hostium fuga et superiorum temporum secundis proeliis
**だが(兵士たちは)迅速な勝利の希望や、敵たちの逃亡や、それ以前のときの順調な戦闘により、高慢になっていて、
*nihil adeo arduum sibi esse existimaverunt<ref>esse existimaverunt はα系写本の記述で、β系写本では existimabant となっている。</ref>, quod non virtute consequi possent,
**自分たちにとって、武勇で達することができないほどの困難なものはまったく何もない、と考えており、
*neque finem prius sequendi fecerunt quam muro oppidi portisque adpropinquarunt.
**(ゲルゴウィアの)城塞都市の城壁や城門に近付くまでは、追及を終結させなかった。
*④ Tum vero ex omnibus urbis partibus orto clamore,
**すると、まさに(ゲルゴウィアの)町のあらゆる方面から叫び声が発せられて、
*qui longius aberant, repentino tumultu perterriti,
**(城内の)遠い方に離れていた者たちは、予期せぬ騒ぎに脅えており、
*cum hostem intra portas esse existimarent,
**敵(=ローマ人)が城門の内側にいると考えたので、
*sese ex oppido eiecerunt.
**城塞都市から急ぎ出た。
*⑤ Matres familiae de muro vestem argentumque iactabant
**家庭の母親たちは、城壁から衣類や貨幣をたびたび投げやった。
*et pectore nudo prominentes passis manibus obtestabantur Romanos,
**そして胸を裸にして(城壁の上に)進み出て、手を伸ばしてローマ人たちに哀願した。
*ut sibi parcerent
**自分たちを容赦するように、
*neu, sicut Avarici fecissent, ne a mulieribus quidem atque infantibus abstinerent;
**(ローマ人が)アウァーリクムでしたように女たちや子供たちでさえも赦免しないことのないように、と。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
**:<span style="color:#009900;">(訳注:ローマ人がアウァーリクムでした行為については、[[#28節|28節]]④項を参照。)</span>
*⑥ nonnullae de muris<ref>muris はα系写本の記述で、β系写本では mure となっている。</ref> per manus demissae sese militibus tradebant.
**少なからぬ者たちは、城壁から手で降ろされて、(ローマ人)兵士たちに身を任せた。
[[画像:Gergovie_mur_pano2.jpg|thumb|center|700px|ゲルゴウィア([[w:la:Gergovia|Gergovia]])すなわち現在のジェルゴヴィ高地([[w:fr:Plateau de Gergovie|Plateau de Gergovie]])で発掘された城壁の遺構。]]
*⑦ L.(Lucius) Fabius centurio legionis VIII(octavae),
**[[w:第8軍団アウグスタ|第8軍団]]の<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby>であるルキウス・ファビウスは、
*quem inter suos eo die dixisse constabat
**配下の者たちの間で、その日、(以下のように)言ったことが知られていた。
*excitari se Avaricensibus praemiis neque commissurum, ut prius quisquam murum ascenderet,
**自分はアウァーリクムの恩賞に奮い立たせられて、何者かが(自分)より早く城壁を登るようなことは生じさせない、と。
*tres suos nactus manipulares
**(ファビウスは)同じ隊の兵士である3人の配下と遭遇して、
**:<span style="color:#009900;">(訳注:manipulares は「[[w:マニプルス|歩兵中隊]]の」とも解されるが、ここでは「同じ隊の兵士」という意味であろう。)</span>
*atque ab his sublevatus murum ascendit,
**彼らによって持ち上げられて城壁を登った。
*hos<ref>hos はα系写本の記述で、π系写本では eos 、ρ系写本では eo となっている。</ref> ipse rursus singulos exceptans in murum extulit.
**彼らは(ファビウス)自身が再び1人ずつ引き出して、城壁に導き上げた。
===48節===
'''ガッリア勢が城塞都市に引き返して、防戦に努める'''
*① Interim hi<ref>hi はα系・π系・R写本の記述で、U写本では ii となっている。</ref> qui ad alteram partem oppidi, ut supra demonstravimus, munitionis causa convenerant,
**その間に、前に述べたように、<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の別の方面へ、防御のために集結していた(ガッリア勢の)者たちは、
**:<span style="color:#009900;">(訳注:[[#45節|45節]]⑥項で述べられている。)</span>
*primo exaudito clamore,
**初めに叫び声を聞き取り、
*inde etiam crebris nuntiis incitati oppidum ab Romanis teneri,
**さらに、城塞都市がローマ人たちによって占領されたという頻繁な知らせにさえも駆り立てられて、
*praemissis equitibus magno concursu<ref>concursu はα系写本の記述で、β系写本では cursu となっている。</ref> eo contenderunt.
**[[w:騎兵|騎兵]]たちを先遣して、(歩兵たちも)駆けに駆けて、そこ(=城塞都市)へ急いだ。
[[画像:Auvergne_Gaul_coin_CdM.jpg|thumb|right|300px|[[w:アルウェルニ族|アルウェルニー族]]の兵士が刻まれた貨幣([[w:ビブリオテーク・ナショナル|仏国立図書館]]貨幣部所蔵)]]
*② Eorum ut quisque primus venerat,
**彼らの(城塞都市に)到着した者から順々に
**:<span style="color:#009900;">(訳注:quisque primus「最初の者ごとに;順々に」)</span>
*sub muro consistebat suorumque pugnantium numerum augebat.
**城壁の下に陣取って、味方の戦う者たちの数を増した。
*③ Quorum cum magna multitudo convenisset,
**その者たちの大群集が集結したときに、
*matres familiae quae paulo ante Romanis de muro manus tendebant,
**少し前にはローマ人たちに城壁から手を差し出していた家庭の母親たちが
*suos obtestari
**味方に哀願して、
*et more Gallico passum capillum ostentare liberosque in conspectum proferre coeperunt.
**ガッリアの風習により、髪を広げて示し、子供たちを(男たちの)眼前に運び始めた。
*④ Erat Romanis nec loco nec numero aequa contentio;
**ローマ人たちにとっては、地の利でも(兵の)数でも、対等な闘いはなかった。
*simul et cursu et spatio pugnae defatigati
**と同時に、戦いの疾走や時間(の長さ)に疲弊させられていて、
*non facile recentes atque integros sustinebant.
**(ガッリア勢の)新来かつ無傷の者たちに、容易に持ちこたえられなかった。
===49節===
'''カエサルが劣勢の自軍に副官セクスティウスを増援する'''
*① Caesar cum iniquo loco pugnari hostiumque augeri copias videret,
**カエサルは(戦闘が自軍に)不利な場所で戦われていること、かつ敵方の軍勢が増やされていることを見たので、
*praemetuens suis
**配下の者たちを気遣って、
*ad T.(Titum) Sextium legatum, quem minoribus castris praesidio reliquerat, misit,
**小さい方の陣営に守備として残しておいた<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>ティトゥス・セクスティウスのところへ(伝令を)遣わして、
**:<span style="color:#009900;">(訳注:セクスティウスについては、すでに副官として[[ガリア戦記 第6巻#1節|第6巻1節]]で言及されている。)</span>
*ut cohortes ex castris celeriter educeret
**陣営から(いくつかの)<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>を速やかに進発させるように、
*et sub infimo colle ab dextro latere hostium constitueret,
**かつ丘陵のふもとの下方で、敵方の右の側面に布陣するように、と。
*② ut, si nostros loco depulsos vidisset, quominus libere hostes insequerentur terreret.
**もし我が方が(戦闘の)場所から追いやられたのを見たら、敵方が自由に追撃することにならぬよう脅かすためである。
*③ Ipse paulum ex eo loco cum legione progressus, ubi constiterat,
**(カエサル)自身は、停止していた場所から、軍団とともに少し前進して、
**:<span style="color:#009900;">([[#47節|47節]]①項で既述のように、カエサルとともに停止していたのは[[w:第10軍団エクェストリス|第10軍団]]である。)</span>
*eventum pugnae exspectabat.
**戦いの決着を待っていた。
===50節===
'''激戦の末、敗勢に陥るローマ軍'''
*① Cum acerrime comminus pugnaretur, hostes loco et numero, nostri virtute confiderent,
**(両軍により)激烈に格闘して戦われていて、敵方は地の利と(兵の)数を、我が方(ローマ軍)が武勇を頼りとしていたときに、
*subito sunt Haedui visi ab latere nostris aperto,
**突如として、我が方にとって開けた側面(=右側)から、[[w:ハエドゥイ族|ハエドゥイー族]]の者たち(の姿)が見られた。
**:<span style="color:#009900;">(訳注:「開けた側面から」ab latere aperto とは、兵士の[[w:スクトゥム|長盾]]で覆われていない右側を指す。)</span>
*quos Caesar ab dextra parte alio ascensu manus distinendae causa miserat.
**カエサルがその者たちを右の方面から別の登り道により(敵の)部隊を分散しておくために派遣していたのだ。
**:<span style="color:#009900;">(訳注:この事は、[[#45節|45節]]⑩項で述べられている。)</span>
*② Hi similitudine armorum vehementer nostros perterruerunt,
**彼らの武具が(ガッリア勢のものと)似ていることが、我が方(の兵士たち)を極度に怖れさせた。
*ac tametsi dextris humeris<ref>humeris が写本(ω)の記述であるが、umeris とするのも一般的となっている。</ref> exsertis animadvertebantur, quod insigne pactum<ref>pactum はHellerによる修正提案で、写本(ω)では pacatum となっており、研究者たちにより他の修正も提案されている。</ref> esse consuerat,
**(ハエドゥイー勢は)右の肩を脱いでいるのが視認され、その印は(味方として)定められているのが常であったが、
*tamen id ipsum sui fallendi causa milites ab hostibus factum existimabant.
**けれども(ローマ人の)兵士たちは、それ自体が自分たちを欺くために、敵方によりなされたと考えたのだ。
[[画像:Dorf_La_Roche_Blanche.JPG|thumb|right|300px|ゲルゴウィア([[w:la:Gergovia|Gergovia]])すなわち現在のジェルゴヴィ高地([[w:fr:Plateau_de_Gergovie|Plateau de Gergovie]])の遠景(南方のル・クレスト [[w:fr:Le_Crest|Le Crest]] から撮影)。画像中央がローマ軍が小さい方の陣営を設置していたと推定されているラ・ロシュ=ブランシュ([[w:fr:La_Roche-Blanche_(Puy-de-Dôme)|La Roche Blanche]])の丘陵で、山頂からこの丘陵の辺りが激戦地だったと思われる。現在は山麓にかけて住宅地が広がっている。]]
*③ Eodem tempore L.(Lucius) Fabius centurio quique una murum ascenderant,
**同じ時に、<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby>ルキウス・ファビウスおよび一緒に城壁を登っていた者たちは、
**:<span style="color:#009900;">(訳注:ファビウスらについては、[[#47節|47節]]⑦項で述べられている。)</span>
*circumventi atque interfecti de<ref>de はβ系写本の記述で、α系写本にはない。</ref> muro praecipitabantur.
**(ガッリア勢に)取り囲まれ、殺害されて、城壁から突き落とされた。
*④ M.(Marcus) Petronius, eiusdem legionis centurio,
**同じ[[w:ローマ軍団|軍団]]の百人隊長マルクス・ペトロニウスは、
**:<span style="color:#009900;">(訳注:ファビウスと同じ軍団とは、[[#47節|47節]]⑦項で述べられているように[[w:第8軍団アウグスタ|第8軍団]]である。)</span>
*cum portas<ref>portas は写本(ω)の記述だが、portam と単数形にする修正も提案されている。</ref> excidere conatus esset,
**城門を突き破って出ることを試みていたときに、
*a multitudine oppressus ac sibi desperans multis iam vulneribus acceptis,
**(敵の)大勢によって圧倒されて、すでに多くの傷を受けて自分に絶望しており、
*manipularibus suis, qui illum secuti erant<ref>secuti erant はα系写本の記述で、β系写本では erant secuti となっている。</ref>,
**彼に付き従っていた同じ隊の配下の者たちに、
*"quoniam" inquit "me una vobiscum servare non possum,
**曰く「私と諸君を一緒に救うことはできないのだから、
*vestrae quidem certe vitae prospiciam, quos cupiditate gloriae adductus in periculum deduxi.
**せめて、栄誉の欲に引き寄せられて危険に引きずり込んでしまった諸君の生命にはきっと見通しを与えるであろう。
*⑤ Vos data facultate vobis consulite."
**諸君は(生き延びる)可能性が与えられているから、諸君(自身)を助けたまえ。」
*Simul in medios hostes inrupit duobusque interfectis reliquos a porta paulum submovit.
**と同時に、敵方の真ん中に押し入って、2名を殺害して、ほかの者たちを城門からいくらか退けた。
*⑥ Conantibus auxiliari suis
**(ペトロニウスは自分の)支援を試みる配下の者たちに、
*"frustra" inquit "meae vitae subvenire conamini, quem iam sanguis viresque deficiunt.
**曰く「もはや血も活力も尽き果てた私の生命を助けることを試みているのは無益だ。
*Proinde abite, dum est facultas, vosque ad legionem recipite."
**ゆえに(生き延びる)可能性がある間に立ち去れ。諸君は軍団のところへ退却せよ。」
*Ita pugnans post paulum<ref>paulum はα系・ρ系写本の記述で、π系写本では paululum となっており、paulo という修正提案もされている。</ref> concidit ac suis saluti fuit.
**こうして(ペトロニウスは)戦って少し後で斃れ、配下の者たちにとっては救いとなった。
===51節===
[[画像:Monument_gergovie_fr.jpg|thumb|right|290px|[[w:ゲルゴウィアの戦い|ゲルゴウィア戦勝]]記念碑。[[w:1903年|1903年]]に[[w:クレルモン=フェラン|クレルモン=フェラン市]]出身の建築家ジャン・テラール([[w:fr:Jean Teillard|Jean Teillard]])が、侵略者カエサルを撃退した郷土の英雄[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]に捧げるためにジェルゴヴィ高地([[w:fr:Plateau_de_Gergovie|Plateau de Gergovie]])に建立したものである。]]
[[画像:Plaque_Napoléon_III_Gergovie.jpg|thumb|right|300px|[[w:ゲルゴウィアの戦い|ゲルゴウィア]]の地に残る銘板。フランス語で「[[w:ナポレオン3世|ナポレオン3世]]は、1862年のゲルゴウィアの[[w:オッピドゥム|城塞都市]](跡)訪問の結果、メルドーニュ(Merdogne)の住民たちの要求に対して、1865年1月11日の政令によって、彼らの村にジェルゴヴィ([[w:fr:Gergovie|Gergovie]])の名を与えることを決定した。」<!-- «A la suite de sa visite sur l'oppidum de Gergovia en 1862, Napoléon III, à la demande des habitants de Merdogne, décida d'attribuer à leur village le nom de Gergovie, par décret du 11 janvier 1865.»-->]]
'''カエサルが一敗地に塗れる'''
*① Nostri cum undique premerentur,
**我が方(ローマ軍)は、至る所で圧倒されたので、
*XLVI(sex et quadraginta)<ref>XLVI はα系写本の記述で、β系写本では sex et XL となっている(どちらも46)。</ref> centurionibus amissis deiecti sunt loco.
**46名の<ruby><rb>[[w:ケントゥリオ|百人隊長]]</rb><rp>(</rp><rt>ケントゥリオ</rt><rp>)</rp></ruby> を失い、(激戦の)場所から追いやられた。
*Sed intolerantius Gallos insequentes
**けれども、容赦なく追撃して来るガッリア人たちを
*legio decima tardavit, quae pro subsidio paulo aequiore loco constiterat.
**予備部隊(もしくは要撃部隊)として、いくらか平らな所に陣取っていた[[w:第10軍団エクェストリス|第10軍団]]が妨げた。
**:<span style="color:#009900;">(訳注:[[#47節|47節]]①項で既述のように、第10軍団はカエサルとともに待機していた。)</span>
*② Hanc rursus XIII(tertiae decimae) legionis cohortes exceperunt,
**これ(=第10軍団)をさらに、第13軍団の諸<ruby><rb>[[w:コホルス|大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>が支えた。
*quae ex castris minoribus eductae cum T.(Tito) Sextio legato ceperant locum<ref>ceperant locum はα系写本の記述で、β系写本では locum ceperant となっている。</ref> superiorem.
**それらは<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>ティトゥス・セクスティウスとともに小さい方の陣営から進発してより高い所を占めていたのだ。
**:<span style="color:#009900;">(訳注:[[#49節|49節]]を参照。)</span>
*③ Legiones ubi primum planitiem attigerunt,
**諸[[w:ローマ軍団|軍団]]は、平野に達するや否や、
*infestis contra hostes signis constiterunt.
**敵方に抗して戦備を整えて陣取った。
*④ [[w:la:Vercingetorix|Vercingetorix]] ab radicibus collis suos intra munitiones reduxit.
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、配下の者たちを丘陵の麓から(ゲルゴウィアの)防備の内側に連れ戻した。
*Eo die milites sunt paulo minus [[wikt:la:Septingenti|septingenti]] desiderati.
**その日、(ローマ軍は)700名よりいくらか少ない兵士を失った。
<br>
:<span style="color:#009900;">(訳注:カエサルとウェルキンゲトリークスは、たびたび交えた騎兵戦ではカエサルが勝っているが、</span>
:<span style="color:#009900;">両軍の主力部隊である歩兵どうしが激突したこの戦闘は、地の利もあって、ウェルキンゲトリークスが完勝した。</span>
:<span style="color:#009900;">カエサルは第8軍団など古参の部隊を投入しながら、歴戦の百人隊長と兵士たちを多く失った。)</span>
===52節===
'''敗軍の将カエサルが兵士たちを責める'''
*① Postero die Caesar contione advocata
**翌日にカエサルは(兵士たちの)集会を召集して、
*temeritatem cupiditatemque militum<ref>cupiditatemque militum はα系写本の記述で、β系写本では militum cupiditatemque となっている。</ref> reprehendit,
**兵士たちの無思慮や功名心をとがめた。
*quod sibi ipsi iudicavissent, quo procedendum aut quid agendum videretur,
**というのは、どこへ進み出るべきか、あるいは何がなされるべきと思われるのか、自分たちに対し自分たちで判断してしまったからだ。
*neque signo recipiendi dato constitissent
**退却することの合図を与えられても留まりもせず、
*neque ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> tribunis militum legatisque retineri potuissent.
**<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>や<ruby><rb>[[w:レガトゥス|総督副官]]たち</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>により制止されることもできなかったからだ。
*② Exposuit quid iniquitas loci posset, quod<ref>quod は写本(ω)では quid となっているが、近世以降の校訂者たちは quod と修正提案している。</ref> ipse ad [[w:la:Avaricum Biturigum|Avaricum]] sensisset,
**地の利のなさがどれほど影響するのか、(カエサル)自身がアウァーリクムで判断したことを説明した。
*cum sine duce et sine equitatu deprehensis hostibus
**将帥もなく騎兵隊もない敵たちを探し当てたときに、
**:<span style="color:#009900;">(訳注:[[#18節|18節]]~[[#19節|19節]]を参照。そのときガッリア勢は、ウェルキンゲトリークスが騎兵隊を連れて出て不在であった。)</span>
*exploratam victoriam dimisisset,
**確実であった勝利を諦めたのだ。
*ne parvum modo detrimentum in contentione propter iniquitatem loci accideret.
**地の利のなさのために、闘いにおいてほんのわずかな損害も生じないように(勝利を諦めたのだ)。
*③ Quanto opere<ref>Quanto opere はα系写本の記述で、β系写本では Quantopere となっている。</ref> eorum animi magnitudinem admiraretur,
**彼ら(兵士たち)の大胆さに(カエサルが)驚嘆すればするほど、
**:<span style="color:#009900;">(訳注:quanto opere ~ tanto opere …/quantopere ~ tantopere …「~すればするほど、ますます…」)</span>
*quos non castrorum munitiones, non altitudo montis, non murus oppidi tardare potuisset,
**彼らのことを(ガッリア勢の)陣営の防備も、山の高さも、[[w:オッピドゥム|城塞都市]]の城壁も妨げることができなかったのではあるが、
*tanto opere<ref>tanto opere はα系・T・ρ系写本の記述で、V写本では tantopere となっている。</ref> licentiam arrogantiamque reprehendere,
**それだけにますます(兵士たちの)勝手気ままさや高慢さを(カエサルは)非難する(と言った)。
*quod plus se quam imperatorem de victoria atque exitu rerum sentire existimarent;
**というのは、自分たちが将軍(カエサル)よりも勝利と事の結末についてよく判断していると考えていたからだ。
*④ nec<ref>nec はα系写本の記述で、β系写本では non となっている。</ref> minus se ab<ref>ab はα系写本の記述で、β系写本では in となっている。</ref> milite modestiam et continentiam quam virtutem atque animi magnitudinem desiderare.
**自分(カエサル)は兵士たちに、武勇や大胆さよりも、慎重さや自制心を望んでいるのだ。
*:<span style="color:#009900;">(訳注:カエサルは兵士たちを上のように責めたが、兵士たちを統制できなかった責任は最高司令官にある。)</span>
===53節===
'''カエサルとローマ軍がゲルゴウィアから撤退'''
*① Hac habita contione et ad extremam orationem confirmatis militibus,
**(カエサルは)このような熱弁を振るって、演説の最後に、兵士たちを元気付けた。
*ne ob hanc causam animo permoverentur
**このような理由のために心をかき乱されないように、
*neu, quod iniquitas loci attulisset, id virtuti hostium tribuerent,
**かつ、地の利のなさが引き起こしたことを、敵方の武勇に転嫁しないように、と。
*eadem de profectione cogitans, quae ante senserat,
**(ゲルゴウィアからの)出発については、以前から判断していたのと同じことを考えていて、
**:<span style="color:#009900;">(訳注:[[#43節|43節]]⑤項を参照。ゲルゴウィアからの撤退が敗走同然に見られないようにと、考えていたのであろう。)</span>
*legiones ex castris eduxit aciemque idoneo loco constituit.
**諸[[w:ローマ軍団|軍団]]を陣営から進発させて、適切な場所に戦列を整えた。
*② Cum [[w:la:Vercingetorix|Vercingetorix]] nihilo minus < intra munitiones remaneret neque > in aequum locum descenderet,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]が、防備の内側に留まったばかりか、平らな場所に降りてこなかったので、
**:<span style="color:#009900;">(訳注:< intra munitiones remaneret neque > は、写本になく、近代に挿入提案された修正案の一つ。)</span>
*levi facto equestri proelio, atque secundo, in castra exercitum reduxit.
**軽微な騎兵戦を行なって、順調のうちに軍隊を陣営に連れ戻した。
*③ Cum hoc idem postero die fecisset,
**翌日もこれと同じことを行なって、
*satis ad Gallicam ostentationem minuendam militumque animos confirmandos factum existimans
**ガッリア人の誇示を弱めること、および(ローマ人)兵士の心を強固にすることが十分になされたと考えたので、
*in [[w:la:Haedui|Haeduos]] movit castra.
**[[w:ハエドゥイ族|ハエドゥイー族]]のところに陣営を移(すために出発)した。
*④ Ne tum quidem insecutis hostibus
**そのとき、敵方は決して追撃して来なかったので、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*tertio die ad flumen [[w:la:Elaver|Elaver]] pontes<ref>pontes はα系写本の記述で、β系写本では pontem となっている。</ref> reficit<ref>reficit はχ系・B・M・L・N写本の記述で、S写本では refecit となっている。</ref> eoque exercitum<ref>eoque exercitum はα系写本の記述で、β系写本では exercitumque となっている。</ref> traducit<ref>traducit はα系写本の記述で、β系写本では traduxit となっている。</ref>.
**3日目にはエラウェル川(=現在の[[w:アリエ川|アリエ川]])のところで橋を再建して、そこで軍隊を渡らせた。
===54節===
'''ハエドゥイー族のエポレドリクスとウィリドマルスらがカエサルのもとから立ち去る'''
*① Ibi a Viridomaro atque [[w:la:Eporedorix|Eporedorige]] [[w:la:Haedui|Haeduis]] appellatus discit
**そこで(カエサルが)[[w:ハエドゥイ族|ハエドゥイー族]]の[[w:ウィリドマルス|ウィリドマルス]]と[[w:エポレドリクス|エポレドリクス]]から話しかけられて知ったことには、
**:<span style="color:#009900;">(訳注:[[#39節|39節]]~[[#40節|40節]]を参照。ウィリドマルスとエポレドリクスはカエサルの軍勢に従軍していたと思われる。)</span>
*cum omni equitatu Litaviccum ad sollicitandos Haeduos profectum;
**[[w:リタウィックス|リタウィックス]]がすべての騎兵隊とともに、ハエドゥイー族の者たちをそそのかすために出発したという。
**:<span style="color:#009900;">(訳注:[[#40節|40節]]を参照。リタウィックスは謀計が破れたので、ゲルゴウィアに逃れていた。)</span>
*opus esse ipsos antecedere ad confirmandam civitatem.
**部族の支持を固めるために、(彼ら)自身が(リタウィックスより)先行することが必須であるというのだ。
*② Etsi multis iam rebus perfidiam Haeduorum<ref>perfidiam Haeduorum はα系写本の記述で、β系写本では Haeduorum perfidiam となっている。</ref> Caesar<ref>Caesar はβ系写本の記述で、α系写本にはない。</ref> perspectam habebat
**カエサルは、すでに多くの事により、ハエドゥイー族の背信行為を目にして来ており、
**:<span style="color:#009900;">(訳注:Etsi ~, tamen …「~としても、しかしながら…」)</span>
*atque horum discessu admaturari defectionem civitatis existimabat,
**この者たちが(カエサルのもとから)立ち去ることで、(ハエドゥイー)部族の背反が一層促進されると考えていたのだが、
*tamen eos retinendos non censuit<ref>censuit はπ系写本の記述で、α系・ρ系写本では constituit となっている。</ref>,
**しかしながら、彼ら(2人)を束縛するべきではないと考慮した。
*ne aut inferre iniuriam videretur aut dare<ref>dare はα系写本の記述で、β系写本では daret となっている。</ref> timoris aliquam<ref>timoris aliquam はα系写本の記述で、β系写本では aliquam timoris となっている。</ref> suspicionem.
**(カエサルが)無法行為を起こすと思われないように、あるいは(彼らを)怖れているという何らかの疑念を与えないように。
*③ Discedentibus his breviter sua in Haeduos merita exposuit,
**(カエサルは)立ち去る彼らに、ハエドゥイー族における自分の功績を手短に説明した。
*quos et quam humiles accepisset, compulsos in oppida, multatos agris,
**彼らが、どれほど無力であったのを引き受けたことか、[[w:オッピドゥム|城塞都市]]に押し込められ、耕地を台無しにされて、
**:<span style="color:#009900;">(訳注:et ~, et …「~でもあり、…でもある。」)</span>
*omnibus ereptis sociis<ref>sociis「同盟者たち」 はβ系写本の記述で、α系写本では copiis「軍勢」となっている。</ref>, imposito stipendio, obsidibus summa cum contumelia extortis,
**すべての同盟者たちを奪い取られ、貢物を課せられて、たいへんな侮辱とともに人質をもぎ取られていたことか。
*④ et quam in fortunam quamque in amplitudinem deduxisset,
**かつ、どれほどの境遇に、どれほどの高位に(カエサルが)引き上げもしたことか。
*ut non solum in pristinum statum redissent,
**その結果(ハエドゥイー族は)かつての地位に戻っただけでなく、
*sed omnium temporum dignitatem et gratiam antecessisse viderentur.
**(以前の)あらゆる時期の品格や信望をも越えていると思われる。
*His datis mandatis eos ab se dimisit.
**このような訓示を与えて、彼ら(2人)を自分のもとから送り出した。
===55節===
'''エポレドリクスとウィリドマルスらがローマの拠点ノウィオドゥーヌムで寝返る'''
[[画像:Nevers_-_Vue_depuis_la_rive_sud_de_la_Loire.jpg|thumb|center|700px|ノウィオドゥーヌム([[w:la:Nivernum|Noviodunum]])=現・[[w:ヌヴェール|ヌヴェール]]([[w:fr:Nevers|Nevers]])における、リゲル川([[w:la:Liger|Liger]])=現・[[w:ロワール川|ロワール川]]([[w:fr:Loire (fleuve)|Loire]])の岸辺の景観]]
*① [[w:la:Nivernum|Noviodunum]] erat oppidum [[w:la:Haedui|Haeduorum]] ad ripas [[w:la:Liger|Ligeris]] opportuno loco positum.
**ノウィオドゥーヌムは、[[w:ハエドゥイ族|ハエドゥイー族]]の[[w:オッピドゥム|城塞都市]]で、リゲル川(現[[w:ロワール川|ロワール川]])岸の好都合な所に位置していた。
**:<span style="color:#009900;">(訳注:『ガリア戦記』には同名の都市が計3か所載っているが、こちらは現在の[[w:ヌヴェール|ヌヴェール]] Nevers である。<br> 「[[ガリア戦記/ガリア語の名前#Nouio-dūnon|ガリア語の名前 #Nouio-dūnon]]」を参照せよ。)</span>
*② Huc Caesar omnes obsides Galliae, frumentum, pecuniam publicam,
**ここに、カエサルは、ガッリアのすべての人質たちや、糧食、公金、
*suorum atque exercitus impedimentorum magnam partem contulerat;
**および自分と軍隊の[[w:輜重|輜重]]の大部分を運び集めていた。
*③ huc magnum numerum equorum huius belli causa in [[w:la:Italia|Italia]] atque [[w:la:Hispania|Hispania]] coemptum miserat.
**ここに、この戦争のためにイタリアと[[w:ヒスパニア|ヒスパニア]]から買い集めた馬匹の多数を送っておいた。
*④ Eo cum [[w:la:Eporedorix|Eporedorix]] Viridomarusque venissent et de statu civitatis cognovissent,
**そこに、[[w:エポレドリクス|エポレドリクス]]と[[w:ウィリドマルス|ウィリドマルス]]がやって来て、(以下のような)部族の情勢について察知したときに、
[[画像:Bibracte333_crop.JPG|thumb|right|400px|[[w:ビブラクテ|ビブラクテ]]の[[w:オッピドゥム|城塞都市]]跡に整備された城壁の遺構]]
*Litaviccum [[w:la:Bibracte|Bibracti]] ab Haeduis receptum,
**(すなわち)リタウィックスが、ハエドゥイー族の者たちによって[[w:ビブラクテ|ビブラクテ]]に迎え入れられ、
*─ quod est oppidum apud eos maximae auctoritatis ─,
**それ(ビブラクテ)は彼ら(ハエドゥイー族)のもとで最大の影響力を持つ城塞都市であるが、
*Convictolitavem<ref>Convictolitavem はβ系・N写本の記述で、χ系・B・M・S・L写本では Convictolitabim となっている。</ref> magistratum magnamque partem senatus ad eum convenisse,
**統領コンウィクトリタウィスと評議会の大半の者たちが彼(リタウィックス)のもとへ参集し、
*legatos ad [[w:la:Vercingetorix|Vercingetorigem]] de pace et<ref>et は α系・U写本の記述で、π系・R写本では et de となっている。</ref> amicitia concilianda publice missos,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]のところへ和平と友好を仲介するべく公けに使節たちが遣わされた(ことを知った)ので、
*non praetermittendum instans<ref>instans はβ系写本の記述で、α系写本にはない。</ref> tantum commodum existimaverunt.
**(エポレドリクスとウィリドマルスは)眼前にあるこれほどの好機を放置するべきではないと考えたのだ。
*⑤ Itaque interfectis Novioduni custodibus quique eo negotiandi aut itineris<ref>aut itineris はβ系写本の記述で、α系写本にはない。</ref> causa convenerant,
**こうして(2人は)ノウィオドゥーヌムの(ローマ側の)番兵たちや商用や旅行のために来訪していた者たちを殺害し、
*pecuniam atque equos inter se partiti sunt;
**金銭および馬匹を互いに分け合った。
*⑥ obsides civitatum Bibracte ad magistratum deducendos curaverunt;
**(ガッリアの)部族の人質たちをビブラクテの統領のところへ連れて行くように手配した。
*⑦ oppidum, quod a<ref>a はα系写本の記述で、β系写本では ab となっている。</ref> se teneri non posse iudicabant,
**(ノウィオドゥーヌムの)城塞都市は、自分たちによって固守することはできないと判断したので、
*ne cui esset usui Romanis, incenderunt;
**ローマ人たちの有益になることがないように、焼き打ちした。
*⑧ frumenti quod subito potuerunt navibus avexerunt,
**糧食のうち、急いで(運ぶことが)できるものを船団で運び去って、
*reliquum flumine atque incendio corruperunt.
**残りのものを川(に流すこと)により、および焼き打ちにより、役立たないようにした。
*⑨ Ipsi ex finitimis regionibus copias cogere,
**(彼ら)自身は、近隣の地方から軍勢を徴集して、
*praesidia custodiasque ad ripas Ligeris disponere
**リゲルの川岸のたもとへ守備隊や番兵を分配して、
*equitatumque omnibus locis iniciendi timoris causa ostentare coeperunt,
**(ローマ人に)恐怖(の感情)を起こさせるために、[[w:騎兵|騎兵隊]]に誇示をさせ始めた。
*si ab re frumentaria Romanos excludere
**もし、ローマ人たちが糧食調達することを阻止するなら、
*† aut adductos inopia in provincia<ref>in provincia は、α系写本では ex provincia「属州から」、β系写本では provincia となっているが、コンスタン Constans やクロッツ A.Klotz らにより in provincia「属州に」と修正提案されている。</ref> expellere<ref>expellere「駆逐する」 はα系写本の記述で、β系写本では excludere「阻止する、妨げる」 となっている。</ref> † possent.
**あるいは(糧食などの)欠乏により、属州に駆逐することができるなら、と。
**:<span style="color:#009900;">(訳注:† ~ † は、写本の文章が崩れて校訂者を迷わせていることを表す記号。修正提案されている。)</span>
*⑩ Quam ad spem multum eos adiuvabat,
**そのような希望へ、彼らを大いに励まし助けたのは、
*quod Liger ex nivibus creverat,
**リゲル川(の水位)が雪水により増したことで、
*ut omnino vado non posse transiri videretur.
**すべての浅瀬が渡らせられることができないと思われたのである。
===56節===
'''カエサルが属州へは戻らず、増水したリゲル川の渡河を敢行'''
*① Quibus rebus cognitis Caesar maturandum sibi censuit,
**それらの事態を知ると、カエサルは自らにとって(以下のことを)急ぐべきだと考慮した。
*si esset in perficiendis pontibus periclitandum,
**もし、橋を造り上げる最中に(敵勢と闘うという)危険を冒すのであれば、
*ut prius, quam essent maiores eo coactae copiae, dimicaret.
**そこに(敵方の)より多くの軍勢が集結するよりも早く闘うように(急ぐべきだと)。
*② Nam ut commutato consilio iter in provinciam converteret,
**なぜなら、作戦を変更して、属州([[w:ガリア・ナルボネンシス|ガッリア・トラーンサルピーナ]])に進路を方向転換するようにと、
*ne metu quidem<ref>ne metu quidem はα系写本の記述で、β系写本では nemo tunc quidem 、そのほか近代の校訂者によって修正提案が行なわれている。</ref> necessario faciendum<ref>faciendum はβ系写本の記述で、α系写本では faciundum となっている。</ref> existimabat;
**(ガッリア勢への)怖れによって行なうことは決して必要ではない、と考えたのだ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*cum infamia atque indignitas rei
**(属州に撤退するという)事の不名誉や恥辱が、
**:<span style="color:#009900;">(訳注:cum ~ tum …「~であるのと同様に特に…である」)</span>
*et oppositus mons Cevenna<ref>Cevenna はχ系・U写本の記述で、π系・R写本の記述では Cebenna、φ系写本では Cevennae となっている。</ref> viarumque difficultas impediebat,
**およびケウェンナ山地が相対して道の(通行の)困難なことが、(属州への撤退を)妨げていたし、
**:<span style="color:#009900;">(訳注:ケウェンナ山地 mons Cevenna は現在のセヴェンヌ山地。[[#8節|8節]]を参照。)</span>
*tum maxime quod abiuncto [[w:la:Titus_Labienus|Labieno]] atque iis legionibus, quas una miserat, vehementer timebat.
**同様に、とりわけ[[w:ティトゥス・ラビエヌス|ラビエーヌス]]と一緒に派遣していた諸[[w:ローマ軍団|軍団]]から遠ざけられて、非常に心配してもいたのだ。
*③ Itaque admodum magnis diurnis nocturnisque itineribus confectis
**こうして、昼間も夜間も非常な強行軍を成し遂げて、
*contra omnium opinionem ad [[w:la:Liger|Ligerem]]<ref>Ligerem はα系写本の記述で、β系写本では Ligerim となっている。</ref> venit
**皆の予想に反して、リゲル川(=現[[w:ロワール川|ロワール川]])の辺りにやって来た。
*④ vadoque per equites invento pro rei necessitate opportuno,
**事態の緊急性に見合う好都合な浅瀬を、[[w:騎兵|騎兵]]たちを通じて見出して、
*ut brachia modo atque humeri<ref>humeri はA・φ系・ρ系写本の記述で、Q写本では umeri となっている。</ref> ad sustinenda arma liberi ab aqua esse possent,
**やっと腕と肩を、武器を差し上げるために、水から自由になることができた。
*disposito equitatu, qui vim fluminis refringeret,
**川の流れの圧力を妨げるべく、騎兵隊を分けて置いて、
*atque hostibus primo aspectu perturbatis,
**敵方は(ローマ勢を)初めに一見するや狼狽していたので、
*⑤ incolumem exercitum traduxit
**(カエサルは)軍隊を無傷のまま渡河させた。
*frumentumque in agris et pecoris copiam nactus
**耕地の穀物、および大量の家畜を獲得して、
*repleto his rebus exercitu
**これらの物を軍隊に補充して、
*iter in Senones facere instituit.
**セノネース族のところに行軍することを決めた。
**:<span style="color:#009900;">(訳注:セノネース族の方面には、副官ラビエーヌスと4個軍団を派遣していた。)</span>
==ラビエーヌスのルテティア遠征==
===57節===
'''副官ラビエーヌスがルテティア制圧に向かう'''
*① Dum haec apud Caesarem geruntur,
**これらがカエサルのもとで遂行されている間に、
*[[w:la:Titus Labienus|Labienus]] eo supplemento, quod nuper ex Italia venerat,
**[[w:ティトゥス・ラビエヌス|ラビエーヌス]]は、最近イタリアから来ていた補充兵(予備兵)を
**:<span style="color:#009900;">(訳注:[[#34節|34節]]で既述のようにラビエーヌスはカエサルから4個軍団とともにガッリア北部の制圧を委ねられていた。</span>
**:<span style="color:#009900;">また、[[#1節|1節]]で既述のようにカエサルはイタリア(属州[[w:ガリア・キサルピナ|ガッリア・キサルピーナ]])で部隊を徴兵していた。)</span>
*relicto [[w:la:Agedincum|Agedinci]], ut esset impedimentis praesidio,
**アゲディンクムに、[[w:輜重|輜重]]にとっての守備隊となるように、残留させて、
**:<span style="color:#009900;">(訳注:[[#10節|10節]]で既述のように、カエサルはアゲディンクム(現在の[[w:サンス|サンス]])に全軍の輜重を残していた。)</span>
*cum quattuor legionibus Luteciam<ref>Luteciam はα系写本の記述で、π系写本では Luceciam 、ρ系写本では Lucetiam となっている。[[ガリア戦記 第6巻#3節|第6巻3節]]では Lutetia(m) とも綴られている。</ref> proficiscitur.
**4個軍団とともに[[w:ルテティア|ルテティア]]に出発した。
**:<span style="color:#009900;">(訳注:ルテティア Lutetia は写本ではルテキア Lutetia とも綴られる。[[ガリア戦記 第6巻#3節|第6巻3節]]を参照。)</span>
*Id est oppidum Parisiorum, quod positum est<ref>quod positum est はα系写本の記述で、β系写本では単に positum となっている。</ref> in insula fluminis [[w:la:Sequana|Sequanae]].
**それ(ルテティア)は[[w:パリシイ族|パリスィイ族]]の<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>で、セクアナ川(=現[[w:セーヌ川|セーヌ川]])の中洲に位置している。
*② Cuius adventu ab hostibus cognito
**彼(ラビエーヌス)の到来が敵方により知られると、
*magnae ex finitimis civitatibus copiae convenerunt.
**近隣の諸部族から大軍勢が集結していた。
*③ Summa imperii traditur Camulogeno Aulerco,
**(北部ガッリア勢の)最高司令権は、[[w:アウレルキ族|アウレルキ族]]の[[w:カムロゲヌス|カムロゲヌス]]に託された。
*qui prope confectus aetate
**その者はかなり年老いていたが、
*tamen propter singularem scientiam rei militaris ad eum est honorem evocatus.
**けれども、彼の卓越した軍事の知識のために、顕職に召集されたのだ。
*④ Is cum animadvertisset perpetuam esse paludem,
**彼(カムロゲヌス)は、沼地が絶え間なくあることに気付いていたので、
*quae influeret in Sequanam atque illum omnem locum magnopere impediret,
**それはセクアナ(川)に流れ込み、かの一帯すべてを大いに近付きにくくしていたので、
*hic consedit nostrosque transitu prohibere instituit.
**ここに陣取って、我が方(ローマ勢)が渡河するのを妨げることに決めた。
===58節===
'''ラビエーヌスがメトロセドゥムを陥落させ、ルテティアのガッリア勢と対峙'''
*① [[w:la:Titus Labienus|Labienus]] primo vineas agere, cratibus atque aggere paludem explere
**[[w:ティトゥス・ラビエヌス|ラビエーヌス]]は初めに、<ruby><rb>[[w:ウィネア|工作小屋]]</rb><rp>(</rp><rt>ウィネア</rt><rp>)</rp></ruby>を駆ること、柴や土砂で沼地を埋め立てること、
*atque iter munire conabatur.
**および道を築くこと、を試みた。
*② Postquam id difficilius confieri<ref>confieri はχ系・β系写本の記述で、Q写本では confici となっている。</ref> animadvertit,
**それが成し遂げられることが困難だと気付いた後で、
*silentio e castris tertia vigilia egressus
**(敵に知られないように)静けさのうちに第三夜警時に陣営から進発して、
*eodem, quo venerat, itinere Metlosedum<ref>Metlosedum はコンスタン L.-A. Constans による修正で、π系・U写本では Metiosedum 、α系・ρ系写本では Mellodunum などとなっており、写本により表記がさまざまである。</ref> pervenit.
**やって来たのと同じ道程により、メトロセドゥムに到達した。
**:<span style="color:#009900;">(訳注:メトロセドゥム Metlosedum は、写本によりメティオセドゥム Metiosedum とも綴られ、</span>
**:<span style="color:#009900;">後にはメロドゥーヌム [[w:la:Melodunum|Melodunum]] として知られる。現在の[[w:ムラン|ムラン]] [[w:fr:Melun|Melun]] である。)</span>
*③ Id est oppidum [[w:la:Senones|Senonum]] in insula [[w:la:Sequana|Sequanae]] positum, ut paulo ante de [[w:la:Lutetia|Lutecia]] diximus.
**それはセノネース族の城塞都市で、少し前に[[w:ルテティア|ルテティア]]について述べたように、セクアナ川の[[w:中州|中州]]に位置している。
**:<span style="color:#009900;">(訳注:ルテティアすなわち現在の[[w:パリ|パリ]]の中心部に[[w:シテ島|シテ島]]や[[w:サン=ルイ島|サン=ルイ島]]という[[w:セーヌ川|セーヌ川]]の中州があるように、</span>
**:<span style="color:#009900;">現在のムランの中心部にもサン=テティエンヌ島 [[w:fr:Île Saint-Étienne|Île Saint-Étienne]] というセーヌ川の中州がある。)</span>
*④ Deprensis<ref>deprensis という語形はα系写本の記述で、β系写本では deprehensis となっている。</ref> navibus circiter quinquaginta celeriterque coniunctis
**約50隻の船を探し出して、速やかに結び合わせて(舟橋として)、
*atque eo militibus iniectis
**そこに兵士たちを投入して、
*et rei novitate perterritis oppidanis,
**事の新奇さに<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の者たちは脅えて、
*quorum magna pars erat ad bellum evocata,
**彼ら(住民)の大部分は戦争へ徴集されていた(ため不在であった)ので、
*sine contentione oppido potitur.
**(ラビエーヌスは)闘うことなしに(中州にあるメトロセドゥムの)城塞都市を掌握した。
*⑤ Refecto ponte, quem superioribus diebus hostes resciderant, exercitum traducit
**それ以前の日々に敵方が破却していた橋を再建して、軍隊を(中州から対岸へ)渡らせて、
*et secundo flumine ad Luteciam iter facere coepit.
**川に沿ってルテティアの方へ行軍を始めた。
*⑥ Hostes re cognita ab iis, qui Metlosedo<ref>Metlosedo はコンスタン L.-A. Constans による修正で、β系・S写本では Metiosedo 、χ系写本では Melloduno 、B・M・L・N写本では Ametlodone(あるいは Ametclodone)などとなっている。</ref> fugerant,
**敵方は、メトロセドゥムから逃げて来た者たちから事態を知って、
*Luteciam incendi pontesque eius oppidi rescindi iubent;
**ルテティアを焼打ちすること、その城塞都市の橋を破却すること、を命じた。
*ipsi profecti a palude ad ripas<ref>ad ripas はχ系・B・M・L・N写本の記述で、S・Vおよびρ系写本では in ripas 、T写本では in ripa となっている。</ref> Sequanae
**彼ら自身は、沼地からセクアナの川岸へ出発して、
*e regione Luteciae contra Labieni castra considunt.
**ルテティア(の対岸)に向かってラビエーヌスの陣営に対抗して陣取った。
===59節===
'''ガッリア諸部族が迫り、ラビエーヌスが作戦変更を決断'''
*① Iam Caesar a [[w:la:Gergovia|Gergovia]] discessisse audiebatur,
**すでに、カエサルが[[w:ゲルゴウィア|ゲルゴウィア]]から撤退したことが聞かれていたし、
*iam de [[w:la:Haedui|Haeduorum]] defectione et secundo Galliae motu rumores adferebantur,
**もはや、[[w:ハエドゥイ族|ハエドゥイー族]]の背反や、ガッリアの動乱の順調さについての噂がもたらされていた。
*Gallique in conloquiis
**(当地の)ガッリア人たちは会話の中で、
*interclusum itinere et [[w:la:Liger|Ligeri]] Caesarem inopia frumenti coactum in provinciam contendisse confirmabant.
**カエサルが行軍やリゲル(渡河)を遮られて、糧食の欠乏により属州([[w:ガリア・ナルボネンシス|ガッリア・トラーンサルピーナ]])に急ぐことを強いられた、と確言した。
*② Bellovaci autem defectione Haeduorum cognita,
**一方で、ベッロウァキ族もハエドゥイー族の背反を知って、
**:<span style="color:#009900;">(訳注:ベッロウァキ族は、ハエドゥイー族の仲介によりカエサルに降伏していた。[[ガリア戦記 第2巻#14節|第2巻14節]]~15節を参照。)</span>
*qui iam<ref>qui iam は古典学者 ニコラエス・ハインシウス1世 [[w:en:Nikolaes_Heinsius_the_Elder|Nikolaes Heinsius the Elder]] による修正提案で、χ系・S・β系写本では qui 、B・M・L・N写本では quia となっている。</ref> ante erant per se infideles,
**彼ら自身もすでに以前から(カエサルやローマ人に)忠誠的でなかったが、
*manus cogere atque aperte bellum parare coeperunt.
**手勢を徴集して、公けに戦争を準備することを始めた。
*③ Tum [[w:la:Titus Labienus|Labienus]] tanta rerum commutatione
**そこで、[[w:ティトゥス・ラビエヌス|ラビエーヌス]]はこれほどの事態の変動により、
*longe aliud sibi capiendum consilium, atque antea senserat, intellegebat,
**自分にとって、以前に判断していたのとはまったく別の作戦が立てられるべきだ、と考えた。
**:<span style="color:#009900;">(訳注:aliud ~ atque …「…とは別の~」)</span>
*④ neque iam, ut aliquid adquireret proelioque hostes lacesseret,
**もはや、何らかのものを獲得したり、敵方に戦闘を挑むようにではなく、
**:<span style="color:#009900;">(訳注:neque ut ~, sed ut …「~ようにではなく、…ように」)</span>
*sed ut incolumem exercitum Agedincum reduceret, cogitabat.
**軍隊を無傷のままでアゲディンクム(=現[[w:サンス|サンス]])に連れ戻すように、と考えた。
**:<span style="color:#009900;">(訳注:アゲディンクムには輜重と守備隊が残されていた。[[#10節|10節]]・[[#57節|57節]]を参照。)</span>
*⑤ Namque altera ex parte Bellovaci,
**実際、一方の側からはベッロウァキ族が、
*quae civitas in Gallia maximam habet opinionem virtutis, instabant,
**ガッリアにおいて武勇に最大の評判を持つその部族が、迫りつつあった。
*alteram Camulogenus parato atque instructo exercitu tenebat:
**他方からは、カムロゲヌスが軍隊を準備し、整列させて、進んでいた。
*tum legiones a praesidio atque impedimentis interclusas
**そのとき、(ラビエーヌス麾下の)諸軍団は(アゲディンクムにいる)守備隊や輜重から遮られて、
*maximum flumen distinebat.
**とても大きな(セクアナ)川が阻んでいた。
*⑥ Tantis subito difficultatibus obiectis
**突然に、これほどの困難が投げ出されたので、
*ab animi virtute auxilium petendum videbat.
**武勇の心構えに救いを求めるべきだと(ラビエーヌスは)思った。
===60節===
'''ラビエーヌスが陽動戦術に努める'''
*① Itaque<ref>Itaque はS・β系写本の記述で、α系写本にはない。</ref> sub vesperum consilio convocato
**こうして([[w:ティトゥス・ラビエヌス|ラビエーヌス]]は)夕方に会議を召集して、
*cohortatus, ut ea, quae imperasset, diligenter industrieque administrarent,
**(彼が)命令したことを入念かつ勤勉に従事するように鼓舞した。
*naves, quas [[w:la:Melodunum|Metlosedo]]<ref>Metlosedo はコンスタン L.-A. Constans による修正で、χ系・S・β系写本では Metiosedo 、B・M写本では ameclodone 、L・N写本では a mellodone 、<i>etc</i>. となっている。</ref> deduxerat, singulas equitibus Romanis attribuit,
**[[w:ムラン|メトロセドゥム]]から引いて来ていた船団を、ローマ人騎士たち1人ずつに配分して、
*et prima confecta vigilia IIII(quattuor) milia passuum secundo flumine silentio progredi
**第一夜警時が終わる頃に、4ローママイル(6km弱)下流に静けさのうちに進発すること、
*ibique se exspectari<ref>exspectari はα系・T・ρ系写本の記述で、S・V写本では exspectare などとなっている。</ref> iubet.
**かつ、そこで自分(ラビエーヌス)を待つことを命じた。
*② Quinque cohortes, quas minime firmas ad dimicandum esse existimabat,
**(白兵戦を)闘うためにはあまり強くないと(ラビエーヌスが)考えていた5個<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>
*castris praesidio relinquit;
**陣営にとっての守備隊として残留させた。
*quinque eiusdem legionis reliquas
**同じ軍団の残りの5個(歩兵大隊)を
*de media nocte cum omnibus impedimentis adverso flumine magno tumultu proficisci imperat.
**真夜中から、すべての[[w:輜重|輜重]]とともに、上流の方に大きな喧騒でもって出発することを命令した。
*④ Conquirit etiam lintres;
**小舟さえも探し集めて、
*has magno sonitu remorum incitatas in eandem partem mittit.
**これらを大きな音とともに[[w:櫂|櫂]]を駆って、同じ方面に派遣した。
*Ipse post paulo silentio egressus cum tribus legionibus
**(ラビエーヌス)自身は、少し後で静けさのうちに3個[[w:ローマ軍団|軍団]]とともに進発して、
*eum locum petit, quo naves appelli iusserat.
**船団が停められることを命じていた地点へ行った。
===61節===
'''ラビエーヌスの陽動により、敵将カムロゲヌスが兵力を分散'''
*① Eo cum esset ventum,
**(ラビエーヌスの軍勢が)そこにやって来たときに、
*exploratores hostium, ut omni fluminis parte erant dispositi,
**敵方の偵察者たちが(セクアナ)川の至る所に分けて置かれていたが、
*inopinantes, quod magna subito erat coorta tempestas,
**突然に大きな嵐が生じたので(ローマ勢の襲撃を)予期していなかった者たちは、
*ab<ref>ab はχ系・B・M・L・N写本の記述で、S・β系写本では a となっている。</ref> nostris opprimuntur;
**我が方(ローマ勢)によって不意を襲われたのだ。
*② exercitus equitatusque equitibus Romanis administrantibus, quos ei negotio praefecerat,
**歩兵隊と騎兵隊が、(ラビエーヌスが)任務を指揮させていたローマ人騎士たちの指導により、
*celeriter transmittitur.
**速やかに(セクアナ川を)渡らせられた。
*③ Uno fere tempore sub lucem hostibus nuntiatur
**夜明け前のほぼ一時に(以下のことが)敵方に報知された。
*in castris Romanorum praeter consuetudinem tumultuari
**ローマ人の陣営において、通例に反して、騒がれていること、
*et magnum ire agmen adverso flumine
**大きな隊列が上流の方へ行軍していること、
*sonitumque remorum in eadem parte exaudiri
**(船を漕ぐ)櫂の音が同じ方面で聞き取られたこと、
*et paulo infra milites navibus transportari.
**少し下流で兵士たちが船で(セクアナ川を)渡されたこと、である。
*④ Quibus rebus auditis,
**それらの事態が聞かれて、
*quod existimabant tribus locis transire legiones atque omnes perturbatos defectione [[w:la:Haedui|Haeduorum]] fugam parare,
**(ローマ勢の)諸軍団が3か所で渡河したこと、[[w:ハエドゥイ族|ハエドゥイー族]]の背反により総勢が取り乱して逃亡を準備していること、を考えたので、
*suas quoque copias in tres partes distribuerunt.
**自分たちの軍勢をも3方面に分配した。
*⑤ Nam praesidio e regione castrorum relicto
**すなわち(一隊がローマ勢の)陣営の真向かいに守備隊として残され、
*et parva manu Metlosedum<ref>Metlosedum はQ写本の記述で、χ系・β系写本では Metiosedum 、などとなっている。</ref> versus missa,
**(別の)わずかな手勢が[[w:ムラン|メトロセドゥム]]の方面へ派遣され、
*quae tantum progrediatur<ref>progrediatur はα系写本の記述で、Q・S・β系写本では progrederetur となっている。</ref>, quantum naves processissent,
**(ローマ勢の)船団が進み出るだけ、(ガッリア兵も)前進するようにした。
*reliquas copias contra Labienum duxerunt.
**残りを軍勢をラビエーヌスに対して(カムロゲヌス自身が)率いて行った。
===62節===
'''ラビエーヌスがカムロゲヌス麾下のガッリア勢を各個撃破して、カエサルと合流'''
*① Prima luce et nostri omnes erant transportati
**夜明けに、我が方(ローマ勢)は総勢が(セクアナ川の左岸に)渡されていたし、
*et hostium acies cernebatur.
**敵方の戦列も見分けられた。
*② [[w:la:Titus Labienus|Labienus]] milites cohortatus,
**[[w:ティトゥス・ラビエヌス|ラビエーヌス]]は兵士たちを(以下のように)鼓舞した。
*ut suae pristinae virtutis et tot<ref>tot はS・β系写本の記述で、α系写本にはない。</ref> secundissimorum proeliorum retinerent memoriam<ref>retinerent memoriam はχ系・B・M・L・N写本の記述で、S・β系写本では memoriam retinerent となっている。</ref>
**自分たちのかつての武勇とこのようにとてもうまくいっている諸戦闘を記憶に留めるように、
*atque ipsum Caesarem, cuius ductu saepe numero hostes superassent, praesentem adesse existimarent,
**かつ、その指揮によって何度もしばしば敵方を打ち破って来たカエサル当人が目下居合わせていると考えるように、と。
*dat signum proelii.
**(それから)戦闘の号令を発した。
*③ Primo concursu ab dextro cornu, ubi septima legio constiterat,
**最初の激突は、[[w:第7軍団クラウディア・ピア・フィデリス|第7軍団]]が布陣していた(ローマ軍の)右翼からで、
*hostes pelluntur atque in fugam coniciuntur;
**敵方は撃退されて、逃亡に追いやられた。
*④ ab sinistro, quem locum duodecima legio tenebat,
**第12軍団が場所を占めていた左翼からは、
*cum primi ordines hostium transfixi pilis<ref>pilis はβ系写本の記述で、α系写本では telis となっている。</ref> concidissent,
**敵方の最前列(の兵たち)が投げ槍で突き通されて斃れたのだが、
*tamen acerrime reliqui resistebant
**けれども残りの者たちがとても激烈に抵抗していて、
*nec dabat suspicionem fugae quisquam.
**誰も逃亡の予兆を示さなかった。
*⑤ Ipse dux hostium Camulogenus suis aderat atque eos cohortabatur.
**敵方の将帥カムロゲヌス自身は、麾下の者たちに居合わせて、彼らを激励していた。
*⑥ At<ref>cohortabatur. At はχ系写本などの記述で、別の写本では記述が異なる。</ref> incerto nunc etiam<ref>nunc etiam はB・M・L・N写本の記述で、χ系・S・β系写本では etiamnunc となっている。</ref> exitu victoriae,
**勝敗の帰趨は今もなお不確実だったが、
*cum septimae legionis tribunis esset nuntiatum, quae in sinistro cornu gererentur,
**第7軍団の<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>たちに、左翼で<ruby><rb>出来</rb><rp>(</rp><rt>しゅったい</rt><rp>)</rp></ruby>したことが報告されたときに、
*post tergum hostium legionem ostenderunt signaque intulerunt.
**敵方の背後に(第7)軍団を差し向けて、軍旗を進めた(=進撃した)。
*⑦ Ne eo quidem tempore quisquam loco cessit,
**その時でさえ、(ガッリア勢の)誰も(戦闘の)場から退却しなかった
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*sed circumventi omnes interfectique sunt.
**けれども、総勢が包囲されて(ローマ軍により)殺戮された。
*Eandem fortunam tulit Camulogenus.
**同じ不幸をカムロゲヌスも蒙った。
*⑧ At ii<ref>ii はχ系写本の記述で、他の写本では記述が異なる。</ref>, qui praesidio contra castra Labieni erant relicti,
**これに対して、ラビエーヌスの陣営に対して守備隊として残されていた(ガッリア勢の)者たちは、
*cum proelium commissum audissent, subsidio suis ierunt collemque ceperunt,
**(両軍が)戦闘を交えているのを聞き付けたので、味方の援兵として出て行って、丘陵を占めていたが、
*neque nostrorum militum victorum impetum sustinere potuerunt.
**勝勢の我が方(ローマ軍)の兵士たちの突撃を持ちこたえることができなかった。
*⑨ Sic cum suis fugientibus permixti,
**このようにして、敗走している味方と混じり合ったときに、
*quos non silvae montesque texerunt, ab equitatu sunt interfecti.
**森林や山岳が覆い隠すことのなかったその者たちは、(ローマ側の)騎兵隊によって殺戮された。
*⑩ Hoc negotio confecto Labienus revertitur Agedincum,
**この戦役が成し遂げられると、ラビエーヌスは[[w:サンス|アゲディンクム]]に引き返した。
*ubi impedimenta totius exercitus relicta erant;
**そこには軍隊全体の[[w:輜重|輜重]]が残されていたのだ。
*inde die Ⅲ.<ref>inde die Ⅲ. は近代の校訂者による修正提案で、Q・M・S・N・β系写本では単に inde 、他の写本では別の記述になっている。</ref> cum omnibus copiis ad Caesarem pervenit.
**そこから3日目(=2日後)にすべての軍勢とともにカエサルのところへ到着した。
==ガッリア戦乱の拡大==
===63節===
'''ハエドゥイー族がウェルキンゲトリークスに主導権争いを挑む'''
*① Defectione [[w:la:Haedui|Haeduorum]] cognita bellum augetur.
**[[w:ハエドゥイ族|ハエドゥイー族]]の背反が知られて、戦乱は拡大された。
*② Legationes in omnes partes circummittuntur;
**(ハエドゥイー族らにより)使節たちがあらゆる方面に遣わされまくり、
*quantum gratia, auctoritate, pecunia valent, ad sollicitandas civitates nituntur;
**信望、勢力や金銭によってできる限り、諸部族をそそのかすことに努めた。
**:<span style="color:#009900;">(訳注:quantum ~ valere「~によってできる限り」)</span>
*③ nacti obsides, quos Caesar apud eos deposuerat,
**カエサルが彼ら(ハエドゥイー族)のもとに預けて置いた人質たちを手に入れて、
*horum supplicio dubitantes territant.
**彼ら(人質たち)の処刑(を示唆すること)によって、決心がつかぬ者たちを恐れさせた。
*④ Petunt a [[w:la:Vercingetorix|Vercingetorige]] Haedui, ut ad se veniat rationesque belli gerendi communicet;
**ハエドゥイー族は、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]に、自分たちのところへ来て戦争遂行の戦略を協議するように要求した。
*re impetrata contendunt, ut ipsis summa imperii tradatur.
**その事が成し遂げられると、(ハエドゥイー族)自身に最高司令権が委ねられるように頑張った。
*Et re<ref>et re は近代の校訂者による修正提案で、β系写本では re 、α系写本では et rem となっている。</ref> in controversiam deducta totius Galliae concilium [[w:la:Bibracte|Bibracte]] indicitur.
**その事が論争の状態に置かれて、[[w:ビブラクテ|ビブラクテ]]でのガッリア全体の会合が公示された。
*Eodem conveniunt<ref>Eodem conveniunt はα系写本の記述で、β系写本では単に conveniunt 、etc.となっている。</ref> undique frequentes.
**同じところに至る所からたくさんの者たちが集まって来た。
*⑥ Multitudinis suffragiis res permittitur;
**(最高司令権の)事は衆人の票決に任せられて、
*ad unum omnes Vercingetorigem probant imperatorem.
**衆議一決により、ウェルキンゲトリークスを将軍(最高司令官)として承認した。
**:<span style="color:#009900;">(訳注:ad unum omnes「最後の一人に至るまですべて」)</span>
*⑦ Ab hoc concilio Remi, Lingones, Treveri afuerunt,
**この会合へは、[[w:レミ族|レーミー族]]、リンゴネス族、トレウェリ族が不在であった。
*illi quod amicitiam Romanorum sequebantur,
**前者(レーミー族とリンゴネス族)は、ローマ人との友好を遵守したので(不在であった)。
*Treveri quod aberant longius et ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> [[w:la:Germani|Germanis]] premebantur,
**トレウェリ族は、はるか遠くに離れており、[[w:ゲルマニア|ゲルマニア]]人により圧迫されていた。
*quae fuit causa quare toto abessent bello
**それが、何ゆえに(ウェルキンゲトリークスによる)戦争全体に関与しなかったかの理由であり、
*et neutris auxilia mitterent.
**(ウェルキンゲトリークスとカエサルの)どちら側にも援軍を派遣しなかった。
*⑧ Magno dolore Haedui ferunt se deiectos principatu,
**ハエドゥイー族は、自分たちが盟主の座から遠ざけられて、とても憤懣やるかたなかったし、
*queruntur fortunae commutationem
**境遇の変わりようを嘆いて、
*et Caesaris indulgentiam in se<ref>indulgentiam in se はα系写本の記述で、β系写本では in se indulgentiam となっている。</ref> requirunt
**カエサルの自分たちへの寛大さを惜しんだ。
*neque tamen suscepto bello suum consilium ab reliquis separare audent.
**けれども戦争を引き受けてしまったので、あえて自分たちの作戦計画をほか(の諸部族)と異にしなかった。
*⑨ Inviti summae spei adulescentes Eporedorix et Viridomarus Vercingetorigi parent.
**たいへんな野心を持つ青年たち[[w:エポレドリクス|エポレドリクス]]と[[w:ウィリドマルス|ウィリドマルス]]は、意に反してウェルキンゲトリークスに服従した。
===64節===
'''ウェルキンゲトリークスがガッリア諸部族の誘降・服従を謀る'''
*① Ipse<ref>ipse はα系写本の記述で、β系写本では ille となっている。</ref> imperat reliquis civitatibus obsides denique ei rei constituit diem;
**(ウェルキンゲトリークス)自身は、ほかの諸部族に人質(の供出)を命令して、のみならずその事の期日を決めた。
*huc omnes equites, [[wikt:la:quindecim|XV(quindecim)]] milia numero, celeriter convenire iubet.
**そこに、1万5000名の数のすべての[[w:騎兵|騎兵]]に、速やかに集結することを命じた。
*② Peditatu quem antea habuerit se fore contentum dicit
**(歩兵については)自分は、以前から持っていた[[w:歩兵|歩兵隊]]で満足するであろうと言った。
*neque fortunam temptaturum aut in acie<ref>in acie はα系写本の記述で、β系写本では単に acie となっている。</ref> dimicaturum,
**(歩兵で)武運を試すことはしないであろうし、あるいは野戦で(白兵戦を)闘うこともないであろう、と。
*sed quoniam abundet equitatu,
**しかし、騎兵隊は豊富であるから、
*perfacile esse factu frumentationibus pabulationibusque Romanos prohibere;
**ローマ人たちの糧食・糧秣徴発を妨げることは、とても容易である、と。
*③ aequo modo animo sua ipsi frumenta corrumpant aedificiaque incendant,
**ただ平静な心で、自分たちの穀物を自身で傷めて、(穀物の)建屋を焼打ちするように。
*qua rei familiaris iactura perpetuum imperium libertatemque se consequi videant.
**資産の犠牲により、永久の領有権と自由を自分たちが獲得することを思え、と。
*④ His constitutis rebus
**これらの事が決定されると、
*[[w:la:Haedui|Haeduis]] Segusiavisque, qui sunt finitimi provinciae, decem milia peditum imperat;
**[[w:ハエドゥイ族|ハエドゥイー族]]および(ローマ人の)属州に隣接するセグスィアウィ族には1万の歩兵(の供出)を命令していたが、
*huc addit equites [[wikt:la:octingenti|octingentos]].
**この中に、800騎の騎兵たち(の供出)を付け加えた。
*⑤ His praeficit fratrem Eporedorigis bellumque inferri<ref>inferri はα系写本の記述で、β系写本では inferre となっている。</ref> Allobrogibus iubet.
**彼らをエポレドリクスの兄弟に指揮させて、アッロブロゲス族に戦争をしかけることを命じた。
*⑥ Altera ex parte Gabalos proximosque <u>[[wikt:en:pagus#Latin|pagos]]</u> Arvernorum in Helvios,
**別の方面から、ガバリ族および近隣のアルウェルニー族の諸<u>郷</u>に、ヘルウィイ族のところに(攻め入るように)、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''pagus'' (郷) はここでは、部族の領土の農村区画を指す行政用語<ref name="pagus">''[[w:en:Pagus]]'' 等を参照。</ref>。)</span>
*item Rutenos Cadurcosque ad fines Volcarum Arecomicorum depopulandos mittit.
**同様に、ルテーニー族およびカドゥルキー族に、ウォルカエ・アレコミキ族の領土を荒らしまわるべく派遣した。
*⑦ Nihilo minus clandestinis nuntiis legationibusque Allobrogas<ref>Allobrogas はα系写本の記述で、β系写本では Allobroges となっている。</ref> sollicitat,
**それにもかかわらず、隠密に伝令たちや使節たちにより、アッロブロゲス族を(蜂起を)そそのかした。
*quorum mentes nondum ab<ref>ab はβ系写本の記述で、α系写本では ab となっている。</ref> superiore bello resedisse sperabat.
**彼ら(アッロブロゲス族)の心がかつての戦争からまだ静まっていないことを期待したのだ。
**:<span style="color:#009900;">(訳注:アッロブロゲス族は、BC61年にローマに反旗を翻し、翌BC60年に鎮圧されていた。[[ガリア戦記 第1巻#6節|第1巻6節]]を参照。)</span>
*⑧ Horum principibus pecunias,
**彼らの領袖たちに金銭を(約束し)、
*civitati autem imperium totius provinciae pollicetur.
**さらに部族には(カエサル統治下の)属州全体の支配権をも約束したのだ。
===65節===
'''カエサルと同盟諸部族の防戦。ゲルマニア騎兵を呼び寄せる'''
*① Ad hos omnes casus provisa erant praesidia cohortium duarum et viginti,
**これらすべての出来事に対して、(カエサルは)22個<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>からなる守備隊を用意していた。
*quae ex ipsa coacta<ref>coacta はχ系・β系写本の記述で、φ系写本にはない。</ref> provincia ab L.(Lucio) Caesare legato
**それらは、<ruby><rb>[[w:レガトゥス|総督副官]]</rb><rp>(</rp><rt>レガトゥス</rt><rp>)</rp></ruby>ルキウス・カエサルによって属州全体から徴集されたもので、
**:<span style="color:#009900;">(訳注:ここでいう属州とは、[[w:ガリア・ナルボネンシス|ガッリア・トラーンサルピーナ]]を指すと思われる。</span>
**:<span style="color:#009900;">ルキウス・ユリウス・カエサル4世 [[w:en:Lucius Julius Caesar IV|Lucius Julius Caesar IV]] は本書の著者カエサルと4代前の高祖父を共有する元執政官。[[w:en:Julii Caesares|Julii Caesares]] を参照。)</span>
*ad omnes partes opponebantur.
**あらゆる方面に対して配置された。
*② Helvii sua sponte cum finitimis proelio congressi pelluntur
**[[w:ヘルウィイ族|ヘルウィイ族]]は、自分たちの意思により、近隣(の諸部族)と戦闘で争って撃退され、
**:<span style="color:#009900;">(訳注:この部族については[[#7節|7節]]~8節を参照。)</span>
*et C.(Gaio) Valerio Domnotauro<ref>Domnotauro はS・L・N写本の記述で、A・B・N写本では Donnotauro 、χ系・π系写本では Donotauro となっており、ρ系写本には記述がない。</ref>, Caburi filio, principe civitatis,
**カブルスの息子で、部族の領袖であるガイウス・ウァレリウス・ドムノタウルス
**:<span style="color:#009900;">(訳注:彼は、ローマとの友好により、ローマ人風の名前を与えられていたのであろう。)</span>
*compluribusque aliis interfectis intra oppida ac muros<ref>ac muros はα系写本の記述で、β系写本では murosque となっている。</ref> compelluntur.
**および他のかなりの者たちが殺戮されて、<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>と城壁の内側に追い込まれた。
*③ Allobroges crebris ad [[w:la:Rhodanus|Rhodanum]] dispositis praesidiis
**[[w:アッロブロゲス族|アッロブロゲス族]]は、ロダヌス(=現[[w:ローヌ川|ローヌ川]])のところへ密に守備隊を分け置いて、
*magna cum cura et diligentia suos fines tuentur.
**たいへんな注意と入念さにより、自分たちの領土を守った。
*④ Caesar quod hostes equitatu superiores esse intellegebat
**カエサルは、敵方が[[w:騎兵|騎兵隊]]で(自軍より)優っていると認識していたので、
*et interclusis omnibus itineribus nulla re ex provincia atque Italia sublevari poterat,
**かつ、すべての道が遮られて、属州やイタリアから何ら支援されることができなかったので、
**:<span style="color:#009900;">(訳注:属州 provincia とはガッリア・トラーンサルピーナ、イタリア Italia とは[[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]のことであろう。)</span>
*trans [[w:la:Rhenus|Rhenum]] in [[wikt:la:Germania|Germaniam]] mittit ad eas civitates, quas superioribus annis pacaverat,
**レヌス(=現[[w:ライン川|ライン川]])の向こう側の[[w:ゲルマニア|ゲルマニア]]に、先年に平定していた諸部族のところへ(使節を)遣わした。
**:<span style="color:#009900;">(訳注:ゲルマニア遠征や平定については、[[ガリア戦記 第4巻#16節|第4巻16節]]~19節、[[ガリア戦記 第6巻#9節|第6巻9節]]~10節を参照。)</span>
*equitesque ab his arcessit et levis armaturae pedites,
**彼らから、騎兵たち、および[[w:ウェリテス|軽い武装の歩兵]]たちを呼び寄せた。
*qui inter eos proeliari consuerant.
**その者ら(軽装歩兵)は、彼ら(騎兵)の間で戦闘することが常であったのだ。
*⑤ Eorum adventu, quod minus idoneis equis utebantur,
**彼ら(ゲルマニア騎兵)が到着すると、(戦闘に)あまり適していない馬を使役していたので、
**:<span style="color:#009900;">(訳注:ゲルマニア人の馬の使用については、[[ガリア戦記 第4巻#2節|第4巻2節]]を参照。)</span>
*a tribunis militum reliquisque equitibus Romanis atque evocatis equos sumit
**<ruby><rb>[[w:トリブヌス・ミリトゥム|兵士長官]]</rb><rp>(</rp><rt>トリブヌス・ミリトゥム</rt><rp>)</rp></ruby>たちやほかのローマ人騎士たちや<ruby><rb>再徴集兵</rb><rp>(</rp><rt>エウォカティ</rt><rp>)</rp></ruby>たちから、馬匹を取り上げて、
*[[w:la:Germani|Germanis]]que distribuit.
**ゲルマニア人たちに分配した。
===66節===
'''属州へと南下するカエサル、迎え撃とうとするウェルキンゲトリークス'''
*① Interea dum haec geruntur,
**その間に、これらが出来している間に、
*hostium copiae ex Arvernis
**敵方の(歩兵の)軍勢が(滞陣していたゲルゴウィアの)[[w:アルウェルニ族|アルウェルニー族]]のところから、
*equitesque qui toti Galliae erant imperati conveniunt.
**および全ガッリアの命令されていた[[w:騎兵|騎兵]]たちが、(ウェルキンゲトリークスのところに)集結して来た。
*② Magno horum coacto numero,
**これらの(ガッリア兵の)多数が徴集されて、
*cum Caesar in Sequanos per extremos Lingonum fines iter faceret,
**カエサルが、[[w:セクアニ族|セクアニ族]]のところに(向かって)[[w:リンゴネス族|リンゴネス族]]の領土の外縁を通って行軍していたときに、
**:<span style="color:#009900;">(訳注:属州へは、リンゴネス族と後述のマンドゥビイ族の間を通ってセクアニ族領を通らねばならなかった。)</span>
*quo facilius subsidium provinciae ferri<ref>ferri はα系写本の記述で、β系写本では ferre となっている。</ref> posset,
**(それは)属州(ガッリア・トラーンサルピーナ)に援兵をより容易にもたらせるようにするためであったが、
*circiter milia passuum X(decem) ab Romanis trinis castris [[w:la:Vercingetorix|Vercingetorix]] consedit
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、ローマ人たちから約10ローママイル(15km)のところに、3つの陣営にて陣取った。
*③ convocatisque ad concilium praefectis equitum
**(ウェルキンゲトリークスは)騎兵の指揮官たちを会合へ召集して、
*venisse tempus victoriae demonstrat;
**勝利の時が来たと、明言した。
*fugere in provinciam Romanos Galliaque excedere.
**ローマ人たちは属州に逃亡して、ガッリアから立ち退きつつある、と。
*④ Id sibi ad praesentem obtinendam libertatem satis esse;
**それは、自分たちにとって目下のところ、自由を維持するためには十分であるが、
*ad reliqui temporis pacem atque otium parum profici;
**将来の平和と平穏は不充分にしか得られない。
*maioribus enim coactis copiis reversuros
**なぜなら(ローマ人たちは)より大きな軍勢を徴集して(ガッリアに)戻って来るであろうし、
*neque finem bellandi facturos.
**戦争することに結末をつけることはないであろう。
*Proinde agmine impeditos adorirentur<ref>adorirentur はA・β系写本の記述で、M・L・N写本では adoriantur 、S写本では adorantur 、Q・B・M写本ではadorientur となっている。</ref>.
**それゆえに、(ローマ勢の)行軍によって重荷となっている(輜重隊の)者たちを襲撃するのだ。
*⑤ Si pedites suis auxilium ferant atque in eo morentur, iter facere<ref>facere はα系写本の記述で、β系写本では confici となっている。</ref> non posse;
**もし(ローマ勢の)歩兵たちが味方を支援し、そのことで滞留するならば、(属州へ)行軍することはできない。
*si ─id quod magis futurum confidat─
**もし、─(我は)むしろそうなるであろうと期待することであるが─
*relictis impedimentis suae saluti consulant,
**(ローマ歩兵たちが)[[w:輜重|輜重]]を残して、自分たちの身の安全に意を用いるならば、
*et usu rerum necessariarum et dignitate spoliatum iri.
**必需品の使用や(ローマ人としての)品格をはぎ取られることになる。
*⑥ Nam de equitibus hostium,
**なぜなら、敵方の騎兵については
**<span style="color:#009900;">:(訳注:著者カエサルはここでは、間接話法でありながら、ローマ勢について hostium「敵方の」と表現している。)</span>
*quin nemo eorum progredi modo extra agmen audeat,
**彼ら(ローマ騎兵)のうち誰も、<ruby><rb>行軍縦隊</rb><rp>(</rp><rt>アグメン</rt><rp>)</rp></ruby>の外にすら、あえて進み出ようとしないこと、
*et ipsos quidem non<ref>et ipsos quidem non はα系写本の記述で、β系写本では ne ipsos quidem となっている。</ref> debere dubitare.
**(そのことを、諸君ら)自身は決して疑念を持つことなかれ。
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
*Id quo maiore faciant animo,
**それ(=輜重隊への襲撃)を、より大胆な心構えで実行してもらうために、
*copias se omnes pro castris habiturum et terrori hostibus futurum.
**自分(ウェルキンゲトリークス)が軍勢すべてを陣営の前に保持しておくであろうし、敵方の心胆を寒からしめるであろう。
*⑦ Conclamant equites
**(ガッリア勢の)騎兵たちは(以下のように)叫んだ。
*sanctissimo iure iurando confirmari oportere,
**最も神聖な誓約によって確証されなければならぬ。
*ne tecto recipiatur, ne ad liberos, ne ad parentes, ad<ref>ne ad …, ne ad …, ad が写本(ω)の記述であるが、モイゼル Meusel は ne ad …, ad …, ad と修正提案をしている。</ref> uxorem aditum habeat,
**(以下の者は)家に迎え入れられたり、子供たちや親たちや妻女たちのところへ近づくことがないように。
*qui non bis per agmen hostium perequitasset<ref>perequitasset はα系写本の記述で、β系写本では perequitarit となっている。</ref>.
**敵方(ローマ勢)の隊列を越えて(往復の)2度、騎馬で駆け抜けることがなかった者は。
**:<span style="color:#009900;">(訳注:敵中突破と生還を成し遂げなかった騎兵は、復員してはならない、と誓約したのである。)</span>
===67節===
'''カエサル麾下のゲルマニア騎兵がウェルキンゲトリークスを一蹴'''
*① Probata re atque omnibus iure iurando adactis
**これが賛同されて、(ガッリア騎兵の)皆が誓約させられて、
*postero die in tres partes distributo equitatu
**翌日に、[[w:騎兵|騎兵隊]]を3つの分隊に分配した。
*duae se acies ab duobus lateribus ostendunt,
**2隊は(ローマ勢の左右)2つの側面から<ruby><rb>戦闘隊形</rb><rp>(</rp><rt>アキエス</rt><rp>)</rp></ruby>として現われた。
*una a<ref>a はβ系写本の記述で、α系写本にはない。</ref> primo agmine iter impedire coepit.
**1隊は(ローマ勢の)前衛から行軍を妨げ始めた。
*② Qua re nuntiata
**その事が報告されて、
*Caesar suum quoque equitatum tripertito divisum contra hostem ire iubet.
**カエサルは麾下の騎兵隊おのおのを3つに配分して、敵に対して向かって行くことを命じた。
*Pugnatur una omnibus in partibus.
**(騎兵戦が)同時にすべての方面で戦われた。
*③ Consistit agmen;
**(ローマ勢の)<ruby><rb>行軍縦隊</rb><rp>(</rp><rt>アグメン</rt><rp>)</rp></ruby>は一歩も引かなかった。
*impedimenta intra legiones recipiuntur.
**[[w:輜重|輜重]]は諸[[w:ローマ軍団|軍団]]の内側に後退した。
*④ Si qua in parte nostri laborare aut gravius premi videbantur,
**もし、我が方(ローマ勢)のある部隊が苦戦したり、またはひどく押されぎみだと思われたならば、
*eo signa inferri Caesar aciemque constitui<ref>constitui はα系写本の記述で、β系写本では converti 、T写本では conferri となっている。</ref> iubebat;
**カエサルはそこに進撃して戦列を組織することを命じた。
**:<span style="color:#009900;">(訳注:signa inferre「軍旗を進める、進撃する」)</span>
*quae res et hostes ad insequendum tardabat et nostros spe auxilii confirmabat.
**その事が、敵方が追撃して来るのを遅らせもしたし、我が方が支援の希望により元気付けられもした。
*⑤ Tandem Germani ab dextro latere summum iugum nacti hostes loco depellunt,
**ついに、ゲルマニア人(騎兵)たちが右の側面から尾根の頂きを掌握して、敵方をその場から追いやった。
*fugientes usque ad flumen,
**逃亡する(ガッリア騎兵の)者たちを川の辺りまで(追って)、
*ubi [[w:la:Vercingetorix|Vercingetorix]] cum pedestribus copiis consederat,
**そこには[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]が[[w:歩兵|歩兵]]の軍勢とともに陣取っていたのだが、
*persecuntur<ref>persecuntur はα系写本の記述で、β系写本では persequuntur となっている。</ref> compluresque interficiunt.
**(ゲルマニア騎兵が敵を川辺まで)追撃して、かなりの者たちを殺戮した。
*⑥ Qua re animadversa
**その事が(敵方に)気付かれて、
*reliqui ne circumirentur<ref>circumirentur はA・φ系写本の記述で、Q・β系写本では circumvenirentur となっている。</ref> veriti se fugae mandant.
**(ガッリア勢の)残りの者たちは、包囲されないようにと怖れて、逃亡に身を任せた。
*Omnibus locis fit caedes.
**(こうしてローマ方により)あらゆる場所で虐殺が行なわれた。
*⑦ Tres nobilissimi [[w:la:Haedui|Haedui]] capti ad Caesarem perducuntur:
**[[w:ハエドゥイ族|ハエドゥイー族]]の3人の高位の貴族が捕らえられて、カエサルのところへ連行されて来た。
*Cotus, praefectus equitum, qui controversiam cum Convictolitavi proximis comitiis habuerat,
**コトゥスは騎兵指揮官で、最近の会議でコンウィクトリタウィスと(統領の座をめぐって)係争した。
**:<span style="color:#009900;">(訳注:[[#32節|32節]]~33節を参照。)</span>
*et Cavarillus, qui post defectionem Litavicci pedestribus copiis praefuerat,
**カウァリッルスは、リタウィックスの背反の後に、歩兵の軍勢を指揮していた。
*et Eporedorix, quo duce ante adventum Caesaris Haedui cum Sequanis bello contenderant.
**エポレドリクスは、カエサルの到来以前にハエドゥイー族の将帥としてセクアニ族と戦争を闘っていた。
**:<span style="color:#009900;">(訳注:この人物は、ウィリドマルスとともにカエサルを裏切ったエポレドリクスとは同名異人である。)</span>
==アレスィア攻囲戦==
===68節===
[[画像:Alésia.jpg|thumb|right|300px|[[w:アレシアの戦い|アレスィア古戦場]]であるとほぼ確実視されている仏アリーズ=サント=レーヌ村([[w:fr:Alise-Sainte-Reine|Alise-Sainte-Reine]])近郊のオソワ山(Mont Auxois)という丘陵の西端にある[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]像(<small>[[w:fr:Vercingétorix_(statue d'Aimé Millet)|Statue de Vercingétorix]]</small>)。<small>[http://maps.google.co.jp/?ie=UTF8&ll=47.538579,4.490544&spn=0.001172,0.002401&t=h&z=19&brcurrent=3,0x0:0x0,1 Googleマップ]</small>の航空写真にもこの巨像が写っている。<br>当地はフランス東部[[w:ブルゴーニュ地域圏|ブルゴーニュ地方]][[w:コート=ドール県|コート=ドール県]](<small>[[w:fr:Côte-d'Or|Côte-d'Or]]</small>)のオソワ地域(<small>[[w:fr:Auxois (région)|L'Auxois]]</small>)にあり、県都[[w:ディジョン|ディジョン]]市街から西北西へ約4.5kmの地点に位置する。ディジョン方面から県道905号(D905)を北西に進んで行くと、ヴナレ=レ=ローム(<small>[[w:fr:Venarey-les-Laumes|Venarey-les-Laumes]]</small>)から東の郊外にかけて古戦場跡が広がる。<br>オソワ(Auxois)という地域名・山名は、ラテン語の Alesiensis pagus「アレスィア郷」が転訛し、アリーズ(Alise)の名もアレスィア(Alesia)に由来すると考えられている。サント=レーヌ([[w:fr:Sainte Reine|Sainte Reine]] 聖レグニア)とはこの地でAD252年に殉教したキリスト教徒ガッリア人女性で、カトリック教会から聖人に列せられている。]]
'''ウェルキンゲトリークスがアレスィア入城、カエサルは攻囲を決断'''
*① Fugato omni equitatu
**すべての[[w:騎兵|騎兵隊]]が逃げてしまったので、
*[[w:la:Vercingetorix|Vercingetorix]] copias suas<ref>suas はβ系写本の記述で、α系写本にはない。</ref>, ut pro castris conlocaverat, reduxit
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、陣営の前に配置するようにしていた麾下の(歩兵の)軍勢を呼び戻して、
*protinusque [[w:la:Alesia|Alesiam]], quod est oppidum Mandubiorum, iter facere coepit
**すぐに、マンドゥビイ族の<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>である[[w:アレシア|アレスィア]]へ行軍し始めた。
*celeriterque impedimenta ex castris educi et se subsequi iussit.
**かつ、速やかに陣営から[[w:輜重|輜重]]を進発させること、および自分に追随すること、を命じた。
*② Caesar impedimentis in proximum collem deductis,
**カエサルは、輜重を近隣の丘陵に移させて、
*duabus legionibus praesidio relictis,
**2個[[w:ローマ軍団|軍団]]を(輜重の)守備隊として(その丘陵に)残留させた。
*secutus quantum diei tempus est passum,
**日中の時間が許される限り(ガッリア勢を)追跡して、
*circiter tribus milibus hostium ex novissimo agmine interfectis
**敵方の後衛のうちから約3000人を殺戮して、
*altero die ad Alesiam castra fecit.
**翌日には、アレスィアの辺りに陣営を張った。
*③ Perspecto urbis situ
**(アレスィアの)都市の地勢を吟味して、
*perterritisque hostibus, quod equitatu, qua maxime parte exercitus confidebant, erant pulsi,
**敵方は、部隊の大部分において頼りにしていた騎兵隊が撃退されていたので、怖れおののいていたから、
*adhortatus ad laborem milites circumvallare instituit.
**(カエサルは)兵士たちを労役に駆り立てて、(敵陣を)[[w:堡塁|堡塁]]で囲むことを決断した。
===69節===
[[画像:Alise2.jpg|thumb|right|300px|[[w:アレシア|アレスィア]]にあったローマ時代の[[w:フォルム|フォルム]](広場)や[[w:バシリカ|バシリカ]](教会堂)などと思われる遺跡([http://maps.google.co.jp/?ie=UTF8&t=h&brcurrent=3,0x0:0x0,1&ll=47.539477,4.5008&spn=0.002343,0.004801&z=18 Googleマップ]の航空写真を参照)。現在、オソワ山(Mont Auxois)と呼ばれているこの丘陵は、頂きが平坦な台地状になっており、その中央のさらに高い所に[[w:オッピドゥム|オッピドゥム]](城塞都市)があったと思われる。<br>上の画像からは、同等の高さの丘陵が周囲を取り巻いていることが見て取れる。<br>『ガリア戦記』に書かれたアレスィアの所在地については諸説があって永らく不明であったが、ゲルゴウィアと同様に19世紀のウジェーヌ・ストッフェル大佐(colonel Eugène Stoffel)の発掘調査によってローマ軍の遺構などが発見され、地勢もカエサルの記述にかなり合っていると見なされて、オソワ山とその中腹にあるアリーズ=サント=レーヌが有力視されることになった。]]
'''アレスィアの地勢、ローマ軍の攻囲線'''
*① Ipsum erat oppidum [[w:la:Alesia|Alesia]] in colle summo admodum edito loco,
**[[w:アレシア|アレスィア]]の<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>そのものは、丘陵の頂きにおいて、ひときわ高い地点にあって、
*ut nisi obsidione expugnari non posse videretur.
**攻囲(包囲)以外には攻略されることができないと思われた。
*② Cuius collis radices duo duabus ex partibus flumina subluebant.
**その丘陵のふもとを2つの方面から、2つの川が流れていた。
*③ Ante id<ref>id はα系写本の記述で、β系写本にはない。</ref> oppidum planities circiter milia passuum Ⅲ(tria) in longitudinem patebat;
**その城塞都市の前に、約3ローママイル(4.5km)の間隔で、平地が広がっていた。
*④ reliquis ex omnibus partibus colles mediocri interiecto spatio
**ほかのすべての方面からは(いくつかの)丘陵が適度な空間を置いており、
*pari altitudinis fastigio oppidum cingebant.
**同等の高さの頂上で(アレスィアの)城塞都市を取り巻いていた。
*⑤ Sub muro, quae pars collis ad orientem solem spectabat,
**(アレスィアの)丘陵の日が昇る方(=東方)へ面していた部分の城壁の下には、
*hunc omnem locum copiae Gallorum compleverant
**このすべての場所を、ガッリア人たちの軍勢が満たしていて、
*fossamque et maceriam sex in altitudinem pedum praeduxerant.
**堀、および高さ6[[w:ペース (長さ)|ペース]](約1.8m)の防壁を前に引いていた。
**:<span style="color:#009900;">(訳注:[[wikt:en:maceria|maceria]] は、軍事用語としては、立てこもるための城壁<ref><i>muraille (pour se retrancher)</i>(ラルース社の羅仏辞典 <small>“Dictionnaire MaxiPoche Plus latin-français et français-latin”</small> を参照)</ref>を指す。)</span>
*⑥ Eius munitionis quae ab Romanis instituebatur circuitus XI<ref>XI はα系写本の記述で、β系写本では X となっている。</ref> milia passuum tenebat.
**ローマ人たちによって建てられようとしていた塁壁の周囲は、11ローママイル(約16km)を占めていた。
**:<span style="color:#009900;">(訳注:α系写本では 11マイル=約16km、β系写本では 10マイル=約15km となっている。)</span>
*⑦ Castra opportunis locis erant posita
**(ローマ勢の)陣営は(戦略上)都合良い地点に設置されていて、
**:<span style="color:#009900;">(訳注:歩兵・騎兵の陣営が計8か所に置かれていたようである。)</span>
*ibique<ref>ibique はα系写本の記述で、β系写本では itemque となっている。</ref> castella XXIII(viginti tria) facta,
**同じく23基の砦が造られた。
*quibus in castellis interdiu stationes ponebantur,
**それらの砦には、昼間は、歩哨たちが置かれて、
*ne qua subito eruptio fieret;
**不意に何らかの突撃がなされないようにした。
*haec eadem noctu excubitoribus ac firmis praesidiis tenebantur.
**この同じところが、夜間は、寝ずの番兵および強力な守備隊により固守された。
===70節===
'''カエサル麾下のゲルマニア騎兵が、再びガッリア騎兵を虐殺'''
*① Opere instituto
**(ローマ人により)[[w:堡塁|堡塁]]が建てられだして、
*fit equestre proelium in ea planitie,
**かの平地において[[w:騎兵|騎兵]]戦がなされた。
*quam intermissam collibus tria milia passuum in longitudinem patere supra demonstravimus.
**それ(平地)は(周囲の)丘陵から3ローママイル(約4.5km)の間隔を空けて広がっていることを、[[#69節|前]]に述べた。
*Summa vi ab utrisque contenditur.
**(騎兵戦は)双方の主力によって闘われた。
*② Laborantibus nostris Caesar Germanos submittit
**苦戦している我が方(ローマ騎兵)に対して、カエサルは[[w:ゲルマニア|ゲルマニア]]人(騎兵)を援けに派遣した。
*legionesque pro castris constituit, ne qua subito inruptio ab hostium peditatu fiat.
**諸[[w:ローマ軍団|軍団]]を陣営の前に駐留させて、不意に何らかの突入が敵方の[[w:歩兵|歩兵隊]]によってなされないようにした。
*③ Praesidio legionum addito nostris animus augetur;
**軍団の守備が加わって、我が方(ローマ勢の)勇気が増された。
*hostes in fugam coniecti se ipsi multitudine impediunt
**敵方(の騎兵)は敗走に追いやられて、彼ら自身が自分たち(の敗走)を大勢であることにより妨げた。
*atque angustioribus portis relictis coacervantur<ref>coacervantur は近世の写本(ς)の記述で、α系写本では coacervati tum 、β系写本では coartantur となっている。</ref>.
**さらに(ガッリア陣地の)諸門がとても狭いままにしておかれたので(騎兵たちが)積み重ねられた。
*④ Germani acrius usque ad munitiones sequuntur.
**ゲルマニア人(騎兵)たちは(ガッリア騎兵たちを)苛烈に、防塁のところまで追撃した。
*⑤ Fit magna caedes.
**(こうして)大虐殺が起こった。
*Nonnulli relictis equis fossam transire et maceriam transcendere conantur.
**(ガッリア騎兵の)幾人かは、馬を置き去りにして、堀を越えること、および防壁を登り越えることを試みた。
*Paulum legiones Caesar quas pro vallo constituerat promoveri iubet.
**カエサルは、防柵の前に駐留させていた諸軍団に、いくらか前進することを命じた。
*⑥ Non minus qui intra munitiones erant perturbantur Galli:
**防塁の内側にいたガッリア人たちも(騎兵たちに)劣らず狼狽した。
*veniri ad se confestim existimantes ad arma conclamant;
**(ローマ勢により)自分たちのところへ直ちにやって来られると考えた者たちは、防具を取れと叫んだ。
*nonnulli perterriti in oppidum inrumpunt.
**(ガッリア勢の)幾人かは、怖れおののいて(丘陵の頂きにある)城塞都市の中に押し入った。
*⑦ [[w:la:Vercingetorix|Vercingetorix]] iubet portas claudi, ne castra nudentur.
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、陣営が無防備にされないように、(防塁の)諸門が閉じられることを命じた。
*Multis interfectis, compluribus equis captis Germani sese recipiunt.
**(ガッリア騎兵の)多くが殺戮され、おびただしい馬が捕獲されて、ゲルマニア人(騎兵)たちは退却した。
===71節===
[[画像:Statue_Vercingetorix_st_germain_en_laye.JPG|thumb|right|250px|[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の立像(<small>パリ郊外の[[w:サン=ジェルマン=アン=レー|サン=ジェルマン=アン=レー]] [[w:fr:Saint-Germain-en-Laye|Saint-Germain-en-Laye]]</small>)。[[w:アレシアの戦い|アレスィア古戦場]](<small>現在のアリーズ=サント=レーヌ</small>)にある巨大な銅像と同様に彫刻家エメ・ミレ([[w:fr:Aimé Millet|Aimé Millet]])によって建立された。]]
[[画像:Napoleon3.PNG|thumb|right|250px|ウジェーヌ・ストッフェル大佐(colonel Eugène Stoffel)をして[[w:アレシア|アレスィア]]およびゲルゴウィアの発掘調査をさせた立役者・皇帝[[w:ナポレオン3世|ナポレオン3世]]の肖像。[[w:ガリア起源説|ガッリア起源説]]により、王政に反感を持つフランスの共和派や庶民は、旧[[w:ブルボン家|ブルボン王朝]]を[[w:クロヴィス1世|クロヴィス]]や[[w:ユーグ・カペー|カペー]]にさかのぼるゲルマン系の[[w:フランク人|フランク人]]と見なし、自分たちのルーツを[[w:ケルト人|ケルト系]]の古代[[w:ガリア人|ガッリア人]]に求めた。ナポレオン3世はこのような国民の意識を利用して、[[w:ナショナリズム|ナショナリズム]]の高揚および帝政の基盤強化を図ったのである。]]
'''ウェルキンゲトリークスが援兵召集のため騎兵を放ち、籠城策を定める'''
*① [[w:la:Vercingetorix|Vercingetorix]], priusquam munitiones ab Romanis perficiantur,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、ローマ人たちによって塁壁が完成されるより前に、
*consilium capit omnem ab se equitatum noctu dimittere.
**自分のところから[[w:騎兵|騎兵隊]]のすべてを夜間に送り出すことを計画した。
*② Discedentibus mandat
**(アレスィアから)退去する(騎兵の)者たちに(以下のように)指図した。
*ut suam quisque eorum civitatem adeat
**彼ら(騎兵)のおのおのが自らの部族に行くように、
*omnesque qui per aetatem arma ferre possint ad bellum cogant.
**かつ、年齢により武器を手に取ることができる者たちの皆を戦争へ徴集するように、と。
*③ Sua in illos merita proponit obtestaturque
**(ウェルキンゲトリークスは)彼ら(ガッリア人たち)における自分の功績に言及して(以下のように)懇願した。
*ut suae salutis rationem habeant
**自分の身の安全を顧慮してくれるように、
*neu se optime de communi libertate meritum in cruciatum hostibus<ref>in cruciatum hostibus はβ系写本の記述で、α系写本では hostibus in cruciatum となっている。</ref> dedant.
**かつ(ガッリア)共通の自由について功績が最上である自分を、敵方の責め苦に渡すことがないように、と。
*Quod si indiligentiores fuerint,
**ところが、もし(騎兵たちがウェルキンゲトリークスたちの安全に)無関心であったならば、
*milia hominum delecta octoginta una secum interitura demonstrat.
**選りすぐりの兵員8万名が自分と一緒に滅びるであろう、と明言した。
*④ Ratione inita frumentum se exigue dierum XXX(triginta) habere<ref>frumentum ~ habere はβ系写本の記述で、χ系・φ系あるいはモイゼル H. Meusel の修正提案など、写本や校訂者により語順が異なっていたり、単語が欠けていたりする。</ref>,
**見積もったところ、自分たちはわずかに30日分の穀物を保有しているが、
*sed paulo etiam longius tolerari posse parcendo.
**しかし節約することにより、なおいくらか長く耐え忍ぶことができる、と。
*⑤ His datis mandatis,
**これらの指図を与えてから、
*qua erat nostrum opus<ref>erat nostrum opus はβ系写本の記述で、α系写本では単に opus erat となっている。</ref> intermissum, secunda vigilia silentio equitatum mittit<ref>mittit はχ系・B・M・S写本の記述で、β系写本では dimittit となっている。</ref>.
**我が方(ローマ勢)の構築物が中断しているところから、第二夜警時に静けさのうちに、騎兵隊を送り出した。
*⑥ Frumentum omne ad se referri iubet,
**穀物をすべて自分のところへ運んで来ることを命じて、
*capitis poenam iis qui non paruerint constituit;
**服従しなかった者たちを極刑に処すと決めた。
*⑦ pecus, cuius magna erat copia a Mandubiis<ref>a Mandubiis はβ系写本の記述で、α系写本では ab Manduviis となっている。</ref> compulsa, viritim distribuit;
**家畜は、マンドゥビイ族によって大量に集められていたが、個々に分配した。
*frumentum parce et paulatim metiri instituit;
**穀物を節約して少しずつ量り分けることを定めた。
*⑧ copias omnes quas pro oppido collocaverat in oppidum recepit.
**<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の前に駐留させていた(歩兵の)軍勢すべてを城塞都市の中に退却させた。
*⑨ His rationibus auxilia Galliae exspectare et bellum parat administrare<ref>parat administrare はα系写本の記述で、β系写本では administrare parat となっている。</ref>.
**これらの手段により、ガッリア(諸部族)の援軍を待つこと、および戦争を指導しようとしたのである。
===72節===
'''カエサルが、より大掛かりな攻囲陣地を構築する'''
*① Quibus rebus cognitis<ref>cognitis がこの位置にあるのはα系写本の記述で、β系写本では captivis の後となっている。</ref> ex perfugis et captivis
**それらの事情を脱走兵たちや捕虜たちから知って、
*Caesar haec genera munitionis instituit.
**カエサルは以下の類いの塁壁工事に取りかかった。
<br>
*'''前線の切り立った空堀'''
*Fossam pedum XX(viginti) derectis lateribus duxit,
**20[[w:ペース (長さ)|ペース]](約6m)の(幅の)垂直な側面の堀を引いた。
*ut eius fossae<ref>fossae がこの位置にあるのはβ系写本の記述で、α系写本では summa(e) の後になっている。</ref> solum tantundem pateret, quantum summa<ref>summa はβ系写本の記述で、α系写本では summae となっている。</ref> labra distarent<ref>distarent はα系写本の記述で、β系写本では distabant となっている。</ref>.
**その堀(の底)は、頂きの縁が離れているのとちょうど同じ分だけ広がるようにした。
**:<span style="color:#009900;">(訳注:上辺と底の幅が等間隔になるような切り立った空堀にした。)</span>
*② Reliquas omnes munitiones ab ea fossa pedes<ref>pedes はα系写本の記述で、β系写本では pedibus となっている。</ref> CCCC(quadringentos) reduxit.
**ほかのすべての塁壁は、その堀から400ペース(約120m)後ろに引いた。
**:<span style="color:#009900;">(訳注:写本にあるこの数字は、19世紀のウジェーヌ・ストッフェル大佐(colonel Eugène Stoffel)の</span>
**:<span style="color:#009900;">発掘調査によって400[[w:パッスス|パッスス]](約600m)と修正された。この堀は、アレスィアの西方に引かれたと思われる。)</span>
*Id hoc consilio,
**それは、以下の考えによる。
*quoniam tantum spatium necessario esset<ref>spatium necessario esset はβ系写本の記述で、α系写本では esset necessario spatio となっている。</ref> complexus
**これほどの空間が包囲されなければならないのであるから、
*nec facile totum corpus<ref>corpus はα系写本の記述で、β系写本では opus となっており、ρ系写本にはない。</ref> corona militum cingeretur,
**すべての包囲作業が兵士たちの<ruby><rb>哨兵線</rb><rp>(</rp><rt>コロナ</rt><rp>)</rp></ruby>で取り囲まれるのは容易ではない。
*ne de improviso aut noctu ad munitiones hostium multitudo<ref>hostium multitudo はα系写本の記述で、β系写本では multitudo hostium となっている。</ref> advolaret
**不意に、あるいは夜間に、敵方の大勢が(ローマ側の)塁壁へ突進することがないように、
*aut interdiu tela in nostros operi destinatos conicere possent<ref>possent はα系写本の記述で、β系写本では posset となっている。</ref>.
**あるいは日中に、工事中の我が方(ローマ勢)に飛道具が投げ付けられることができないように。
<br>
[[画像:Fosse.Saint.Pierre.en.Chastres.png|thumb|right|300px|二重の堀およびその背後の堡塁(土塁と障壁・櫓)の模式図([[w:ウジェーヌ・エマニュエル・ヴィオレ・ル・デュク|ヴィオレ=ル=デュク]]著『中世フランス建築体系辞典』[[s:fr:Dictionnaire raisonné de l’architecture française du XIe au XVIe siècle - Tome 5, Fossé|(s)]]より)。]]
[[画像:AlesiaFortifications.JPG|thumb|right|300px|[[w:アレシアの戦い|アレスィア古戦場]]跡に再現された、二重の堀およびその背後の堡塁(土塁と鹿柴、胸壁・鋸壁、櫓)。]]
*'''二重の堀'''
*③ Hoc intermisso spatio
**この空間をあけて、
*duas fossas XV(quindecim) pedes latas eadem altitudine perduxit;
**15ペース(約4.5m)の幅の2つの堀を、同じ深さ(15ペース)で張り巡らせた。
*quarum interiorem campestribus ac demissis locis
**それらの内側(の堀)の平地で低く下がった所には、
**:<span style="color:#009900;">(訳注:内側の堀とは、アレスィアに近い東側の堀と考えられている。)</span>
*aqua ex flumine derivata complevit.
**川から導かれた水で満たした。
<br>
*'''土塁と防柵、胸壁と鋸壁、鹿柴、櫓'''
*④ Post eas aggerem ac vallum XII(duodecim) pedum exstruxit.
**それらの後ろには、12ペース(約3.6mの高さ)の<ruby><rb>[[w:土塁|土塁]]</rb><rp>(</rp><rt>アッゲル</rt><rp>)</rp></ruby>と<ruby><rb>防柵</rb><rp>(</rp><rt>ウァッルム</rt><rp>)</rp></ruby>を築き上げた。
*Huic loricam pinnasque adiecit
**これに<ruby><rb>胸壁</rb><rp>(</rp><rt>ロリカ</rt><rp>)</rp></ruby>と<ruby><rb>鋸壁</rb><rp>(</rp><rt>ピンナ</rt><rp>)</rp></ruby>を付け加えて、
**:<span style="color:#009900;">(訳注:胸壁と鋸壁とは、[[ガリア戦記 第5巻#40節|第5巻40節]]で既出のように、凹凸形に編み込まれた柴の壁)</span>
*grandibus cervis eminentibus ad commissuras pluteorum atque aggeris,
**障壁と土塁の接合部の辺りに大きな<ruby><rb>鹿柴</rb><rp>(</rp><rt>ケルウス</rt><rp>)</rp></ruby>を突き出させて、
**:<span style="color:#009900;">(訳注:<ruby><rb>鹿柴</rb><rp>(</rp><rt>ろくさい</rt><rp>)</rp></ruby>(鹿砦または<ruby><rb>逆茂木</rb><rp>(</rp><rt>さかもぎ</rt><rp>)</rp></ruby>)とは、鹿の角のように枝分かれした杭や枝を逆立てた杭囲い。</span>
**:<span style="color:#009900;">障壁とは、防柵の前に取り付けられた胸壁と鋸壁の総称であろう。)</span>
*qui ascensum hostium tardarent,
**敵方が登って来るのを妨げようとした。
*et turres toto opere circumdedit, quae pedes LXXX(octoginta) inter se distarent.
**構築物の全体を、互いに80ペース(約24m)離れて立つ櫓で取り巻いた。
===73節===
'''カエサルは、攻囲陣地をさらに障害物で補強する'''
*① Erat eodem tempore et materiari et frumentari et tantas munitiones fieri necesse
**材木収集と糧食徴発、およびこれほどの塁壁工事がなされることが、同時に必要であった。
*deminutis nostris copiis, quae longius ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> castris progrediebantur.
**我が方の軍勢(ローマ勢)は減じており、陣営からはるか遠くに進み出ていた。
*Ac nonnumquam opera nostra Galli temptare
**いくたびか、我が方の構築物に、ガッリア人が攻撃すること(を試み)、
*atque eruptionem ex oppido pluribus portis summa vi facere conabantur.
**かつ、<ruby><rb>[[w:オッピドゥム|城塞都市]]</rb><rp>(</rp><rt>オッピドゥム</rt><rp>)</rp></ruby>の多くの門から、主力でもって出撃することを試みた。
*② Quare ad haec rursus opera addendum Caesar putavit,
**そのゆえに、この構築物へさらに(以下の障害物が)付け加えられるべきだとカエサルは考えた。
*quo minore numero militum munitiones defendi possent.
**それによって、より少ない数の兵士で塁壁が防衛されることができるように、と。
[[画像:Archeodrome_Beaune_8.jpg|thumb|right|300px|[[w:アレシアの戦い|アレスィア古戦場]]跡に再現された攻囲陣地(上の画像と同じ物)。堡塁(土塁と障壁と櫓)の前の平地に、樹枝が突き出た「尖り杭」(奥)と落とし穴を枝で覆った「百合」(手前)が見える。]]
[[画像:Trous.de.loup.png|thumb|right|300px|サイコロの五つ目状に並べられた落とし穴「百合」(lilium)の模式図([[w:ウジェーヌ・エマニュエル・ヴィオレ・ル・デュク|ヴィオレ=ル=デュク]]著『中世フランス建築体系辞典』[[s:fr:Dictionnaire raisonné de l’architecture française du XIe au XVIe siècle - Tome 5, Fossé|(s)]]より)。図の上部が五つ目状の配列を、図の下部が落とし穴の断面図を示す。この断面図では、尖らされた樹幹の先端が、傾斜した穴の突き固められた底から4本指ほど突き出ていると解釈しているようである。カエサルの記述からは、地表から突き出ているとも解釈できる。]]
[[画像:Aiguillon.png|thumb|right|200px|鉄の鉤が固定された杭「刺」の模式図([[w:ウジェーヌ・エマニュエル・ヴィオレ・ル・デュク|ヴィオレ=ル=デュク]]著『中世フランス建築体系辞典』[[s:fr:Dictionnaire raisonné de l’architecture française du XIe au XVIe siècle - Tome 5, Fossé|(s)]]より)。]]
[[画像:Archeodrome_Beaune_2.jpg|thumb|right|300px|[[w:アレシアの戦い|アレスィア古戦場]]跡に再現された攻囲陣地(上の画像と同じ物)。いちばん手前に「刺」が再現されている。]]
:
'''尖り杭'''
*Itaque truncis arborum aut admodum firmis ramis abscisis
**こうして、樹木の幹、あるいは非常に強固な枝が切り取られて、
*atque horum delibratis ac praeacutis cacuminibus
**これらの皮がむかれて、<ruby><rb>梢</rb><rp>(</rp><rt>こずえ</rt><rp>)</rp></ruby>が<ruby><rb>尖</rb><rp>(</rp><rt>とが</rt><rp>)</rp></ruby>らされて、
*perpetuae fossae quinos pedes altae ducebantur.
**5[[w:ペース (長さ)|ペース]](約1.5m)ずつの連続した堀が引かれた。
*③ Huc illi stipites demissi
**ここに、あの樹幹が沈められて、
*et ab infimo revincti, ne revelli possent, ab ramis eminebant.
**底から固くしばられて、はぎ取ることができないようにして、枝から(地上に)突き出るようにしていた。
*④ Quini erant ordines coniuncti inter se atque implicati;
**5列ずつが、互いにつなげられて、結び合わされた。
*quo qui intraverant se ipsi acutissimis vallis induebant.
**そこに踏み込んだ者は、自身が自らをきわめて鋭い杭に陥れた。
*Hos cippos appellabant.
**(将兵たちは)これらを<ruby><rb>尖り杭</rb><rp>(</rp><rt>キップス</rt><rp>)</rp></ruby>と呼んだ。
**:<span style="color:#009900;">(訳注:[[wikt:en:cippus|cippus]]「尖り杭」は「墓標」とも訳されるが、後者は古典期以降のラテン語で長方形の墓碑を指す<ref><small>POSTCLASSIQUE</small> <i>[[w:fr:Cippe|cippe]] (colonne funéraire rectangulaire)</i>(ラルース社の羅仏辞典 <small>“Dictionnaire MaxiPoche Plus latin-français et français-latin”</small> を参照)</ref>。)</span>
:
'''百合'''
*⑤ Ante<ref>ante はβ系写本の記述で、α系写本にはない。</ref> quos<ref>quos はα系写本の記述で、β系写本では hos となっている。</ref> obliquis ordinibus in quincuncem dispositis
**それらの前に、(サイコロの)<ruby><rb>五つ目状</rb><rp>(</rp><rt>クィンクンクス</rt><rp>)</rp></ruby>に斜めの列に配置されて、
*scrobes tres in altitudinem pedes fodiebantur
**深さ3ペース(約90cm)の穴が掘られた。
*paulatim angustiore ad infimum fastigio.
**しだいに、より狭く、底の方へ傾斜を付けて。
*⑥ Huc teretes stipites [[w:la:Femur|feminis]] crassitudine
**ここに、太ももの厚さの丸みを帯びた樹幹が
*ab summo praeacuti et praeusti demittebantur,
**先端から尖らせられ、焦がされて(穴の底に)突き刺された。
*ita ut non amplius digitis quattuor ex terra<ref>ex terra はα系写本の記述で、V・ρ系写本では e terra 、T写本では contra となっている。</ref> eminerent;
**4本の指より長くないほど地中から突き出るように。
*⑦ simul confirmandi et stabiliendi causa
**同時に、強固にして固定するために、
*singuli ab infimo solo pedes terra exculcabantur;
**それぞれ底から1ペース(約30cm)だけ土で突き固められた。
*reliqua pars scrobis ad occultandas insidias viminibus ac virgultis integebatur.
**穴の残りの部分は、わなを隠すために、柳の細枝や若枝で覆われた。
*⑧ Huius generis octoni ordines ducti ternos inter se pedes distabant.
**この類いを、8列ずつ、3ペース(約90cm)ずつ互いに離して、作った。
*Id ex similitudine floris lilium appellabant.
**(将兵たちは)それを花との類似から、<ruby><rb>[[w:ユリ|百合]]</rb><rp>(</rp><rt>リリウム</rt><rp>)</rp></ruby>と呼んだ。
:
'''刺'''
*⑨ Ante haec taleae pedem longae ferreis hamis infixis totae in terram infodiebantur
**これらの前に、鉄製の鉤が打ち込まれた長さ1ペース(約30cm)の棒の全体が地中に埋め込まれた。
*mediocribusque intermissis spatiis omnibus locis disserebantur,
**適度な空間を間にあけて、至る所に配置された。
*quos stimulos nominabant.
**(将兵たちは)それらを刺と呼んだ。
{| class="wikitable"
|-
! colspan="2" | [[w:la:Obsidio Alesiae|Obsidio Alesiae]]
|-
| style="vertical-align:top; text-align:left; width:35em;" |[[画像:Fortificazioni alesia png.png|thumb|left|500px|[[w:アレシアの戦い|アレシアの戦い]]における攻囲陣地の構成(図の説明はイタリア語)。]]
|}
===74節===
'''ガッリア人の来援に備えて、外周にも同様の塁壁を張り巡らす'''
*① His rebus perfectis
**これらの物が造り上げられると、
*regiones secutus quam potuit aequissimas pro loci natura
**地勢に応じて、できるかぎり好都合な地帯を探し求めて、
*XIIII(quattuordecim) milia passuum complexus
**14ローママイル(約21km)を取り巻いて、
*pares eiusdem generis munitiones,
**(内周の塁壁と規模が)匹敵する同じ類いの塁壁を
*diversas ab his, contra exteriorem hostem perfecit,
**これら(内周)に対置させて、外側の敵に対抗して造り上げた。
*ut ne magna quidem multitudine, si ita accidat equitatus<ref>equitatus はシェーラー(Schoeller)による修正提案で、写本(ω)では eius であるが、近代の校訂者たちにより修正提案がなされている。</ref> discessu,
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[wikt:en:ne quidem|ne ~ quidem]]「~でさえ…ない」)</span>
**もし[[w:騎兵|騎兵隊]]の退去によりこのようなこと(外敵との遭遇)が生じても、決して大軍により
*munitionum praesidia circumfundi possent;
**塁壁の守備隊が包囲されることができないように。
*② <ne> autem<ref>ne autem は近代の校訂者による修正提案で、α系・π系写本では aut、ρ系写本では ut となっている。</ref> cum periculo ex castris egredi cogatur,
**(ローマ勢が)危険を伴って陣営から進発することを強いられることもないように、
*dierum XXX(triginta) pabulum frumentumque habere omnes convectum iubet.
**30日分の[[w:糧秣|秣(まぐさ)や穀物]]を運び集めて保持することを皆に命じた。
===75節===
'''ガッリア同盟が各部族に動員を要請する'''
*① Dum haec apud<ref>apud はα系写本の記述で、β系写本では ad となっている。</ref> [[w:la:Alesia|Alesiam]] geruntur,
**これらが[[w:アレシア|アレスィア]]のもとで遂行されている間に、
*Galli concilio principum indicto
**ガッリア人たちは、領袖たちの会合を課して、
*non omnes hos<ref>omnes hos はα系写本の記述で、β系写本では単に omnes となっている。</ref> qui arma ferre possent, ut censuit [[w:la:Vercingetorix|Vercingetorix]], convocandos statuunt,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]が見積もったように武器を扱える者たち皆を召集するべき、ではないと判断した。
*sed certum numerum cuique ex civitate<ref>ex civitate はα系写本の記述で、β系写本では civitati となっている。</ref> imperandum,
**けれども、おのおのの部族から一定の兵数(の供出)を命令すること(を決めた)。
*ne tanta multitudine confusa nec moderari nec discernere suos nec frumentandi rationem<ref>frumentandi rationem はT・U・R写本などの記述で、V・U写本などでは frumenti rationem となっている。</ref> habere possent.
**これほどの大軍で混乱したり、味方を指揮できなかったり判別できなかったり、ということがないように。
*② Imperant [[w:la:Haedui|Haeduis]] atque eorum clientibus, Segusiavis, Ambivaretis, Aulercis Brannovicibus, Blannoviis, milia XXXV(triginta quinque);
**[[w:ハエドゥイ族|ハエドゥイー族]]とその庇護民であるセグスィアウィ族、アンビウァレティ族、アウレルキ・ブランノウィケス族、ブランノウィイ族に3万5千名を命令した。
*parem numerum Arvernis adiunctis Eleutetis, Cadurcis, Gabalis, Vellaviis,
**[[w:アルウェルニ族|アルウェルニー族]]に隣接しているエレウテティ族、カドゥルキー族、ガバリ族、ウェッラウィイ族に同等の兵数。
*qui sub imperio Arvernorum esse consuerunt;
**彼らはアルウェルニー族の支配下にいるのが常であった。
*③ Sequanis, Senonibus, Biturigibus, Santonis, Rutenis, Carnutibus duodena milia;
**セクアニ族、セノネース族、ビトゥリゲース族、サントネス族、ルテーニー族、カルヌーテース族には1万2千ずつ。
*Bellovacis X(decem); totidem Lemovicibus;
**ベッロウァキ族に1万。レモウィケス族に同じだけ多く(1万)。
*octona Pictonibus et Turonis et Parisiis et Helvetiis;
**ピクトネス族とトゥロニ族とパリスィイ族と[[w:ヘルウェティイ族|ヘルウェティイ族]]に8(千)ずつ。
*Senonibus<ref>Senonibus は写本(ω)にある記述だが、sen<a Suessi>onibus「6(千)ずつをスエッスィオニス族…に」などさまざまな修正提案がなされている。</ref>, Ambianis, Mediomatricis, Petrocoriis, Nerviis, Morinis, Nitiobrogibus quina milia;
**セノネース族、アンビアニ族、メディオマトリキ族、ペトロコリイ族、ネルウィイ族、モリニ族、ニティオブロゲス族に5千ずつ。
**:<span style="color:#009900;">(訳注:Senonibus「セノネース族」は既出のためスエッスィオネス族などに書き替える修正提案がなされ、以下は校訂版によっては兵数がずれる。</span>
**:<span style="color:#009900;">しかし、スエッスィオネス族 Suessiones は[[ガリア戦記 第2巻#12節|第2巻12節]]でレーミー族を通じてカエサルに降伏しており、</span>
**:<span style="color:#009900;">第8巻6節でも「レーミー族に委ねられていた」「同盟者」と記されているので、アレスィアには出兵していないであろう。)</span>
*Aulercis Cenomanis totidem; Atrebatibus IIII;
**アウレルキ・ケノマニ族に同じだけ多く(5千)。アトレバテス族に4(千)。
*Veliocassis, Lexoviis et Aulercis Eburovicibus terna;
**ウェリオカッセス族、レクソウィイ族とアウレルキ・エブロウィケス族に3(千)ずつ。
*Rauracis et Boiis<ref>Boiis はα系写本の記述で、β系写本では Bois となっている。</ref> bina;
**ラウラキ族とボイイ族に2(千)ずつ。
*XXX<ref>XXX はα系写本の記述で、さまざまな修正提案がなされている。</ref> milia universis civitatibus, quae Oceanum attingunt
**<ruby><rb>大洋<span style="color:#009900;">〔[[w:大西洋|大西洋]]〕</span></rb><rp>(</rp><rt>オーケアヌス</rt><rp>)</rp></ruby>に接する諸部族全体に3万。
**:<span style="color:#009900;">(訳注:この数は写本により異なっており、混乱している。)</span>
*quaeque eorum consuetudine Aremoricae appellantur,
**それらは、彼ら(ガッリア人)の慣習でアレモリカエと呼ばれており、
*quo sunt in numero Coriosolites, Redones, Ambibarii, Caletes, Osismi, Veneti, Lemovices, Unelli.
**コリオソリテス族、レドネス族、アンビバリイ族、カレテス族、オスィスミ族、ウェネティ族、レモウィケス族、ウネッリ族がそれらに数えられる。
*⑤ Ex his Bellovaci suum numerum non compleverunt<ref>compleverunt はα系写本の記述で、β系写本では contulerunt となっている。</ref>,
**これらのうちで、ベッロウァキ族は、自分たちの(割り当てられた)数を満たさなかった。
*quod se suo nomine atque arbitrio cum Romanis bellum gesturos dicebant
**というのは、彼らは自らの名と裁量でもってローマ人と交戦するであろうと言ったのだ。
*neque cuiusquam imperio obtemperaturos;
**(自分たちは)何者の命令にも服従しないであろう、と。
*rogati tamen ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> Commio pro eius hospitio duo milia una miserunt.
**けれども、[[w:コンミウス|コンミウス]]の懇願により、彼を賓客としているために、2千名を一緒に送り出した。
**:<span style="color:#009900;">(訳注:ベッロウァキ族は要求された兵数の5分の1しか出さなかったが、第8巻22節ではこの出兵をも含めてカエサルから責められる。)</span>
===76節===
'''コンミウスもガッリア同盟軍に内応、約25万の大軍が集結'''
*① Huius opera Commii, ut antea demonstravimus, fideli atque utili
**前に述べたように、この[[w:コンミウス|コンミウス]]の信頼すべき有益な働きを
**:<span style="color:#009900;">(訳注:[[ガリア戦記 第4巻#21節|第4巻21節]]・[[ガリア戦記 第4巻#27節|27節]]・[[ガリア戦記 第4巻#35節|35節]]、[[ガリア戦記 第5巻#22節|第5巻22節]]、[[ガリア戦記 第6巻#6節|第6巻6節]]を参照。)</span>
*superioribus annis erat usus in [[w:la:Britannia Maior|Britannia]] Caesar;
**カエサルは先年(BC55~54年)に[[w:ブリタンニア|ブリタンニア]]において役立てていた。
**:<span style="color:#009900;">(訳注:コンミウスは、[[w:ローマによるブリタンニア侵攻 (紀元前55年-紀元前54年)|カエサルのブリタンニア侵攻]]の先導役を務めていた。後にブリタンニアで王となる。)</span>
*quibus ille pro meritis civitatem eius immunem esse iusserat,
**彼(カエサル)はそれらの功績の見返りに、彼(コンミウス)の部族が免税となることを命じており、
*iura legesque reddiderat atque ipsi Morinos attribuerat.
**権能や法度を元に戻してやり、(コンミウス)自身にモリニ族(の統治)をも委ねていた。
*② Tamen tanta<ref>tamen tanta はα系写本の記述で、β系写本では tanta tamen となっている。</ref> universae Galliae consensio fuit libertatis vindicandae et pristinae belli laudis recuperandae,
**けれども、自主独立が求められるべきで、かつての戦争の誉れが取り戻されるべきだという、ガッリア全体の合意があった。
*ut neque beneficiis neque amicitiae memoria moverentur
**その結果、(カエサルからの)厚遇にも友情の記憶にも揺り動かされず、
*omnesque et animo et opibus in id bellum incumberent.
**(ガッリアの)皆が闘志によっても兵力によっても、その戦争に没頭していたのだ。
*③ Coactis equitum milibus VIII(octo) et peditum circiter CCL(ducenti quinquaginta)<ref>CCL はβ系写本の記述で、α系写本では CCXL または CCXXXX となっている。</ref>
**[[w:騎兵|騎兵]]8千騎と[[w:歩兵|歩兵]]およそ250(千)名が徴集されて、
**:<span style="color:#009900;">(訳注:歩兵の数は、β系写本では25万、α系写本では24万と異なっている。)</span>
*haec in Haeduorum finibus recensebantur, numerusque inibatur, praefecti constituebantur.
**これら(の軍勢)が[[w:ハエドゥイ族|ハエドゥイー族]]の領土で閲兵されて、数が見積もられて、指揮官たちが決められた。
*④ Commio Atrebati, Viridomaro et [[w:la:Eporedorix|Eporedorigi]] [[w:la:Haedui|Haeduis]],
**アトレバテス族の[[w:コンミウス|コンミウス]]、ハエドゥイー族のウィリドマルスとエポレドリクス、
*[[w:la:Vercassivellaunus|Vercassivellauno]] Arverno, consobrino Vercingetorigis, summa imperii traditur.
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の従兄弟である[[w:アルウェルニ族|アルウェルニー族]]のウェルカッスィウェッラウヌスに、最高司令権が託された。
*His delecti ex civitatibus attribuuntur, quorum consilio bellum administraretur.
**彼らに、諸部族から選ばれた者たちが付与されて、その者たちの協議により戦争が指導された。
*⑤ Omnes alacres et fiduciae pleni ad [[w:la:Alesia|Alesiam]] proficiscuntur,
**皆が、活気があって自身に満ち、[[w:アレシア|アレスィア]]へ向けて出発した。
*⑥ neque erat omnium quisquam qui adspectum modo tantae multitudinis sustineri posse arbitraretur,
**これほどの大軍を一見しただけで持ちこたえられる者は、誰一人いないと思われた。
*praesertim ancipiti proelio,
**とりわけ(内周と外周の)両面の戦闘で、
*cum ex oppido eruptione pugnaretur, foris tantae copiae equitatus peditatusque cernerentur.
**城塞都市からは出撃により戦われ、外からは騎兵と歩兵のこれほどの軍勢が視認されるのであるから。
===77節===
'''飢餓状態のアレスィアで、クリトグナトゥスが極論を唱える'''
*① At ii qui [[w:la:Alesia|Alesiae]] obsidebantur
**ところが、[[w:アレシア|アレスィア]]に包囲されていた者たちは、
*praeterita die qua auxilia suorum exspectaverant,
**味方の援軍を待ち望んでいた日も経過して、
*consumpto omni frumento,
**すべての糧食を消費し尽くして、
*inscii quid in [[w:la:Haedui|Haeduis]] gereretur,
**[[w:ハエドゥイ族|ハエドゥイー族]]のところにおいて何がなされているのかを知らず、
*concilio coacto de exitu suarum fortunarum consultabant.
**会合を召集して、自分たちの命運の結末について協議した。
*② Ac variis dictis sententiis
**そして、さまざまな意見が述べられた。
*quarum pars deditionem,
**それらの一部は降伏を、
*pars dum vires suppeterent eruptionem censebat,
**別の一部は、活動力が十分にある間に突撃することを考慮していた。
*non praetereunda oratio [[w:la:Critognatus|Critognati]] videtur propter eius singularem et nefariam crudelitatem.
**クリトグナトゥスの演説は、彼の特異で非道な残酷さのために、看過されるべきではないと思われる。
<br>
'''クリトグナトゥスの演説が始まる'''
*③ Hic summo in Arvernis ortus loco et magnae habitus auctoritatis,
**彼は、[[w:アルウェルニ族|アルウェルニー族]]において最高の身分に生まれ、大きな影響力を持つとみなされていた。
<br>
'''降伏論者は最低の輩だ'''
*"Nihil" inquit "de eorum sententia dicturus sum, qui turpissimam servitutem deditionis nomine appellant,
**「最も恥ずべき隷属を降伏という名で呼んでいる者たちの意見については、(私は)何も述べないであろう」と言った。
*neque hos habendos civium loco neque ad concilium adhibendos censeo.
**「この者たちは市民の身分を持つべきではないし、会合へ招き入れられるべきでもない、と(私は)考える。
<br>
'''突撃論者には辛抱が欠けている'''
*④ Cum his mihi res sit, qui eruptionem probant;
**突撃に賛同した者たちとともに、私の関わりはあるべきだ。
*quorum in consilio omnium vestrum consensu
**その者たちの考えには、君たち皆の同意があるだろうし、
*pristinae residere virtutis memoria videtur.
**かつての武勇の記憶が残っていることと思われる。
*⑤ Animi est ista mollitia, non virtus, paulisper inopiam ferre non posse.
**しばらくの間も(糧食の)欠乏に耐えることができない(君らの)ことは、気の弱さであって、武勇ではない。
*Qui se ultro morti offerant facilius reperiuntur quam qui dolorem patienter ferant.
**自発的に玉砕して逝った者たちは、苦痛に辛抱強く耐えた者たちよりも、より容易に見出されるのだ。
*⑥ Atque ego hanc sententiam probarem ─tantum apud me dignitas potest─,
**しかし私は(突撃という)この意見に賛同したであろう。それほど、私にとっても価値がある。
*si nullam praeterquam vitae nostrae iacturam fieri viderem;
**(ただし)もし、我々(ガッリア勢)の生命が投げ出されること以外に(方策が)何もないと思ったならばだ。
*⑦ sed in consilio capiendo omnem Galliam respiciamus, quam ad nostrum auxilium concitavimus.
**けれども、作戦を立てるに当たっては、我々のために援軍を(我々が)呼び寄せた全ガッリアを顧慮しよう。
*⑧ Quid hominum milibus LXXX(octoginta) uno loco interfectis
**(我々ガッリア勢)8万の人間が(アレスィア)1か所で殺戮されたら、
*propinquis consanguineisque nostris animi fore existimatis,
**我々の親類縁者たちの士気はどうなると(君らは)判断しているのか。
*si paene in ipsis cadaveribus proelio decertare cogentur?
**もし、ほとんど(我々)自身の亡骸の中で(味方が)決戦することを強いられたら?
*⑨ Nolite hos vestro auxilio exspoliare qui vestrae salutis causa suum periculum neglexerunt,
**君らの身の安全のために、己の危険を顧みなかった者たちのことを、君らが援助すること(の機会)を奪わないでくれ。
*nec stultitia ac temeritate vestra aut animi imbecillitate omnem Galliam prosternere et perpetuae servituti subicere.
**君らの愚かさや無思慮、または心の弱さによって、全ガッリアを滅ぼすことや永久の隷属に委ねることがないように。
<br>
'''ローマ人たちが恐れているのを見よ'''
*⑩ An quod ad diem non venerunt, de eorum fide constantiaque dubitatis?
**それとも(援軍が)期日までにやって来なかったので、彼らの誠実さや剛直さについて(君らは)疑っているのか?
*Quid ergo?
**それでは(あれは)何だ?
*Romanos in illis ulterioribus munitionibus animine causa cotidie exerceri putatis?
**ローマ人たちがあの向こう側の塁壁のところで、趣味のために毎日たえず働かされていると(君らは)思うのか?
*⑪ Si illorum nuntiis confirmari non potestis omni aditu praesaepto,
**もし、すべての出入口を(防柵で)遮られて、(援軍の到来を)彼らの伝令により(君らが)確証できないのならば、
*his utimini testibus adpropinquare eorum adventum,
**こちらの者たち(ローマ人)を、彼ら(援軍)の到来が近づいている証人として示せ。
*cuius rei timore exterriti diem noctemque in opere versantur.
**(援軍の到来という)その事態の恐れに戦慄して(ローマ人たちは)昼も夜も工事に従事しているのだ。
<br>
'''クリトグナトゥスの意見は?'''
*⑫ Quid ergo mei consilii est?
**それでは、私の考えは何であるか?
*Facere quod nostri maiores nequaquam pari bello Cimbrorum Teutonumque fecerunt:
**我々の先祖たちが(今回とは)決して比べものにならない[[w:キンブリ・テウトニ戦争|キンブリ族・テウトニ族との戦争]]でしたことをするのだ。
*qui in oppida compulsi ac simili inopia subacti
**彼ら(先祖たち)は、[[w:オッピドゥム|城塞都市]]に押し込められて、(今回と)似たような欠乏により衰弱させられて、
*eorum corporibus, qui aetate ad bellum inutiles videbantur, vitam toleraverunt
**加齢により戦争に役立たないと思われた者たちの肉体(を食べること)によって、生命を持ちこたえて、
*neque se hostibus tradiderunt.
**敵方に降伏しなかったのだ。
*⑬ Cuius rei si exemplum non haberemus,
**もし、そういう事態の先例を我々が持たなかったとしても、
*tamen libertatis causa institui et posteris prodi pulcherrimum iudicarem.
**けれども、自由のために、最も栄誉なことが決断され、子孫たちに伝えられることと、私は思いたい。
*⑭ Nam quid illi simile bello fuit?
**実際、あの戦争に(今回と)似ている何があっただろうか?
*Depopulata Gallia Cimbri magnaque inlata calamitate
**キンブリ族はガッリアを荒らしまわって、大きな災禍をもたらしたが、
*finibus quidem nostris aliquando excesserunt atque alias terras petierunt;
**あるとき我々の領土から立ち去って、他の土地を求めて行った。
*iura, leges, agros, libertatem nobis reliquerunt.
**権限、法度、耕地、自由を我々(ガッリア人)に残して行ったのだ。
*⑮ Romani vero quid petunt aliud aut quid volunt
**しかし、ローマ人たちは(以下に挙げることの)他に何を求め、何を欲しているのだろうか。
**:<span style="color:#009900;">(訳注:「しかし、ローマ人が求め、欲しているのは、以下のことである」の意。)</span>
*nisi invidia adducti quos fama nobiles potentesque bello cognoverunt,
**高貴で戦争に力強い(ガッリアの)者たちを名声で知って羨望に駆られた以外には、
*horum in agris civitatibusque considere atque his aeternam iniungere servitutem?
**彼らの土地や部族共同体に居座って、彼らを永遠の隷属を課すること以外には。
*Neque enim ulla alia condicione bella gesserunt.
**実際、(ローマ人は)他のいかなる条件でも決して戦争を遂行したことがなかった。
*⑯ Quodsi ea quae in longinquis nationibus geruntur ignoratis,
**もし、遠方の種族のところでなされていることを(君らが)知らないのであれば、
*respicite finitimam Galliam,
**ガッリアの隣人たちを見渡しなさい。
*quae in provinciam redacta,
**(彼らはローマの)[[w:属州|属州]]になることを余儀なくされ、
*iure et legibus commutatis,
**権限や法度を変えられて、
*securibus subiecta perpetua premitur servitute."
**(ローマの)権力に服属させられて、永久の隷属に苦しめられているのだ。
===78節===
'''マンドゥビイ族の投降をカエサルが拒む'''
*① Sententiis dictis
**(いくつかの)意見が述べられて、
*constituunt ut ii, qui valetudine aut aetate inutiles sunt<ref>sunt はα系写本の記述で、β系写本では sint となっている。</ref> bello, oppido excedant
**(ガッリア人たちは)健康または年齢により戦争に役立たない者たちは[[w:オッピドゥム|城塞都市]]を退去するように決めた。
*atque omnia prius experiantur quam ad Critognati sententiam descendant;
**さらに、クリトグナトゥスの意見に同意するよりも、まずあらゆることを試みるように(決めた)。
*② illo tamen potius utendum consilio,
**けれども(以下の場合には)むしろ彼(クリトグナトゥス)の意見を実行するべきだ。
*si res cogat atque auxilia morentur,
**もし、事態が強いて、援軍が遅滞させられるのならば、
*quam aut deditionis aut pacis subeundam condicionem.
**降伏あるいは講和条件を受諾することよりも(クリトグナトゥスの意見を実行するべきだ)、と。
*③ Mandubii qui eos oppido receperant,
**彼ら(ガッリア勢)を城塞都市に受け入れていたマンドゥビイ族は、
*cum liberis atque uxoribus exire coguntur.
**子供たちや妻女たちとともに(城塞都市から)出て行くことを強いられた。
*④ Hi cum ad munitiones Romanorum accessissent,
**彼らは、ローマ人たちの塁壁のところへ近づいたときに、
*flentes omnibus precibus orabant, ut se in servitutem receptos cibo iuvarent.
**自分たちを奴隷として受け入れて食糧で助けてくれるように、泣きながらあらゆる懇願で頼んだ。
*⑤ At Caesar dispositis in vallo custodibus<ref>custodibus はα系写本の記述で、β系写本では custodiis となっている。</ref> recipi prohibebat.
**だが、カエサルは、防柵の中に番兵を分けて置き、(マンドゥビイ族を)受け入れることを禁じた。
===79節===
'''ガッリア同盟軍の来援、アレスィアの歓呼'''
*① Interea Commius reliquique duces, quibus summa imperii permissa erat,
**その間に、最高司令権を任されていた[[w:コンミウス|コンミウス]]とほかの将帥たちが、
*cum omnibus copiis ad Alesiam perveniunt
**すべての軍勢とともに[[w:アレシア|アレスィア]]の辺りへ到着して、
*et colle exteriore occupato
**より外側の丘陵を占拠して、
**:<span style="color:#009900;">(訳注:現在のミュスィ=ラ=フォス村 [[w:fr:Mussy-la-Fosse|Mussy-la-Fosse]]<ref>[http://maps.google.com/maps?q=47.521944,4.438611&hl=fr&ie=UTF8&ll=47.522012,4.438648&spn=0.01849,0.027423&t=h&z=15 Google map]を参照。</ref> のある丘陵であると思われる。)</span>
*non longius mille passibus ab nostris munitionibus considunt.
**我が方(ローマ勢)の塁壁から1ローママイル(約1.5km)ほども遠くないところに陣取った。
**:<span style="color:#009900;">(訳注:現在のヴナレ=レ=ローム [[w:fr:Venarey-les-Laumes|Venarey-les-Laumes]] 市街<ref>[http://maps.google.com/maps?q=47.542778,4.445833&hl=fr&ie=UTF8&ll=47.543106,4.458475&spn=0.036965,0.054846&t=h&z=14 Google map]を参照。</ref>の周辺であると思われる。)</span>
*② Postero die equitatu ex castris educto
**翌日に、[[w:騎兵|騎兵隊]]が陣営から進発させられて、
*omnem eam planitiem quam in longitudinem milia passuum III(tria)<ref>milia passuum III はβ系写本の記述で、α系写本では quattuor milia passuum などとなっている。</ref> patere demonstravimus, complent
**3ローママイル(約4.5km)の長さにわたり広がっていることを既述した平地のすべてを、満たした。
**:<span style="color:#009900;">(訳注:[[#69節|69節]]を参照。現在のローム平原に当たると思われる。)</span>
*pedestresque copias paulum ab eo loco abditas in locis superioribus constituunt.
**[[w:歩兵|歩兵]]の軍勢を、その地からいくらか遠ざけて、より高いところに駐留させた。
**:<span style="color:#009900;">(訳注:上記の丘陵のより高い所であると思われる。)</span>
*③ Erat ex oppido Alesia despectus in campum.
**アレスィアの[[w:オッピドゥム|城塞都市]]からは(その)平地に眺望があった。
*Concurrunt<ref>concurrunt はα系写本の記述で、β系写本では concurritur となっている。</ref> his auxiliis visis;
**これらの援軍が現われると(アレスィアのガッリア人たちは)群がり集まった。
*fit gratulatio inter eos
**彼らの間で祝賀がなされて、
*atque omnium animi ad laetitiam excitantur.
**皆の心が喜びへと鼓舞された。
*④ Itaque productis copiis ante oppidum considunt
**こうして(アレスィアの)軍勢が出撃させられて、城塞都市の前に陣取って、
*et proximam fossam cratibus integunt atque aggere explent
**最も近い堀を、柴で蔽って、土砂を充満させて、
*seque ad eruptionem atque omnes casus comparant.
**突撃やあらゆる有事に戦備を整えた。
===80節===
'''ゲルマニア騎兵らローマ勢が来援ガッリア騎兵をも打ち破る'''
*① Caesar omni exercitu ad utramque partem munitionum<ref>munitionum はα系写本の記述で、β系写本では munitionis となっている。</ref> disposito,
**カエサルは、すべての[[w:歩兵|歩兵隊]]を、塁壁の(内周と外周)両側に分けて置き、
*ut, si usus veniat, suum quisque locum teneat et noverit,
**もし、必要が生じたら、おのおのが自らの部署を知って固守するようにした。
*equitatum ex castris educi et proelium committi iubet.
**[[w:騎兵|騎兵隊]]を陣営から進発させて、交戦することを命じた。
*② Erat ex omnibus castris, quae summum undique iugum tenebant, despectus
**至る所で尾根の頂きを占めていた(ローマ勢の)すべての陣営から(騎兵戦の)眺望があった。
*atque omnes milites intenti<ref>intenti はα系写本の記述で、β系写本では intenti animi、Fuchs は intentis animis と修正提案している。</ref> pugnae proventum<ref>pugnae proventum はα系写本の記述で、β系写本では proventum pugnae となっている。</ref> exspectabant.
**すべての兵士たちは(観戦に)没頭して、戦いの結果を待っていた。
*③ Galli inter equites raros sagittarios expeditosque levis armaturae interiecerant,
**ガッリア人たちは、弓兵たちと軽装歩兵たちをまばらに、騎兵たちの間に置いていて、
*qui suis cedentibus auxilio succurrerent
**その者たち(弓兵と軽装歩兵)は、味方が後退するのを支援するために馳せ寄って、
*et nostrorum equitum impetus sustinerent.
**我が方(ローマ勢)の騎兵の突撃に持ちこたえていた。
*Ab his complures de improviso vulnerati proelio excedebant.
**彼らによって(ローマ側騎兵の)かなりの者たちが、思いがけず負傷させられて、戦闘から退いた。
*④ Cum suos pugna superiores esse Galli confiderent
**ガッリア人たちが、味方が戦いで優勢であることを確信したとき、
*et nostros multitudine premi viderent,
**かつ、我が方(ローマ勢)が多勢(のガッリア騎兵)により圧倒されているのを見て取ったときに、
*ex omnibus partibus et ii qui munitionibus continebantur
**あらゆる方面から(ローマ勢の)塁壁によって囲まれていた者たちも、
*et hi<ref>hi はφ系・β系写本の記述で、χ系写本では ii となっている。</ref> qui ad auxilium convenerant
**(アレスィア)救援のために集結して来ていた者たちも、
*clamore et ululatu suorum animos confirmabant.
**大声やわめき声によって味方の闘志を強めた。
*⑤ Quod in conspectu omnium res gerebatur
**(両軍の)皆の環視の中で合戦が遂行されたので、
*neque recte ac<ref>ac はα系・π系写本の記述で、ρ系写本では aut となっている。</ref> turpiter factum celari poterat,
**立派な行為または見苦しい行為も隠されることができなかったので、
*utrosque et laudis cupiditas et timor ignominiae ad virtutem excitabant<ref>excitabant はB・M・L・N・R写本などの記述で、χ系・B・S・π系・U写本などでは excitabat となっている。</ref>.
**賞賛への功名心も、不名誉への恐れも、双方を武勇へと駆り立てた。
*⑥ Cum a meridie prope ad solis occasum dubia victoria pugnaretur,
**正午から、ほぼ日没の頃まで、勝利が不確実なまま戦われていたときに、
*Germani una in parte confertis turmis
**ゲルマニア人たちが、騎兵部隊を一か所に密集させて、
*in hostes impetum fecerunt eosque propulerunt;
**敵方に突撃を行ない、彼ら(ガッリア騎兵)を駆逐した。
*⑦ quibus in fugam coniectis
**その者たち(ガッリア騎兵)は逃亡に追いやられて、
*sagittarii circumventi interfectique sunt.
**弓兵たちは包囲されて殺戮された。
*⑧ Item ex reliquis partibus nostri cedentes usque ad castra insecuti
**我が方(ローマ勢)の残りの部隊も、撤退する(ガッリア騎兵の)者たちを陣営のところまで追撃して、
*sui colligendi facultatem non dederunt.
**立ち直る機会を与えなかった。
*⑨ At ii qui ab [[w:la:Alesia|Alesia]] processerant,
**そして、[[w:アレシア|アレスィア]]から進み出ていた者たちは、
*maesti prope victoria desperata se in oppidum receperunt.
**ほとんど絶望的な勝利に悲嘆して、城塞都市に退却した。
===81節===
'''ガッリア来援軍と籠城軍がローマ陣地に夜襲をしかける'''
*① Uno die intermisso Galli
**ガッリア人たちは一日を間に置いて、
*atque hoc spatio magno cratium, scalarum, harpagonum numero effecto
**この間に、多数の柴、[[w:梯子|梯子]]、鉤竿を調達して、
*media nocte silentio ex castris egressi
**真夜中に静けさのうちに陣営から進発して、
*ad campestres munitiones accedunt.
**平地の(ローマ勢の)塁壁の辺りへ近づいた。
*② Subito clamore sublato, qua significatione
**突然に雄叫びを上げて、それを合図として、
*qui in oppido obsidebantur de suo adventu cognoscere possent,
**[[w:オッピドゥム|城塞都市]]の中に包囲されている者たちが、自分たちの到来について認識できるようにした。
*crates proicere, fundis, sagittis, lapidibus nostros de vallo proturbare
**柴を投げ込み、投石器で、矢で、石でもって我が方(ローマ勢)を防柵から追い出すこと、
*reliquaque quae ad oppugnationem pertinent parant administrare.
**(塁壁の)攻略のために役立つほかのことに従事すること、を目論んだ。
*③ Eodem tempore clamore exaudito
**同時に(来援軍の)雄叫びを聞き取って、
*dat tuba signum suis [[w:la:Vercingetorix|Vercingetorix]] atque ex oppido educit.
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、麾下の者たちにラッパで指図を与えて、城塞都市から進発させた。
*④ Nostri, ut superioribus diebus, suus cuique<ref>suus cuique はβ系写本の記述で、χ系・B・M・S写本では ut cuique となっている。</ref> erat locus attributus, ad munitiones accedunt;
**我が方(ローマ勢)は、以前の日々に、おのおのの部署が割り当てられており、塁壁のところへ近寄った。
*fundis librilibus sudibusque, quas in opere disposuerant, ac glandibus Gallos proterrent.
**堡塁に分配されていたポンド投石器や杭、並びに玉によって、ガッリア人たちを追い払った。
**:<span style="color:#009900;">(訳注:librilis funda「ポンド投石器」;古代ローマの1ポンド [[w:la:Libra pondus|libra]] は約327グラム<ref>[[w:en:Ancient Roman units of measurement#Weight]]を参照。</ref>。)</span>
*⑤ Prospectu tenebris adempto multa utrimque vulnera accipiuntur.
**眺望が暗闇により奪われて、双方が多くの傷を蒙った。
*Complura tormentis tela coniciuntur.
**かなり多くの飛び道具が(巻上式)投石機によって投じられた。
*⑥ At [[w:la:Marcus Antonius|M.(Marcus) Antonius]] et [[w:la:Gaius Trebonius|C.(Gaius) Trebonius]] legati,
**[[w:マルクス・アントニウス|マルクス・アントニウス]]と[[w:ガイウス・トレボニウス|ガイウス・トレボニウス]] [[w:レガトゥス|両副官]]は、
*quibus hae partes ad defendendum obvenerant,
**この方面を防衛するために割り当てられていたが、
*qua ex parte nostros premi intellexerant,
**我が方(ローマ勢)が押されぎみであると見なした一帯のために、
*his auxilio ex ulterioribus castellis deductos submittebant.
**この者たちを支援するために、向こう側の砦から引き出した者たちを(援兵として)派遣した。
===82節===
'''アレスィア内外のガッリア勢が障害物に阻まれて退く'''
*① Dum longius ab munitione aberant Galli,
**ガッリア人たちは(ローマ勢の)塁壁から遠くに離れていた間は、
*plus multitudine telorum proficiebant;
**飛び道具の多さによって、前進していた。
*posteaquam propius successerunt,
**(塁壁の方へ)さらに近くに進入して来た後では、
*aut se ipsi<ref>ipsi はβ系写本の記述で、α系写本にはない。</ref> stimulis inopinantes induebant
**あるいは、思いがけず自ら「刺」に陥り、
**:<span style="color:#009900;">(訳注:stimulus「刺」については、[[#73節|73節]]⑨項を参照。)</span>
*aut in scrobes delati transfodiebantur
**あるいは、穴に陥落して(「百合」で)突き刺されたり、
**:<span style="color:#009900;">(訳注:「穴」と「百合」については、[[#73節|73節]]⑤~⑧項を参照。)</span>
*aut ex vallo ac turribus traiecti pilis muralibus interibant.
**あるいは、防柵や櫓から[[w:ピルム・ムーリアリス|防壁槍]]で射抜かれて逝った。
**:<span style="color:#009900;">(訳注:防壁槍については、[[ガリア戦記 第5巻#40節|第5巻40節]]を参照。)</span>
*② Multis undique vulneribus acceptis
**(ガッリア勢は)至る所で多くの傷を負ったが、
*nulla munitione perrupta,
**どの(ローマ側の)塁壁も突破されなかった。
*cum lux appeteret,
**<ruby><rb>暁光</rb><rp>(</rp><rt>ぎょうこう</rt><rp>)</rp></ruby>が(空を)染めたとき、
*veriti ne ab latere aperto ex superioribus castris eruptione circumvenirentur,
**開けた側面から、(ローマ勢の)高所の陣営からの突撃によって包囲されないようにと怖れて、
**:<span style="color:#009900;">(訳注:開けた側面とは、盾で守られていない右側のこと。)</span>
*se ad suos receperunt.
**味方のところへ退却した。
*③ At interiores
**それに対して、(アレスィア攻囲の)内側の者たちは、
*dum ea quae a [[w:la:Vercingetorix|Vercingetorige]] ad eruptionem praeparata erant<ref>praeparata erant は、写本(ω)ではpraeparaverant だが、このように修正提案されている。あるいは、a Vercingetorige が削除提案されている。</ref> proferunt,
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]により、突撃のために準備していたものを運び出して
*priores fossas explent,
**一番前の堀を埋めている間に、
*diutius in his rebus administrandis morati
**これらの事に従事することに、より長く妨げられて、
*prius suos discessisse cognoverunt quam munitionibus adpropinquarent.
**塁壁に近づくよりも前に味方(=来援軍)が退去したことを知ったのだ。
*Ita re infecta in oppidum reverterunt.
**こうして、事は達成されていないものの、[[w:オッピドゥム|城塞都市]]に引き返した。
===83節===
'''ウェルカッスィウェッラウヌスが兵6万を率いて急所の丘へ向かう'''
*① Bis magno cum detrimento repulsi Galli
**大きな損害とともに二度も撃退されたガッリア人たちは、
*quid agant consulunt;
**何をなすべきかを協議した。
*locorum peritos adhibent;
**(その)土地に熟知した者たちを招いた。
*ex his superiorum castrorum situs munitionesque cognoscunt.
**この者たちから、(ローマ勢の)高いところの陣営の位置や塁壁を調べ上げた。
*② Erat a septentrionibus collis,
**(アレスィアの)北方に丘陵があって、
**:<span style="color:#009900;">(訳注:これは現在のレア山 le Mont Réa であると思われ、山頂にはメネルー=ル=ピトワ村<ref>[[w:fr:Ménétreux-le-Pitois]]や[http://maps.google.fr/maps?f=q&hl=fr&geocode=&q=m%C3%A9n%C3%A9treux+le+pitois&sll=42.423457,8.789063&sspn=23.611541,40.957031&ie=UTF8&t=h&hq=&hnear=M%C3%A9n%C3%A9treux-le-Pitois,+C%C3%B4te-d'Or,+Bourgogne&ll=47.55475,4.460106&spn=0.018507,0.010042&z=15 Google map]などを参照。</ref>がある。)</span>
*quem propter magnitudinem circuitus
**その周囲の大きさのために、
*opere circumplecti non potuerant nostri,
**我が方(ローマ勢)は、堡塁により囲い込むことができずにいた。
*necessarioque<ref>-que はβ系写本の記述で、α系写本にはない。</ref> paene iniquo loco et leniter<ref>leniter はπ系写本の記述で、α系・ρ系写本では leviter となっている。</ref> declivi castra fecerunt<ref>fecerunt はα系写本の記述で、β系写本では fecerant となっている。</ref>.
**やむをえず、ほとんど不利でゆるやかに傾斜した地点に陣営を造った。
*③ Haec C.(Gaius) Antistius Reginus et C.(Gaius) Caninius Rebilus legati
**これを、ガーイウス・アンティスティウス・レーギーヌスとガイウス・カニニウス・レビルス [[w:レガトゥス|両副官]]が
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''[[w:fr:Caius Antistius Reginus|Gaius Antistius Reginus]]'' は[[ガリア戦記_第6巻#1節|第6巻1節]]で既出。[[#90節|90節]]で後出。)</span>
*cum duabus legionibus obtinebant.
**2個軍団とともに占めていた。
*④ Cognitis per exploratores regionibus duces hostium
**敵方の将帥たちは、偵察者たちを通じて一帯を調べ上げて、
*LX(sexaginta) milia ex omni numero deligunt
**総員のうちから6万名を選抜した。
*earum civitatum quae maximam virtutis opinionem habebant;
**武勇において大きな評判を得ている部族のうち(から選抜した)。
*⑤ quid quoque pacto agi placeat, occulte inter se constituunt;
**何が、どんな方法で行なわれるのがよいか、互いに密かに取り決めた。
*adeundi tempus definiunt, cum meridie<ref>meridie は中世の写本(ω)の記述であるが、近世の写本(ς)では meridies となっている。</ref> esse videatur.
**正午であると思われる頃を突撃する時と定めた。
*⑥ His copiis Vercassivellaunum Arvernum,
**この軍勢を、[[w:アルウェルニ族|アルウェルニー族]]のウェルカッスィウェッラウヌス、
*unum ex quattuor ducibus, propinquum [[w:la:Vercingetorix|Vercingetorigis]], praeficiunt.
**(すなわち)4人の将帥たちの1人で、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]の親族である者に、指揮させた。
*⑦ Ille ex castris prima vigilia egressus
**彼(ウェルカッスィウェッラウヌス)は、陣営から第一夜警時に進発して、
*prope confecto sub lucem itinere
**夜明け前にほぼ行軍が成し遂げられて、
*post montem se occultavit
**山の後ろに身を隠して、
*militesque ex nocturno labore sese reficere iussit.
**兵士たちに夜間の疲労を回復しておくことを命じた。
*⑧ Cum iam meridies adpropinquare videretur,
**すでに正午に近付いていると思われたときに、
*ad ea castra, quae supra demonstravimus, contendit;
**前に述べた陣営のところへ急いだ。
**:<span style="color:#009900;">(訳注:本節②項を参照。)</span>
*eodemque tempore equitatus ad campestres munitiones accedere
**同時に(ガッリア来援軍の)[[w:騎兵隊|騎兵隊]]が平地の(ローマ勢の)塁壁のところへ近付き、
*et reliquae copiae pro castris sese ostendere coeperunt.
**残りの軍勢が陣営の前に姿を現わし始めた。
===84節===
'''ウェルキンゲトリークスらアレスィア籠城軍も善戦する'''
*① [[w:la:Vercingetorix|Vercingetorix]] ex arce [[w:la:Alesia|Alesiae]] suos conspicatus ex oppido egreditur;
**[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は、[[w:アレシア|アレスィア]]の高台から味方を望見して、[[w:オッピドゥム|城塞都市]]から進発した。
*a castris<ref>a castris はβ系写本の記述で、α系写本では単に castris となっている。</ref>, longurios, musculos, falces
**陣営から、長い竿、小屋、破城鎌や、
**:<span style="color:#009900;">(訳注:falx「破城鎌」については、[[ガリア戦記 第5巻#42節|第5巻42節]]を参照。)</span>
*reliquaque quae eruptionis causa paraverat profert.
**(塁壁を)突破するために準備していたほかのものを運び出した。
*② Pugnatur uno tempore omnibus locis atque omnia temptantur;
**一時にあらゆる場所で戦われて、あらゆることが試みられた。
*quae minime visa pars firma est, huc concurritur.
**あまり堅固ではないと思われる部分、ここへ襲いかかった。
*③ Romanorum manus tantis munitionibus distinetur
**ローマ人の手勢は、これほどの(長大な)塁壁により離して置かれていて、
*nec facile pluribus locis occurrit.
**より多くの場所には容易に駆け付けられなかった。
*④ Multum ad terrendos nostros valet clamor qui post tergum pugnantibus exstitit,
**戦っている者たちの背後で生じた雄叫びは、我が方(ローマ勢)を怖れさせるために大いに力があった。
*quod suum periculum in aliena vident virtute<ref>virtute「武勇」 はβ系写本の記述で、α系写本では salute「安全」 となっている。</ref> constare;
**というのは、自分たち(ローマ勢)の危険が他人(ガッリア勢)の武勇に依拠していると思ったから。
*omnia enim plerumque, quae absunt, vehementius hominum mentes perturbant.
**なぜなら(そこに)不在であるものすべてはたいてい、人間の心を激しく混乱させるものであったからである。
===85節===
'''ウェルカッスィウェッラウヌスが急所の丘を攻める'''
*① Caesar idoneum locum nactus
**カエサルは適当な場所を得て,
*quid quaque in<ref>quaque in はβ系写本の記述で、α系写本では qua ex となっている。</ref> parte geratur cognoscit;
*何が各方面でなされているのかを認識した。
*laborantibus submittit.
**苦戦している者たちに(援兵を)派遣した。
*② Utrisque ad animum occurrit unum esse illud tempus, quo maxime contendi conveniat:
**双方にとって、最も雌雄を決するべきはこの時のみであるということが、心に生じた。
*③ Galli, nisi perfregerint munitiones, de omni salute desperant;
**ガッリア人たちは、(ローマ人の)塁壁を突破しない限り、あらゆる身の安全に絶望することになる。
*Romani, si rem obtinuerint, finem laborum omnium exspectant.
**ローマ人は、もし事を成就したら、すべての労苦の終わるということを期待した。
*④ Maxime ad superiores munitiones laboratur, quo [[w:la:Vercassivellaunus|Vercassivellaunum]] missum demonstravimus.
**ウェルカッスィウェッラウヌスが派遣されたと既述した、より高い塁壁の辺りで(ローマ勢は)とりわけ苦戦した。
*Iniquum loci ad declivitatem fastigium magnum habet momentum.
**けわしい地形の不利な傾斜が(ローマ勢にとって)大きな影響力を持った。
*⑤ Alii tela coniciunt, alii testudine facta subeunt;
**(ガッリア勢の)ある者は飛び道具を投げやって、ある者は[[w:テストゥド|亀甲陣形]]を形成して突き進んだ。
*defatigatis invicem integri succedunt.
**疲労させられた者たちに対しては、新手の者たちが交代した。
*⑥ Agger ab universis in munitionem coniectus
**土が総勢により(ローマ人の)塁壁に投じられて、
*et ascensum dat Gallis
**ガッリア人たちに登り道を与えもしたし、
*et ea, quae in terra occultaverant Romani, contegit;
**ローマ人たちが地中に隠しておいたもの(障害物)を埋め込んでしまった。
*nec iam arma nostris nec vires suppetunt.
**我が方(ローマ勢)には、もはや武器も活力も十分になかった。
===86節===
'''危急存亡の秋、両軍の苦闘'''
*① His rebus cognitis
**これらの事態を知って、
*Caesar [[w:la:Titus Labienus|Labienum]] cum cohortibus sex subsidio laborantibus mittit;
**カエサルは、[[w:ティトゥス・ラビエヌス|ラビエーヌス]]を6個<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>とともに援兵として苦戦している者たちへ派遣した。
*② imperat, si sustinere non possit<ref>possit はχ系・B・M・S・β系写本の記述で、L・N写本では posset となっている。</ref>, deductis cohortibus eruptione pugnaret<ref>pugnaret はα系写本の記述で、β系写本では pugnet となっている。</ref>;
**もし(塁壁の防衛が)持ちこたえられなかったならば、諸大隊を引率して突撃によって戦うように、と命令していた。
*id nisi necessario ne faciat.
**それは、やむをえないのでなければ行なわないように(と命じていた)。
*③ Ipse adit reliquos, cohortatur ne labori succumbant;
**(カエサル)自身は、ほかの者たちを訪れて、労苦に屈服しないようにと鼓舞した。
*omnium superiorum dimicationum fructum in eo die atque hora docet consistere.
**これまでのあらゆる奮闘の結実がこの日、この時にかかっていることを説いた。
*④ Interiores desperatis campestribus locis propter magnitudinem munitionum
**(アレスィアに包囲されている)内側の者たちは、塁壁の大規模さのために、平坦な地点(での突破)を断念して、
*loca praerupta ex ascensu temptant;
**けわしい場所を登り坂から攻撃してみた。
*huc ea quae paraverant conferunt.
**ここに、準備していたものを運び集めた。
*⑤ Multitudine telorum ex turribus propugnantes deturbant,
**たくさんの飛び道具によって、防戦している者たちを櫓から駆逐した。
*aggere et cratibus fossas explent,
**土砂や柴で堀を埋めて、
*falcibus vallum ac loricam rescindunt.
**破城鎌によって防柵や胸壁を切り裂いた。
**:<span style="color:#009900;">(訳注:falx「破城鎌」については、[[ガリア戦記 第5巻#42節|第5巻42節]]を参照。)</span>
===87節===
'''カエサルの救援、ラビエーヌスの作戦'''
*① Mittit primo<ref>primo はφ系・ρ系写本の記述で、χ系・π系写本では primum となっている。</ref> [[w:la:Decimus Iunius Brutus Albinus|Brutum adulescentem]] cum cohortibus Caesar,
**カエサルは、初めに[[w:デキムス・ユニウス・ブルトゥス・アルビヌス|青年ブルトゥス]]を諸<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>とともに派遣して、
**:<span style="color:#009900;">(訳注:デキムス・ブルトゥスには[[ガリア戦記 第3巻#14節|第3巻14節]]で艦隊を、本巻[[#9節|9節]]②項では騎兵隊を指揮させている。)</span>
*post cum aliis C.(Gaium) Fabium legatum;
**後に副官のガイウス・ファビウスをほかの隊とともに(派遣した)。
*postremo ipse, cum vehementius pugnaretur,
**最後には(カエサル)自身が、激しく戦われていたので、
*integros subsidio adducit.
**新手の者たちを援兵として率いて行った。
*② Restituto proelio ac repulsis hostibus
**戦況が回復され、敵方が撃退されると、
*eo quo Labienum miserat contendit;
**ラビエーヌスを派遣していたところに急いだ。
*cohortes IIII(quattuor) ex proximo castello deducit,
**近隣の砦から4個歩兵大隊を引き出して、
*equitum partem se<ref>se はβ系写本の記述で、α系写本にはない。</ref> sequi,
**[[w:騎兵|騎兵]]のある一部には、自らに随行することを、
*partem circumire exteriores munitiones et ab<ref>ab はα系写本の記述で、β系写本では a となっている。</ref> tergo hostes adoriri iubet.
**別の一部には、外側の塁壁を取り囲んで、敵方を背後から襲撃することを命じた。
*③ Labienus, postquam neque aggeres neque fossae vim hostium sustinere poterant,
**ラビエーヌスは、土塁も堀も敵方の武力に持ちこたえることができなかった後で、
*coactis una XL(quadraginta) cohortibus, quas ex proximis praesidiis deductas fors obtulit,
**近隣の宿営地から、はからずも引き出しておいた40個歩兵大隊を集結させて、
**:<span style="color:#009900;">(訳注:この数は、写本によって異なり、モイゼルらは undecim「11個」と提案している。)</span>
*Caesarem per nuntios facit certiorem, quid faciendum existimet.
**何がなされるべきと考えたのかを、カエサルに伝令を通じて報告した。
*Accelerat Caesar, ut proelio intersit.
**カエサルは、戦闘(の場)に居合わせるように急いで行った。
===88節===
'''雌雄決し、ガッリア来援軍が敗走'''
*① Eius adventu ex colore vestitus cognito, quo insigni in proeliis uti consuerat,
**彼(カエサル)の到来が、(彼が)戦闘において目印として用いるのが常であった衣服の色から認識され、
**:<span style="color:#009900;">(訳注:カエサルは、真紅の外套を着用していたようである。)</span>
*turmisque equitum et cohortibus visis quas se sequi iusserat,
**(カエサルが)自らに随行することを命じていた諸<ruby><rb>[[w:騎兵|騎兵]]小隊</rb><rp>(</rp><rt>トゥルマ</rt><rp>)</rp></ruby>や諸<ruby><rb>[[w:コホルス|歩兵大隊]]</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>が望見されて、
*ut de locis superioribus haec declivia et devexa cernebantur,
**(ウェルカッスィウェッラウヌスらが派遣された)高地から、これらの斜面や急坂が見分けられたので、
*hostes proelium committunt.
**敵方(ガッリア勢)は戦端を開いた。
*② Utrimque clamore sublato
**(ガッリア来援軍とアレスィア籠城軍の)双方から雄叫びが上げられて、
*excipit rursus ex vallo atque omnibus munitionibus clamor.
**さらに、防柵やすべての塁壁から(ローマ勢の)雄叫びが続いた。
*Nostri omissis pilis gladiis rem gerunt.
**我が方(ローマ勢)は<ruby><rb>[[w:ピルム|投槍]]</rb><rp>(</rp><rt>ピルム</rt><rp>)</rp></ruby>を放棄して、<ruby><rb>[[w:グラディウス (武器)|長剣]]</rb><rp>(</rp><rt>グラディウス</rt><rp>)</rp></ruby>で合戦した。
*③ Repente post tergum equitatus cernitur;
**不意に(ガッリア勢の)背後に(ローマ勢の)騎兵隊が見分けられた。
**:<span style="color:#009900;">(訳注:87節②項で、カエサルは騎兵隊に外壁を迂回して敵を背後から襲撃するように命じていた。)</span>
*cohortes aliae adpropinquant.
**別の諸<ruby><rb>歩兵大隊</rb><rp>(</rp><rt>コホルス</rt><rp>)</rp></ruby>も接近して来た。
*Hostes terga vertunt;
**敵方(ガッリア勢)は、(ローマ勢に)背を向けた。
*fugientibus equites occurrunt.
**逃げる者たち(ガッリア勢)を(ローマ勢の)騎兵たちが追撃した。
*Fit magna caedes.
**大虐殺が起こった。
*④ Sedullus, dux et princeps Lemovicum, occiditur;
**レモウィケス族の将帥で領袖であるセドゥッルスが斃された。
*[[w:la:Vercassivellaunus|Vercassivellaunus]] Arvernus vivus in fuga comprehenditur;
**[[w:アルウェルニ族|アルウェルニー族]]のウェルカッスィウェッラウヌスは逃亡中に生きたまま捕らえられた。
*signa militaria LXXIIII(septuaginta quattuor) ad Caesarem referuntur;
**(ガッリア勢の)74本の軍旗がカエサルのところへ運んで来られた。
*pauci ex tanto numero se incolumes<ref>se incolumes はα系写本の記述で、β系写本では incolumes se となっている。</ref> in castra recipiunt.
**これほどの兵数のうち、わずかな者たち(だけ)が無傷のまま陣営に退却した。
*⑤ Conspicati ex oppido caedem et fugam suorum
**(アレスィアの)[[w:オッピドゥム|城塞都市]]から味方の虐殺や逃亡を視認した者たちは、
*desperata salute copias a munitionibus reducunt.
**身の安全に絶望して、軍勢を塁壁から(城塞都市に)呼び戻した。
*⑥ Fit protinus hac re audita ex castris Gallorum fuga.
**この事態が聞かれるとただちに、(来援に来ていた)ガッリア人たちの陣営から逃亡が生じた。
*Quodnisi crebris subsidiis ac totius diei labore milites essent defessi,
**もし、たびたびの(味方への)支援や一日中の働きにより兵士たちが疲れ果てていなかったならば、
*omnes hostium copiae deleri potuissent.
**敵方(ガッリア来援軍)の全軍勢が壊滅させられることが可能であっただろう。
*⑦ De media nocte missus equitatus novissimum agmen consequitur;
**真夜中の頃に、派遣されていた(ローマ勢の)騎兵隊が(ガッリア勢の)後衛に追いついて、
*magnus numerus capitur atque interficitur;
**(ガッリア勢の)大多数が捕らえられ、かつ殺戮された。
*reliqui ex fuga in civitates discedunt.
**(ガッリア来援軍の)残りの者たちは、逃亡して諸部族のところに逃げのびた。
==ガッリア同盟軍主力の降伏==
===89節===
[[画像:Vercingétorix se rend à César 1886 HPMotte.jpg|thumb|right|330px|「カエサルの陣営に投降するウェルキンゲトリークス」<br>“Vercingétorix se rendant au camp de César”、<br>アンリ=ポール・モット([[w:fr:Henri-Paul_Motte|Henri-Paul Motte]])画、1886年。<br>[[w:ル・ピュイ=アン=ヴレ|ル・ピュイ=アン=ヴレ]]のクロザティエ美術館([[w:fr:Musée Crozatier au Puy-en-Velay|Musée Crozatier]] au [[w:fr:Le Puy-en-Velay|Puy-en-Velay]])蔵。]]
[[画像:Lionel Royer - Vercingetorix Throwing down His Weapons at the feet of Julius Caesar.jpg|thumb|right|330px|「ウェルキンゲトリークスが彼の武器をユリウス・カエサルの足元に投げ捨てる」“Vercingétorix jette ses armes aux pieds de Jules César”、リオネル=ノエル・ロワイエ([[w:fr:Lionel Royer|Lionel-Noël Royer]])
画、1899年。[[w:ル・ピュイ=アン=ヴレ|ル・ピュイ=アン=ヴレ]]のクロザティエ美術館([[w:fr:Musée Crozatier au Puy-en-Velay|Musée Crozatier]] au [[w:fr:Le Puy-en-Velay|Puy-en-Velay]])蔵。]]
[[画像:Coin_Vercingetorix.jpg|thumb|right|300px|ローマがBC48年に発行した[[w:デナリウス|デナリウス銀貨]]。ウェルキンゲトリークスの横顔が刻まれているとも言われ、[[w:マメルティヌスの牢獄|トゥッリアヌム牢獄]]に虜囚となっているかつてのガッリアの盟主を見せしめにしたものとも考えられる。彼はBC46年に処刑されたが、カエサルもBC44年に暗殺された。]]
'''ウェルキンゲトリークスとアレスィア籠城軍の降伏'''
*① Postero die [[w:la:Vercingetorix|Vercingetorix]] concilio convocato
**(来援軍が敗走した)翌日に、[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]は会合を召集して、
*id bellum se suscepisse<ref>se suscepisse はα系写本の記述で、β系写本では suscepisse se となっている。</ref>
**この戦争を引き受けたことは
*non suarum necessitatum<ref>necessitatum はχ系・S・L・N・β系写本の記述で、B・M写本では necessitatium となっている。</ref>, sed communis libertatis causa demonstrat,
**自らの(野心の)必要性からではなく、(ガッリア)共通の自由のためだ、と明言した。
*② et quoniam sit fortunae cedendum,
**運命には従うべきものなのであるから、
*ad utramque rem se illis offerre,
**(敗軍の将として、以下の)どちらの事にも、自ら(の処遇)を彼ら(ガッリア人たち)に委ねよう。
*seu morte sua Romanis satisfacere
**あるいは(ウェルキンゲトリークス)自らの死によってローマ人たちに償うこと(を欲する)にせよ、
*seu vivum tradere velint.
**あるいは生きたまま(ローマ人たちに)引き渡すことを欲するにせよ、と。
*③ Mittuntur de his rebus ad Caesarem legati.
**これらの事柄について、カエサルのところへ使節たちが遣わされた。
*Iubet arma tradi, principes produci.
**(カエサルは)武器が引き渡されること、領袖たちが連行されて来ることを命じた。
*④ Ipse in munitione pro castris consedit;
**(カエサル)自身は、陣営の前の塁壁のところに腰掛けた。
*eo duces producuntur.
**そこに(アレスィアに籠城していた)将帥たちが連行されて来た。
*Vercingetorix deditur, arma proiciuntur.
**ウェルキンゲトリークスが引き渡されて、武器が投げ捨てられた。
*⑤ Reservatis [[w:la:Haedui|Haeduis]] atque Arvernis,
**(カエサルは)[[w:ハエドゥイ族|ハエドゥイー族]]と[[w:アルウェルニ族|アルウェルニー族]](の将兵たち)を保持しておいた。
*si per eos civitates reciperare<ref>reciperare はχ系・B<sup>1</sup>・S・U写本の記述で、B<sup>c</sup>・M・L・N・π系・R写本では recuperare となっている。</ref> posset,
**彼らによって両部族国家を(同盟国として)回復できないだろうかと(考えたのだ)。
*ex reliquis captivis toto exercitui capita singula praedae nomine distribuit.
**残りの(諸部族の)捕虜たちから、全軍(のローマ人)に一名ずつを戦利品という名目で分配した。
===90節===
[[画像:Autun_porte_Saint-André.JPG|thumb|right|300px|[[w:オータン|オータン市]]に遺されたローマ時代からの聖アンドレ門。[[w:ビブラクテ|ビブラクテ]]を首邑としていた[[w:ハエドゥイ族|ハエドゥイー族]]は、ローマ帝政初期に東方の平地に移り、「[[w:アウグストゥス|アウグストゥス]]の砦」を意味するアウグストドゥーヌム([[w:la:Augustodunum|Augustodunum]])を建設して首邑とした。これが現在のオータン(Autun)となっている。]]
[[画像:Clermont_vu_de_Montjuzet.JPG|thumb|right|300px|[[w:クレルモン=フェラン|クレルモン=フェラン市]]の街並み。ローマに降伏した[[w:アルウェルニ族|アルウェルニー族]]は、後に首邑のゲルゴウィアを廃城とされ、北方の平野にあるネメトゥム(Nemetum)に移住させられた。帝政初期に[[w:アウグストゥス|アウグストゥス]]に由来するアウグストネメトゥム([[w:la:Augustonemetum|Augustonemetum]])に改称して、[[w:クレルモン教会会議|クレルモン教会会議]]が開かれるなど宗教的中心地として栄え、現在のクレルモン=フェランに至る。]]
'''ハエドゥイー族とアルウェルニー族の降伏、諸軍団の冬営'''
*① His rebus confectis in [[w:la:Haedui|Haeduos]] proficiscitur;
**これらの事が成し遂げられて、(カエサルは)[[w:ハエドゥイ族|ハエドゥイー族]]のところに出発した。
*civitatem recipit.
**同部族を(同盟国として)回復した。
*② Eo legati ab Arvernis missi:
**そこに、[[w:アルウェルニ族|アルウェルニー族]]から使節たちが遣わされて来て、
*quae imperaret, se facturos pollicentur.
**自分たちは(カエサルが)命令したことを行なうであろう、と約束した。
*Imperat magnum numerum obsidum.
**(カエサルは)多数の人質(の供出)を命令した。
*③ Legiones in hiberna mittit.
**(カエサルは)諸[[w:ローマ軍団|軍団]]を冬営地に派遣した。
*Captivorum circiter XX(viginti) milia Haeduis Arvernisque reddit.
**捕虜たち約2万人をハエドゥイー族とアルウェルニー族に返還した。
*④ [[w:la:Titus Labienus|T.<small>(Titum)</small> Labienum]] duabus cum<ref>duabus cum はχ系・B・M・S写本の記述で、L・N・β系写本では cum duabus となっている。</ref> legionibus et equitatu in Sequanos proficisci iubet;
**[[w:ティトゥス・ラビエヌス|ティトゥス・ラビエーヌス]]を2個軍団および[[w:騎兵|騎兵隊]]とともにセクアニ族のところに出発することを命じた。
*huic M.<small>(Marcum)</small> Sempronium Rutilum attribuit.
**彼には、マルクス・[[w:センプロニウス氏族|センプロニウス]]・ルティルスを付属させた。
*⑤ C.<small>(Gaium)</small> Fabium legatum et L.<small>(Lucium)</small> Minucium Basilum cum legionibus duabus in Remis conlocat,
**副官 ガーイウス・ファビウスとルキウス・ミヌキウス・バスィルスを2個軍団とともにレーミー族のところに配置した。
**:<span style="color:#009900;">(訳注:バスィルスは[[ガリア戦記 第6巻#29節|第6巻29節]]で騎兵隊を指揮した。)</span>
*ne quam ab<ref>ab はφ系写本の記述で、χ系・β系写本では a となっている。</ref> finitimis Bellovacis calamitatem accipiant.
**(レーミー族が)近隣のベッロウァキ族から何らかの災禍を蒙らないようにしたのである。
*⑥ C.<small>(Gaium)</small> Antistium Reginum in Ambivaretos,
**ガーイウス・アンティスティウス・レーギーヌスをアンビウァレティ族のところに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:''[[w:fr:Caius Antistius Reginus|Gaius Antistius Reginus]]'' は[[ガリア戦記_第6巻#1節|第6巻1節]]、[[#83節|本巻83節]]で既出。)</span>
*T.<small>(Titum)</small> Sextium in Bituriges,
**ティトゥス・セクスティウスをビトゥリゲース族のところに、
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:[[w:en:Titus Sextius|Titus Sextius]] も[[ガリア戦記_第6巻#1節|第6巻1節]]で既出。第6巻の年からカエサルの副官、<br> [[w:三頭政治#第二回三頭政治|第二回三頭政治]]では[[w:アフリカ属州|アフリカ属州]]の総督を務め、[[w:マルクス・アエミリウス・レピドゥス|レピドゥス]]に引き継ぐ。)
*C.<small>(Gaium)</small> Caninium Rebilum in Rutenos cum singulis legionibus mittit.
**ガーイウス・カニニウス・レビルスをルテーニー族のところに、それぞれ1個軍団とともに派遣した。
*⑦ [[w:la:Quintus Tullius Cicero|Q.<small>(Quintum)</small> Tullium Ciceronem]] et P.<small>(Publium)</small> Sulpicium
**[[w:クィントゥス・トゥッリウス・キケロ|クィーントゥス・トゥッリウス・キケロー]]とプーブリウス・スルピキウス(・ルーフス)を
**:<span style="color:#009900;font-family:Times New Roman;">(訳注:カエサルの副官 ''[[w:en:Sulpicia_gens#Sulpicii_Rufi|Publius Sulpicius Rufus]] は、<br> [[ガリア戦記_第4巻#22節|第4巻22節]]で既述。[[内乱記_第1巻#74節|『内乱記』第1巻74節]]でも言及される。<br> [[w:紀元前48年|BC48年]]に[[w:プラエトル|法務官]]、[[w:紀元前42年|BC42年]]に[[w:ケンソル|監察官]]に任官する。)</span>
*[[w:la:Cabillonum|Cavilloni]]<ref>Cavilloni はβ系写本の記述で、α系写本などでは Cabilloni となっている。</ref> et [[w:la:Matisco|Matiscone]] in Haeduis ad Ararim rei frumentariae causa conlocat.
**ハエドゥイー族のところのアラル川沿いのカウィッロヌムとマティスコに、糧秣調達のために配置した。
**:<span style="color:#009900;">(訳注:カウィッロヌムは現在の[[w:シャロン=スュル=ソーヌ|シャロン=スュル=ソーヌ]]、マティスコは現在の[[w:マコン|マコン]]。)</span>
*Ipse [[w:la:Bibracte|Bibracte]] hiemare constituit.
**(カエサル)自身は、[[w:ビブラクテ|ビブラクテ]]で冬営することを決めた。
*⑧ His litteris<ref>his litteris「これらが書簡により(知られると)」はα系写本の記述で、β系写本では huius anni rebus「この年の事績が(知られると)」と異なっており、huius anni rebus <ex Caesaris> litteris「この年の事績が<カエサルの>書簡により(知られると)」 などと修正提案されている。」</ref> cognitis Romae dierum viginti supplicatio redditur.
**これらが(カエサルの)書簡により知られると、ローマで20日間の感謝祭が許された。
**:<span style="color:#009900;">(訳注:[[ガリア戦記 第2巻#35節|第2巻35節]]では、かつてない15日間の感謝祭が決議されたが、今回はそれを超えるものであった。)</span>
----
*<span style="background-color:#99ff99;">「ガリア戦記 第7巻」了。「[[ガリア戦記 第8巻]]」へ続く。</span>
==脚注==
<references />
==参考リンク==
'''ウィキペディア英語版など'''
*'''[[w:en:Category:Tribes of ancient Gaul|Category:Tribes of ancient Gaul]]'''('''[[w:Category:ガリアの部族|Category:ガリアの部族]]''')- [[w:fr:Catégorie:Personnalité gauloise|fr:Catégorie:Personnalité gauloise]]
**[[w:en:Allobroges|Allobroges]](アッロブロゲス族)
**'''[[w:en:Arverni|Arverni]]'''('''[[w:アルウェルニ族|アルウェルニー族]]''')
**:'''[[w:en:Vercingetorix|Vercingetorix]]'''('''[[w:ウェルキンゲトリクス|ウェルキンゲトリークス]]''')- '''<span style="background-color:#ffff00;">[[w:la:Vercingetorix|la:Vercingetorix]]</span>'''
**:[[w:fr:Celtillos|fr:Celtillos]](ケルティッルス);ウェルキンゲトリークスの父
**:[[w:fr:Gobannitio|fr:Gobannitio]](ゴバンニティオ);ウェルキンゲトリークスのおじ
**:[[w:en:Vercassivellaunos|Vercassivellaunos]](ウェルカッスィウェッラウヌス) - <span style="background-color:#ffff00;">[[w:la:Vercassivellaunus|la:Vercassivellaunus]]</span>
**:Critognatus(クリトグナトゥス)- <span style="background-color:#ffff00;">[[w:la:Critognatus|la:Critognatus]]</span>
**[[w:en:Atrebates|Atrebates]](アトレバテス族)
**:[[w:en:Commius|Commius]]([[w:コンミウス|コンミウス]]):ガッリアとブリタンニアにおけるアトレバテス族の王
**[[w:en:Aedui|Aedui]]([[w:ハエドゥイ族|ハエドゥイー族]])- '''<span style="background-color:#ffff00;">[[w:la:Haedui|la:Haedui]]</span>''';ガッリア中部の有力部族 - [[w:fr:Éduens|fr:Éduens]] <[[w:fr:Catégorie:Éduens|fr:Catégorie:Éduens]]
**:[[w:en:Convictolitavis|Convictolitavis]](コンウィクトリタウィス)- [[w:fr:Convictolitavis|fr:Convictolitavis]]
**:[[w:fr:Cotos|fr:Cotos]](コトゥス)
**:[[w:fr:Litaviccos|fr:Litaviccos]](リタウィックス)
**:エポレドリクス - <span style="background-color:#ffff00;">[[w:la:Eporedorix|la:Eporedorix]]</span>
**:ウィリドマルス
**[[w:en:Andes (Andecavi)|Andes (Andecavi)]](アンデス族);現在の[[w:アンジェ|アンジェ]](Angers)周辺の部族
**[[w:en:Aulerci|Aulerci]](アウレルキ族);現在のフランス北西部に居住していた部族連合
**[[w:en:Bellovaci|Bellovaci]](ベッロウァキ族)
**[[w:en:Bituriges|Bituriges]](ビトゥリゲース族);現在の[[w:ブールジュ|ブールジュ]](Bourges)周辺の部族。[[#5節|5節]]でガッリア同盟軍に寝返る。
**[[w:en:Boii|Boii]](ボイイ族)- <span style="background-color:#ffff00;">[[w:la:Boii|la:Boii]]</span>;[[w:ボヘミア|ボヘミア]]([[w:la:Bohemia|la:Bohemia]])から移住してきた部族
**Cadurci(カドゥルキー族);現在の[[w:カオール|カオール]](Cahors)周辺の部族 - [[w:fr:Cadurques|fr:Cadurques]]
**:[[w:en:Lucterius|Lucterius]](ルクテリウス);カドゥルキー族の指導者、[[#5節|5節]]を参照。
**[[w:en:Carnutes|Carnutes]](カルヌーテース族);現在の[[w:シャルトル|シャルトル]](Chartres)周辺の部族
**[[w:en:Gabali|Gabali]](ガバリ族)
**Haedui ⇒ Aedui
**[[w:en:Helvii|Helvii]](ヘルウィイ族);ガッリア南部にいたローマの同盟部族
**[[w:en:Lemovices|Lemovices]](レモウィケス族);現在の[[w:リモージュ|リモージュ]](Limoges)周辺の部族
**:[[w:en:Sedullos|Sedullos]](セドゥッルス Sedullus);レモウィケス族の将帥・領袖
**[[w:en:Lingones|Lingones]](リンゴネス族)- [[w:fr:Lingons|fr:Lingons]];現在のラングル([[w:en:Langres|Langres]])周辺の部族
**[[w:en:Mandubii|Mandubii]](マンドゥビイ族);[[w:アレシア|アレスィア]]周辺にいた部族
**Nitiobroges(ニティオブロゲス族)- [[w:fr:Nitiobroges|fr:Nitiobroges]]
**:[[w:fr:Ollovico|fr:Ollovico]](オッロウィコ);ローマ元老院から友人と呼ばれた王
**:[[w:fr:Teutomatos|fr:Teutomatos]](テウトマトゥス);王で、オッロウィコの子
**[[w:en:Parisii (Gaul)|Parisii (Gaul)]]([[w:パリシイ族|パリスィイ族]]);現在の[[w:パリ|パリ]]周辺の部族
**[[w:en:Pictones|Pictones]](ピクトネス族);現在の[[w:ポワチエ|ポワティエ]](Poitiers)周辺の部族
**[[w:en:Remi|Remi]](レーミー族)
**[[w:en:Ruteni|Ruteni]](ルテーニー族)
**[[w:en:Segusiavi|Segusiavi]](セグスィアウィ族)
**[[w:en:Senones|Senones]](セノネース族)- <span style="background-color:#ffff00;">[[w:la:Senones|la:Senones]]</span>;現在の[[w:サン (ヨンヌ県)|サン]](Sens)周辺の部族
***[[w:en:Acco|Acco]](アッコー)
**[[w:en:Sequani|Sequani]](セクアニ族)
**[[w:en:Treveri|Treveri]](トレウェリ族)
**[[w:en:Turones|Turones]](トゥロニ族/トゥロネス族);現在の[[w:トゥール (アンドル=エ=ロワール県)|トゥール]](Tours)周辺の部族
**[[w:en:Volcae|Volcae]](ウォルカエ族)
*<span style="background-color:#ffff00;">[[w:la:Germani|la:Germani]]</span>(ゲルマニア人)
*'''ガッリアの地名''' - '''[[w:la:Categoria:Urbes Franciae|la:Categoria:Urbes Franciae]]'''(フランスの都市)
**<span style="background-color:#ffff00;">[[w:la:Agedincum|la:Agedincum]]</span>(アゲディンクム);現在の[[w:サンス|サンス]]([[w:en:Sens|Sens]])
**[[w:en:Alesia_(city)|Alesia (city)]]([[w:アレシア|アレスィア]])- <span style="background-color:#ffff00;">[[w:la:Alesia|la:Alesia]]</span>:現在のアリーズ=サント=レーヌ([[w:fr:Alise-Sainte-Reine|fr:Alise-Sainte-Reine]])
**:'''[[w:en:Battle_of_Alesia|Battle of Alesia]]'''('''[[w:アレシアの戦い|アレスィアの戦い]]''')- '''<span style="background-color:#ffff00;">[[w:la:Alesiae_pugna|la:Alesiae pugna]]</span>'''
**[[w:en:Avaricum|Avaricum]] ⇒ [[w:en:Bourges|Bourges]](アウァーリクム - 現在の[[w:ブールジュ|ブールジュ]])- <span style="background-color:#ffff00;">[[w:la:Avaricum_Biturigum|la:Avaricum Biturigum]]</span>
**[[w:en:Bibracte|Bibracte]]([[w:ビブラクテ|ビブラクテ]]) - <span style="background-color:#ffff00;">[[w:la:Bibracte|la:Bibracte]]</span>:[[w:ハエドゥイ族|ハエドゥイー族]]の首邑。現在のボーヴレ山([[w:fr:Mont_Beuvray|fr:Mont Beuvray]])の山頂に位置していた。
**<span style="background-color:#ffff00;">[[w:la:Cabillonum|la:Cabillonum]]</span>(カビッロヌム/カウィッロヌム)- 現在の[[w:シャロン=スュル=ソーヌ|シャロン=スュル=ソーヌ]]([[w:fr:Chalon-sur-Saône|fr:Chalon-sur-Saône]])
**[[w:en:Cenabum|Cenabum]](ケナブム)- 現在の[[w:オルレアン|オルレアン]] - [[w:fr:Cenabum|fr:Cenabum]]
**<span style="background-color:#ffff00;">[[w:la:Decetia|la:Decetia]]</span>(デケティア)- [[w:en:Decize|en:Decize]] - 現在のドスィーズ(ドシーズ)([[w:fr:Decize|fr:Decize]])
**[[w:en:Gergovie|Gergovie]](ゲルゴウィア)- <span style="background-color:#ffff00;">[[w:la:Gergovia|la:Gergovia]]</span>
**:'''[[w:en:Battle of Gergovia|Battle of Gergovia]]'''('''[[w:ゲルゴウィアの戦い|ゲルゴウィアの戦い]]''')- '''<span style="background-color:#ffff00;">[[w:la:Obsidio Gergoviensis|la:Obsidio Gergoviensis]]</span>'''
**[[w:en:Gorgobina|Gorgobina]](ゴルゴビナ);ボイイ族が定住した城塞都市。現在のサン=パリズ=ル=シャテル([[w:en:Saint-Parize-le-Châtel|Saint-Parize-le-Châtel]])またはラ・ゲルシュ([[w:en:La Guerche|La Guerche]])
**'''[[w:en:Lutetia|Lutetia]]'''('''[[w:ルテティア|ルテティア]]'''/ルテキア);[[w:パリシイ族|パリスィイ族]]の首邑、現在の[[w:パリ|パリ市]] - <span style="background-color:#ffff00;">[[w:la:Lutetia|la:Lutetia]]</span>
**<span style="background-color:#ffff00;">[[w:la:Matisco|la:Matisco]]</span>(マティスコ);現在の[[w:マコン|マコン]](Mâcon)
**Metlosenum(メトロセドゥム/メティオセドゥム/メロドゥーヌム);現在の[[w:ムラン|ムラン]] - <span style="background-color:#ffff00;">[[w:la:Melodunum|la:Melodunum]]</span>
**[[w:en:Narbonne|Narbonne]]([[w:ナルボンヌ|ナルボンヌ]];ラテン名ナルボ)- <span style="background-color:#ffff00;">[[w:la:Narbo|la:Narbo]]</span>;ガッリア南部・地中海岸のローマの拠点
**[[w:en:Noviodunum|Noviodunum]](ノウィオドゥーヌム)- 現在のヌン=スュル=ブーヴロン([[w:en:Neung-sur-Beuvron|Neung-sur-Beuvron]])と推定されている。従来はローヌ川沿いの[[w:サンセール|サンセール]]([[w:en:Sancerre|Sancerre]])が有力だった
**[[w:en:Vellaunodunum|Vellaunodunum]](ウェッラウノドゥーヌム)- [[w:fr:Vellaunodunum|fr:Vellaunodunum]];現在のモンタルジ([[w:en:Montargis|Montargis]])やボーヌ=ラ=ロランド([[w:en:Beaune-la-Rolande|Beaune-la-Rolande]])、シャトー=ランドン([[w:en:Château-Landon|Château-Landon]])などと推定されている
**[[w:en:Vienne, Isère|Vienne, Isère]](ヴィエンヌ;ラテン名ウィエンナ)- [[w:la:Vienna|la:Vienna]]
*'''ガッリアの地形'''
**Cevenna(ケウェンナ山地):現在のセヴェンヌ山地([[w:fr:Cévennes|fr:Cévennes]]・[[w:en:Cévennes|Cévennes]])
**<span style="background-color:#ffff00;">[[w:la:Elaver|la:Elaver]]</span>(エラウェル川):現在の[[w:アリエ川|アリエ川]]([[w:fr:Allier (rivière)|fr:Allier (rivière)]])
**<span style="background-color:#ffff00;">[[w:la:Liger|la:Liger]]</span>(リゲル川):現在の[[w:ロワール川|ロワール川]]([[w:fr:Loire (fleuve)|fr:Loire (fleuve)]])
**<span style="background-color:#ffff00;">[[w:la:Rhenus|la:Rhenus]]</span>(レヌス川):現在の[[w:ライン川|ライン川]]([[w:fr:Rhin|fr:Rhin]])
**<span style="background-color:#ffff00;">[[w:la:Rhodanus|la:Rhodanus]]</span>(ロダヌス川):現在の[[w:ローヌ川|ローヌ川]]([[w:fr:Rhône|fr:Rhône]])
**<span style="background-color:#ffff00;">[[w:la:Sequana|la:Sequana]]</span>(セクアナ川):現在の[[w:セーヌ川|セーヌ川]]([[w:fr:Seine|fr:Seine]])
*ローマ勢
**[[w:en:Mark_Antony|Mark Antony]]([[w:マルクス・アントニウス|マルクス・'''アントニウス''']])- <span style="background-color:#ffff00;">[[w:la:Marcus_Antonius|la:Marcus Antonius]]</span>
**[[w:en:Decimus_Junius_Brutus_Albinus|Decimus Junius '''Brutus''' Albinus]]([[w:デキムス・ユニウス・ブルトゥス・アルビヌス|デキムス・ユニウス・'''ブルトゥス'''・アルビヌス]])- <span style="background-color:#ffff00;">[[w:la:Decimus_Iunius_Brutus_Albinus|Decimus Iunius Brutus Albinus]]</span>([[#9節|9節]])
**[[w:en:Quintus Tullius Cicero|Quintus Tullius '''Cicero''']]([[w:クィントゥス・トゥッリウス・キケロ|クィントゥス・トゥッリウス・'''キケロ''']])- <span style="background-color:#ffff00;">[[w:la:Quintus Tullius Cicero|la:Quintus Tullius Cicero]]</span>:カエサルの副官
**Gaius '''Fabius'''(ガイウス・'''ファビウス'''):カエサルの副官
**[[w:en:Titus Labienus|Titus '''Labienus''']]([[w:ティトゥス・ラビエヌス|ティトゥス・'''ラビエーヌス''']])- <span style="background-color:#ffff00;">[[w:la:Titus Labienus|la:Titus Labienus]]</span>:カエサルの副官
**[[w:en:Trebonius|'''Trebonius''']]([[w:ガイウス・トレボニウス|ガイウス・'''トレボニウス''']])- <span style="background-color:#ffff00;">[[w:la:Gaius_Trebonius|la:Gaius Trebonius]]</span>:カエサルの副官
**[[w:en:Lucius Julius Caesar IV|Lucius Julius '''Caesar''' IV]](ルキウス・ユリウス・'''カエサル'''4世):総督カエサルの副官で、4代前の高祖父を共有する。BC64年に執政官を務めた。
*イタリア方面
**[[w:en:Cisalpine_Gaul|Cisalpine Gaul]]([[w:ガリア・キサルピナ|ガッリア・キサルピーナ]]) - [[w:la:Gallia Cisalpina|la:Gallia Cisalpina]]
**[[w:en:Populares|Populares]]([[w:ポプラレス|ポプラレス]];民衆派)- [[w:la:Populares|la:Populares]]
**:[[w:en:Publius_Clodius_Pulcher|Publius Clodius Pulcher]]([[w:プブリウス・クロディウス・プルケル|プブリウス・クロディウス・プルケル]]) - [[w:la:Publius_Clodius_Pulcher|la:Publius Clodius Pulcher]]
**[[w:en:Optimates|Optimates]]([[w:オプティマテス|オプティマテス]];元老院派)
**:[[w:en:Cicero|Cicero]]([[w:マルクス・トゥッリウス・キケロ|マルクス・トゥッリウス・キケロ]])- [[w:la:Marcus_Tullius_Cicero|la:Marcus Tullius Cicero]]
**:[[w:en:Titus_Annius_Milo|Titus Annius Milo]](ティトゥス・アンニウス・ミロ)- [[w:la:Titus_Annius_Milo|la:Titus Annius Milo]]
**:[[w:en:Pompey|Pompey]]([[w:グナエウス・ポンペイウス|グナエウス・ポンペイウス]])- [[w:la:Gnaeus_Pompeius_Magnus|la:Gnaeus Pompeius Magnus]]
rcugbzmf1tz8g0ns0o1amk3zsge9imu
学習方法/高校物理
0
18793
304911
301251
2026-10-20T14:29:46Z
Nermer314
62933
304911
wikitext
text/x-wiki
== 物理のための数学 ==
物理の式を理解するには、数学の計算力が欠かせません。理系に進んで『物理』を履修する場合は、数学IIIも履修することを勧めます。速度・加速度は位置を時間で微分したものであり、単振動や交流の式には三角関数が出てくるので、数学IIIの微分・積分(三角関数の微分など)を知っていると、式の意味を理解しやすくなります。
ただし、数式だけに頼って機械的に解こうとするのではなく、物理特有の考え方も理解するようにしてください。
== 学習の流れ ==
まずは、教科書や参考書の本文をよく読んで内容を理解しましょう。式変形は、実際に手を動かして追ってください。教科書の例題や章末問題を解き終わったら、共通テストレベルの問題集で演習を重ね、理解があやふやだと感じたら教科書に戻って確認します。難関大学を目指す場合は、さらに難しい問題集にも取り組みます。演習を一通り終えたら、志望校の過去問を解いて、出題の傾向と自分の実力を確かめます。
== 分野別勉強法 ==
物理の学習の前提として、割合、式の変形や計算といった操作がしっかりできる必要があります。苦手な人は、小学校や中学校の数学を復習しておきましょう。
物理の公式や定義式の多くは、基本的な法則から式変形によって導かれるため、丸暗記すべき公式は多くありません。また、問題演習をこなすことが、物理の見方・考え方を身につけることにつながります。
=== 力学 ===
運動方程式などの基本的な法則から、教科書や参考書に載っている様々な公式がどのように導かれるかをしっかりと読み、導出の計算を自分の手で追えるようにしてください。
物理の公式は互いに関連しあっていることが多いので、公式同士の関係を教科書で確認しましょう。そうすれば、丸暗記しなければならない公式は減ります。そのうえで、運動方程式、力学的エネルギー保存則、運動量保存則から、位置や速度や時間などを求められるように練習してください。
遠心力の公式のように導くのに時間がかかるものは覚えておくとよいですが、それでも一度は自分の手で導出しましょう。それだけで、式を忘れにくくなります。また、反発係数や位置エネルギーなどの用語の定義もしっかり確認しましょう。
万有引力による運動では、円運動の運動方程式(第一宇宙速度)や力学的エネルギー保存則(第二宇宙速度)を使います。
=== 電磁気 ===
クーロンの法則と、運動方程式や位置エネルギーなどの力学の考え方を組み合わせて、電場や電位の式がどのように導かれるかを、教科書や参考書を読んで理解しましょう。学習内容が多く、初学者には混同しやすいものも多いので、用語と式の意味を一つずつ確かめながら進めましょう。
=== 振動・波動 ===
計算問題の演習に加えて、波形のグラフや波の干渉のようすを図に表せるように練習しましょう。干渉の条件の式は、教科書の説明を読んで導き方とあわせて理解しておきましょう。
=== 熱力学 ===
熱力学は力学の考え方を使う分野なので、力学の「力積」「圧力」「仕事と力学的エネルギー」を理解しているかを振り返ってから取り組みましょう。公式はそう多くないので、基本の式(気体の状態方程式、熱力学第一法則など)を覚え、それを使って他の式を導くことで、「式の意味」を説明できるようにしましょう。
=== 原子物理 ===
原子物理では、光電効果、原子の構造、原子核などの新しい概念と用語が多く出てくるので、教科書の用語とその意味を確実に覚えましょう。また、指数を含む数値計算に慣れておく必要があります。
原子物理では、次のような問題が出題されます。
* 「電子は (1) 条件を満たす円軌道上にしか存在できず、その軌道上では電磁波を放出しない。電子の取りうるこうした特別な状態を (2) 状態といい、この状態にある電子のエネルギーを (3) という。」(答え: (1) 量子、(2) 定常、(3) エネルギー準位)
* 「光速を <math>c = 3.0 \times 10^8\ \mathrm{m/s}</math>、プランク定数を <math>h = 6.6 \times 10^{-34}\ \mathrm{J \cdot s}</math>、電気素量を <math>e = 1.6 \times 10^{-19}\ \mathrm{C}</math> とする。光量子説によれば、波長が <math>\lambda = 500\ \mathrm{nm}</math> である光の光子1個が持つエネルギーは有効数字2桁で (4) eV となる。」(答え: <math>\frac{hc}{\lambda} \approx 4.0 \times 10^{-19}\ \mathrm{J}</math> なので、(4) 2.5)
== 物理の試験問題の解き方 ==
=== 図を作図できるように ===
[[File:摩擦角の模式図.svg|thumb|400px|摩擦角]]
物理の問題は、例えば右図の摩擦角の図のように、問題の状況を図に表すところから始めます。力学の問題なら、物体にはたらく力を図に書き込み、その図をもとに運動方程式やつりあいの式を立てて解きます。振動・波動、熱力学、電磁気などでも同じで、問題の状況を図に表してから式を立てます。
まとめると、
:問題文を読解 → 図を作図 → 図の内容を方程式(運動方程式など)で表現 → 方程式を解く
という手順になります。
作図をしないまま公式を機械的に当てはめる解き方では、状況が少し変わった問題に対応できません。典型的な問題で、この手順を練習しておきましょう。問題集は、解き方の手順の解説が充実したものを選ぶとよいでしょう。
=== 入試対策問題集を読んで解法の知識を増やす ===
作図から式を立てる練習とは別に、入試でよく出る典型問題を解けるように、入試対策問題集を読んで解法の知識を増やしましょう。入試対策問題集には基礎〜標準レベルと難関レベルなどがあるので、まず基礎〜標準レベルから始めます。学校で習った範囲については、高校2年生のうちから読み始めてもかまいません。
[[カテゴリ:学習方法|こうとうかつこうふつり]]
j5i4ejkzk5m0ax3expwukjjy9trejs7
学習方法/高校化学
0
18983
304905
272150
2026-10-20T12:35:09Z
Nermer314
62933
304905
wikitext
text/x-wiki
== 計算問題を練習すること ==
まずは教科書や参考書で基本事項を理解してから演習問題に移りましょう。演習で理解の曖昧なところが分かったら、教科書などで基本事項を確認し、それでも分からなければ先生や友人に質問して、曖昧なままにしないようにしましょう。
高校化学では、計算問題の練習が欠かせません。学校で習った分野については、計算練習をしましょう。特に、濃度、物質量、酸化数の計算は、多くの単元で使う基本なので、確実にできるようにしておきましょう。
教科書の計算問題だけでは練習量が足りない場合は、参考書や問題集の練習問題も使いましょう。問題の形式でなくても、化学反応式や計算の手順は、紙に書いて何回か手順を追って練習しておくとよいでしょう。
== 資料集の活用 ==
普段の学習は、教科書・参考書・問題集などで行います。ただし、文字だけでは何が起こっているのかを思い浮かべにくい場面では、資料集が役立ちます。例えば、中和滴定の操作や、無機物質の沈殿や気体の色などは、資料集の図や写真で確かめておくと理解しやすくなります。
== 基本的な化学式を覚えること ==
基本的な物質の化学式は覚えておく必要があります。とはいえ、化学反応の計算を練習しているうちに、よく使う化学式は自然と頭に入ります。たとえば、酸や塩基の濃度や電離度の計算を練習すれば、酢酸 <chem>CH3COOH</chem> やアンモニア <chem>NH3</chem> などの化学式は自然と身につきます。
== 大学の化学科を志望する場合 ==
大学の化学科では、物理化学や量子化学、熱力学など物理の知識を使います。そのため、高校でも物理を学んでおくとよいでしょう。入試で課される科目(数学IIIを含むかどうかなど)は大学ごとに違うので、志望校の募集要項で確かめてください。
[[カテゴリ:高等学校化学]]
k7x9t591yvrqlw0zjtwboehco2tnehj
ジョーク集/エスニックジョーク
0
34208
304921
304850
2026-10-21T00:12:36Z
~2026-56291-81
92847
/* 必要なものは */
304921
wikitext
text/x-wiki
{{wikipedia|エスニックジョーク}}
エスニックジョーク(民族や国民性や国家を題材としたジョーク)は、ある民族の典型的な特徴を誇張することで笑いを誘うものです。
この項では、エスニックジョークを紹介します。
ブラックジョークもあるので注意!
== 前提 ==
{{wikipedia|ステレオタイプ#人種・国籍・肌の色など}}
よくジョークに登場する民族とその特徴は、しばしば次のように表現されることが多いです。なお、重複する特徴もしばしばあります。言語の違いによるジョークも多いです。国民性・民族性に由来する偏見(いわゆる「[[w:ステレオタイプ|ステレオタイプ]]」)を笑うものですが、現在では公の場での取り扱いは注意を要します。
*アメリカ人:大雑把、陽気、贅沢、ヒーローへのあこがれが強い、訴訟をよくおこす、地理の知識がない、銃社会、ケンカ好き、傲慢、独善的。
*イギリス人:皮肉屋、紅茶好き、紳士の国、合理的、料理が不味い、堅苦しい、賭博好き。
*フランス人:ひねくれ者、キザ、恋愛重視、感覚的、自己中心的。
*イタリア人:女好き、怠け者、陽気、グルメ、情熱的。
*ドイツ人:生真面目、合理的、技術大国、頑固、個人主義。
*ロシア人:酒好き(特にウォッカ)、旧ソ連の影響のあるものは秘密主義などの厳しい政治。
*日本人:真面目、技術大国、集団主義、働きすぎ、家が狭い、勤勉、金持ち、英語が下手。
*中国人:食へのこだわり・グルメ、ケチ、強引、法を守らない。
*韓国人:酒好き、日本へのライバル意識、他責思考、韓国起源説の主張。
*ユダヤ人:狡猾、金儲けがうまい。米国においては、基本的に富裕層。
*アイルランド人:酒豪、ケチ。米国においては、遅れて入植したヨーロッパ系移民であって、多くは貧困層を形成するものとされた。
*ロマ(いわゆる「ジプシー」):高価なものや財布を見つけたらすぐ盗りに行く。ケチ。
*ポルトガル人:時間にルーズ。うるさい。ロマンチック。味覚が鈍感。
== 沈没船 ==
世界各国の人が乗った船が沈没しかかっています。そこで、船長は各国の乗客を海に飛び込ませようとします。
* アメリカ人に対して「飛び込めばヒーローになれますよ」
* ロシア人に対して「海にウォッカのビンが流れていますよ」
* イタリア人に対して「飛び込めば女性に愛されますよ」または「美女が飛び込みました」
* フランス人に対して「絶対に飛び込まないでください」
* イギリス人に対して「海に飛び込めばあなたは紳士です」
* ドイツ人に対して「海に飛び込むのはルールです」
* インド人に対して「牛が溺れていますよ」
* 中国人に対して「おいしい魚が泳いでいますよ」
* 日本人に対して「みなさん飛び込んでいます」
* 韓国人に対して「日本人はもう飛び込みました」
* 北朝鮮人に対して「今が脱北のチャンスです」又は「[[ja:w:金正恩|偉大なる第一書記様]]の命令です」
* 台湾人に対して「中国が飛び込めば侵略を諦めると言っていましたよ」
== 酒場にて ==
頼んだ酒にハエが入っているのを見て、
* フランス人は怒って帰った。
* イギリス人はウエイターに取り替えさせた。2杯分の代金を払った。
* ドイツ人はハエを除いて飲んだ。
* ロシア人はそのまま飲んだ。
* アメリカ人はウエイターに取り替えさせた。1杯分の料金を払った。
* 日本人はアメリカ人と同じ。
* 中国人はハエを食べた。
* 韓国人はこれは日本のせいだ!と言って帰っていった。
* 台湾人は中国に腐肉を投げつけてあっち行けと言って帰った。
または
* アメリカ人はビールを飲んでから不衛生だと裁判所に店を訴えた。
* イギリス人はビールを飲まず、皮肉を言って交換させた。
* ドイツ人は「アルコールで消毒されている」と思い、ハエを取り除いて飲んだ。
* フランス人は激怒して散々悪態をついて、もう一杯せしめた。
* ロシア人はすでに酔っぱらっていたのでハエに気付かずに飲んだ。
* ユダヤ人は「こら、これは俺のビールだ! 飲んだ分を返せ!」とハエを小突いた。
* 日本人は自分のジョッキにだけハエが入っているのを確認してからウエイターを呼んだ。
== 諜報機関 ==
([[w:アネクドート#秘密警察]]より)
国連がソ連のKGBとフランスのGIGNとアメリカのCIAは誰が一番犯人を捕まえるのがうまいか証明しようとしていた。国連の事務総長は彼らをテストすることにした。彼は森に1匹のウサギを放つと、それを捕まえてくるよう各々に指示した。
CIAは、動物の情報提供者を森中に配置した。さらに、植物や鉱物の目撃者に尋ねて回った。そうして3ヶ月に渡る徹底的な調査が終了した後、彼らはウサギは存在しないという結論を下した。
GIGNは2週間捜索し、成果が得られないとみると森に火をつけウサギもろともみんな殺してしまった。彼らは謝りもせず、ウサギに責任があると言った。
KGBは2時間ほど森に入っていたかと思うと、ひどく痛めつけられたクマを連れてきた。クマはうめいて言った「へぇへぇ、俺がウサギでございやす、ウサギで」。
== 無人島 ==
無人島に男2人、女1人が流された。そのときどうなるか。
*アメリカ人:男Aと女は結婚するが、すぐに離婚。男Bがその際の弁護士役を務める。
*ドイツ人:男Aと女は結婚し、男Bがその証人として書類を作成する。
*フランス人:男Aと女は結婚し、女は男Bと浮気する。
*イタリア人:3人で楽しむ。
*日本人:男2人はそれぞれ、女をどうすればいいかについて東京の本社にお伺いを立てる。
== 料理 ==
フランス人が言った
「日本は豊かだと思っていたがそうではないようだ。腐った大豆(もしくは海藻)を食べているなんて」
日本人が言った
「フランスは豊かだと思っていたがそうではないようだ。かたつむりを食べているなんて」
フランス人と日本人が言った
「イギリスは豊かだと思っていたがそうではないようだ。イギリス料理を食べているなんて」
== 銃 ==
アメリカで家族全員が銃殺される事件が起きた。それが報道された時アメリカ人は口を揃えて言った。
「もっと銃規制が軽ければ家族は銃で自分の身を守れたであろう!」
== 酒 ==
いつも一緒に酒を飲んでいるロシア人とイギリス人とドイツ人がいた。
ある日、ドイツ人が言った「俺の寿命はもう一年もないらしい。俺が死んだら、毎年俺の命日にウォッカを墓にかけてくれないか?」
それを聞いたイギリス人は「毎年欠かさずにかけてやるさ」と言った。
ロシア人も言った「俺もかけてやるよ。ただし一回腎臓を通してからでいいかな?」
== 新聞 ==
ある新聞が『アイルランド人はケチである』という内容の記事を書いたところ、アイルランド人の団体から抗議の手紙が届いた。その手紙にはこう書いてあった。
「貴紙の書いたアイルランド人はケチであるという話は事実無根でありこのような記事を書き続ける場合は我々アイルランド人は対抗措置として貴紙を他人から借りて読むのをやめることとする」
== 必要なものは ==
国際的な会議でコロナ禍の今、なにが必要かについて話し合われた。
*アメリカ人は勇気、
*ドイツ人はルール、
*フランス人は愛、
*日本人は技術、
*ロシア人はウォッカ、
*イタリア人は裏切りと答えた
周りはロシア人に聞いた。 どうしてウォッカなのかと。
ロシア人は答えた。
「ウイルスは抑制できないが、不安を抑制することはできる。」
== 来る時間 ==
*開始一時間前に来たのがドイツ人と日本人とユダヤ人、
*開始30分前に来るのがイギリス人、
*開始時間ちょうどに来るのがアメリカ人、
*10分後に来るのがフランス人、
*15分後に来るのがイタリア人、
*30分〜1時間後に来るのがスペイン人。
*いつ来るのか分からないのがポルトガル人。
*中国人は、不法滞在している、もしくは入国禁止措置を取られているため来れない。
== 天国と地獄 ==
天国とは、
*コックは中国人(またはフランス人)
*政治家がイギリス人
*エンジニアが日本人(またはドイツ人)
*銀行員がドイツ人(またはスイス人)
*恋人がイタリア人
*警察官がイギリス人
地獄とは、
*コックがイギリス人
*政治家が日本人
*エンジニアが中国人
*銀行員がイタリア人
*恋人がドイツ人(またはスイス人)
*警察官がドイツ人(または中国人)
または
天国とは
*日本人の妻を持ち、
*アメリカ人の給料をもらい、
*中国人のコックを雇い、
*イギリス人の邸宅に住むこと
地獄とは
*アメリカ人の妻を持ち、
*中国人の給料をもらい、
*イギリス人のコックを雇い、
*日本人の家に住むこと
※ 中国が経済成長をする前のバージョン。
== 幸福 ==
幸福を買うかと神は各国の人々に言った。
*フランス人はワインとチーズがあるので買いませんと言った。
*イタリア人はパスタとサッカーさえあればいいので買いませんと言った。
*日本人は幸福を買い、領収書をもらった。
== たくさんあるもの ==
列車にアメリカ人とキューバ人とロシア人と弁護士と中国人(インド人)と付き添いの中国人(インド人)と日本人が座っていた。
キューバ人は葉巻を吸い終えると「ハバナの葉巻は最高級品だ。だがわが国には捨てるほどある。」と言って残った葉巻を窓の外に投げ捨てた。
ロシア人はウオッカを飲み終えると「ロシアのウオッカは最高だ。だがわが国には捨てるほどある。」と言って残った瓶を窓の外に放り投げた。
日本人はカメラで写真を撮ると「日本の機械は最高だ。だがわが国には捨てるほどある。」と言って写真を取り出して捨てた。
それを聞いたアメリカ人は、弁護士を窓から投げ捨てた。
それも見た中国人(インド人)は隣の中国人(インド人)を投げ捨てた。
韓国人はその話を聞いて「それらのルーツはすべて韓国だ」と言った。
== アジア関連 ==
=== 二次会 ===
結婚式の後、日本人と中国人と韓国人が二次会に行くことにした。
* 日本人「みんなが行くなら私も行きます」
* 中国人「おごってくれるなら私も行きます」
* 韓国人(黙って二人を二次会の飲み屋に連れていく)
=== 国際会議 ===
*国際会議において一番難しいのはインド人を黙らせ、日本人を喋らせることである。
=== 日本誕生 ===
*神様が日本列島を作りながら言った「この島々は日本と名付けよう。そしてこの国には美しい自然と素晴らしい文化と技術を与えよう。」助手がそれを聞いて言った「それではあまりにも日本が恵まれすぎています」神様は言った「安心しろ。多くの地震プレートや隣に朝鮮と中国、ロシアを作っておいた」
=== お会計 ===
*アジア人はどちらが全額支払うかで揉める。
=== 少子高齢化 ===
日本の少子高齢化について国会で話し合われた。
それからしばらく経って日本人の代表者がその問題について会見を行った。
その日本人は高らかに宣言した。
「私が最後の日本人だ」
=== 不良品 ===
*各国の工場に不良品は1000個に一個の精度でお願いします、とお願いすると
ロシアの工場では納期の延長を頼んだ。
中国の工場は不良品が10個あった。
日本の工場では999個作り終えると、「不良品用の設計図が届いていないのですが」と連絡しに来た。
=== 信用ならない言葉 ===
アジア人の信用ならない言葉3選
*日本人の「できません」
*韓国人の「できます」
*中国人の「できました」
=== 38度 ===
韓国の医学校で、生徒が先生に質問した。「先生、人は38度を超えるとどうなりますか?」「射殺されます」
=== 診察 ===
風邪をひいた日本人がアメリカのクリニックを訪れた。「How are you?」「I'm fine thank you, and you?」
=== アンケート ===
100人の日本人を対象にアンケートが実施された。「日本人は優柔不断な民族だと思いますか?」
*はい:13人
*いいえ:8人
*どちらとも言えない:79人
=== 輸血 ===
韓国の大統領が会談のために訪朝したが、道中で不慮の事故に遭い、意識不明の重体に陥った。
手術のために大量の輸血が行われたが、この時北朝鮮の官僚は思った。「今、ヤツの身体には北朝鮮人の血がたくさん流れている。親北思想に生まれ変わるに違いない!そうなれば韓国はあっという間に我らの手中に…!」
何時間にも及ぶ手術が終わり、大統領が意識を取り戻すと、開口一番に叫んだ。「金正恩の馬鹿野郎!」
=== ジョークと日本人 ===
日本人は1つのジョークで3回笑う。ジョークを聞いた時、隣の人にジョークのオチを説明してもらった時、家に帰ってからジョークのオチを理解した時。
=== パン屋 ===
ロシアを観光中の日本人・中国人・韓国人・北朝鮮人が、パン屋に並ぶ長蛇の列に出くわした。
日本人「パンを買う人の大行列ができている。この店のパンは絶品に違いない」
中国人「パンを買う人の大行列ができている。ロシア人は律儀な民族に違いない」
韓国人「パンを買う人の大行列ができている。この店は苦情が殺到するに違いない」
北朝鮮人「並びさえすればパンが買えるのか。ロシアは民主主義国家に違いない」
=== 日本人の怒らせ方 ===
中国・韓国・ロシア・北朝鮮・アメリカが、日本人を怒らせたくなって、結託して意地悪をする事にした。
中国は尖閣諸島を奪い取った。韓国は竹島を奪い取った。ロシアは北方領土を奪い取った。北朝鮮は弾道ミサイルを何発も発射した。アメリカは核爆弾を2発もお見舞いした。それでも日本人は怒らなかった。
各国がお手上げ状態になったその時、日本のテレビであるニュースが報じられ、日本人は憤慨した。「回転寿司の卓上醤油のボトルを舌で舐める動画が拡散され…」
=== 中国文化を学ぶ方法 ===
唐王朝の文化を見たいなら日本に行け。
宋王朝の文化を見たいならベトナムに行け。
明王朝の文化を見たいなら韓国に行け。
元王朝の文化を見たいならモンゴルに行け。
中華民国の文化を見たいなら台湾へ行け。
== 面白いジョーク ==
BはAに対して「面白いジョークを言えたら1ドルやるよ」と言った。以下は続き。
'''アメリカ&イギリス'''
*A「あるアメリカ人紳士がいた…」
*B「君には負けたよ!絶対にありえないじゃないか!」
'''ロシア人'''
*A「ある酒が嫌いなロシア人がいた…」
*B「君には負けたよ!絶対にありえないじゃないか!」
'''ドイツ人'''
*A「あるユニークなドイツ人がいた…」
*B「君には負けたよ!絶対にありえないじゃないか!」
== 教皇 ==
中世ヨーロッパには教皇が2人存在していた。
ある者が提案した。「みんなが納得する新しい教皇が必要だ。」そして3人目を出した。
結果は他の2人が認めず一時的に3人になり、問題を増やしてしまうだけだった。
== 嘘発見器 ==
中国共産党の習近平総書記と日本の岸田首相とアメリカのトランプ(ブッシュ)大統領が、ウソ発見器にかけられることになった。ウソをつくと「ビー」とブザーが鳴る装置である。
はじめに習近平総書記が装置に座って言った。
「私はいつも考えています。中国だけでなく世界中が豊かになればいいと」
「ビー、ビー、ビー」
次に岸田首相が装置に座って言った。
「私はいつも考えています。日本と北朝鮮が良き友人になればいいと」
「ビー、ビー、ビー」
最後にトランプ(ブッシュ)大統領が装置に座って言った。
「私はいつも考えています」
「ビー、ビー、ビー」
== 拉致 ==
ブッシュ大統領がテロリストに拉致された。「500万ドル用意しろ!さもなくばブッシュを生かして返すぞ」
== 拉致その2 ==
通勤中に渋滞に巻き込まれてしまった。すると前方から警察が歩いてきて窓をノックした。
「この先でブッシュ大統領がテロリストに拉致されてしまったんです。犯人は身代金を出さなければブッシュにガソリンを蒔いて火をつけるぞと言っています。いくらか寄付をお願いします」
「なるほど。いくら寄付すればいい?」
「1リットルもあれば十分です」
== 各国のベストセラー ==
アメリカでは新約聖書、
イスラエルでは旧約聖書、
ロシアでは偉人『スターリン』、
中国では毛沢東語録、
韓国では韓国の栄光、
日本では漫画
つまりどこの国でもフィクションが人気である
== 製品開発 ==
ドイツ人が発明し、
アメリカ人が製品化し、
イギリス人(ユダヤ人)が投資し、
フランス人がデザインし、
イタリア人が宣伝し、
日本人が小型化(高性能化)し、
中国が海賊版をつくり、
韓国が起源を主張する
== 懐に入れる ==
ある酒場に日本人・アメリカ人・ブラジル人の政治家が集まって話をしていた。
日本「あそこに橋が見えるでしょう?」
アメリカ「立派な橋ですね」
日本「実はここだけの話、建設費の10%を懐に入れましてね」
一同、ニヤニヤ
アメリカ「あそこにビルが見えるでしょう?」
ブラジル「高いビルですね」
アメリカ「私は30%を懐に入れましたよ」
一同、爆笑
ブラジル「あそこにダムが見えるでしょう?」
日本・アメリカ「いいえ?」
ブラジル「100%懐に入れました」
== 不法滞在 ==
オーストラリアの首相が言った
「我が国への不法滞在は絶対に許さない!」
アボリジニ「えっ!いつ帰ってくれるの?」
==オリンピック==
オリンピックのマークを見てアメリカ人はこう言った。
「O、O、O、O、Oってなんだ?」
== 時間厳守! ==
日本人「アメリカ人は時間にルーズだ。会議の開始時刻になっても全員集まらない」
アメリカ人「日本人は時間にルーズだ。終了時刻になってもまだ会議が終わらない」
== お静かに ==
日本のオフィスで静かにしなければならないのは、みんな仕事に集中しているから。
イタリアのオフィスで静かにしなければならないのは、みんな寝ているから。
== 図書館にて ==
「『平和国家・アメリカ』という本はありますか?」「ありますよ。ファンタジーノベルの棚をご覧ください」
== 持ち込み禁止 ==
2人のアメリカ人がカフェを訪れ、それぞれのカバンからサンドイッチを取り出し食べ始めた。
店員が注意を促した。「お客様、持参物の飲食はご遠慮願います」
2人は目を見合わせると、互いのサンドイッチを交換した。
== 理想の人間 ==
最も望ましい人間とは…
*ロシア人のように酒を慎み
*イギリス人のように料理が上手く(または「賭け事を慎み」)
*フランス人のように協調性があり
*イタリア人のように紳士的で(または「よく働き」)
*アメリカ人のように清貧で(または「寛容で」)
*ユダヤ人のように太っ腹で
*中国人のように法を守り
*インド人のように時間を守り
*日本人のように個性的で
*韓国人のように責任感があり
*ドイツ人のようにユーモラスな者である。
== 交通事故 ==
車を運転中、飛び出してきた歩行者に接触してしまった。ケガをした歩行者が運転手にかけた言葉とは?
アメリカ人「私から言う事は何もない。あとは弁護士と話してくれ」
ドイツ人「貴方が加入している保険会社の損害賠償額と免責事項を教えて下さい」
フランス人「なにボサッとしてんだ!こっちにだって飛び出す権利がある筈だ!」
イタリア人「あなたに娘さんはいますか?」
イギリス人「ちくしょう、今日は誰とも話さないって賭けをしてたのに!」
日本人「私にも落ち度があります。示談にしますか?保険を使いますか?」
韓国人「絶対に許さない!孫の代まで謝罪と賠償を要求する」
中国人は不法滞在しているので無言で立ち去る。
== 100万で買えるもの ==
日本人「100万もらったぞ!中古車くらいなら買えるかな。」
アメリカ人「は?100万あったら庭付きの家位は買えるだろ。」
韓国人「お前らのところ物価低すぎるだろ、100万あったら買えるのはせいぜいスマホくらいだろ」
日本人は100万円のことを言っており、アメリカ人は100万ドルのことを言っており、韓国人は100万ウォンのことを言っている。
==アリとキリギリス==
アリは夏の間にせっせと働き、冬を耐えるための食べ物を蓄えた。
キリギリスはその間バイオリンを弾いていた。
さて、冬になったらどうする?
フランス人「愛し合って冬を凌ぐ」
ドイツ人「キリギリスがアリの家でバイオリンを弾き、演奏料金としてアリから食べ物をもらう」
日本人「アリが過労により死に、キリギリスがそれらを食べて冬を耐えた」
==優秀な将軍==
フランス人とドイツ人とロシア人が、歴史上で最も優秀な将軍が誰か話し合っている。
そこで彼らはこう言った。
フランス人「ナポレオンこそ優秀な将軍だ」
ドイツ人「ヒトラーほど素晴らしい指導者はいない」
ロシア人「冬”将軍”だ」
== 道に落ちているりんご ==
ノルウェー人は拾って食べる
アイスランド人はりんごを拾い、綺麗に拭いてあげる
スウェーデン人は気づかないふりをする
フィンランド人は気づかない
デンマーク人はりんごをスウェーデン人に売りつける
日本人はどうするか悩む
中国人はけとばす
== ジャパングリッシュ ==
ある日本人がイタリア人とイギリス人に言った。
日本人「イタリアとイギリスって首都名の頭文字一緒ですよね!”ロ”ンドン、”ロ”ーマ、一緒なんて面白いですね!」
イタリア人「確かに日本語ではそうだけど…」
イギリス人「英語表記では違いますね」
日本人「えっそうなんですか!…あっ!でも国名の頭文字は一緒ですね!!”イ”タリア、”イ”ギリスですもんね!」
イタリア人「えっ、あぁ…」
イギリス人「”日本語表記では”確かに一緒ですね。」
イタリア人・イギリス人『…まさか日本人はRとLを間違えるとは聞いたことがあるけど…IとEも見分けられないのか…』
〜聖書に登場する人類の祖先「アダムとイブ」の正体について、各国の人が議論しています。〜
「アダムとイブは、一体どこの国の人だったのだろうか?」
• フランス人: 「服を着ずに愛し合っていたんだ。絶対にフランス人に違いない!」
• イギリス人: 「いや、1つのリンゴを紳士淑女として分け合って食べたんだ。イギリス人だよ」
• 日本人: 「いやいや、神様の言うルールを頑なに守ろうとしていたから、日本人に決まっている」
そこへ、事情をよく知る旧ソ連圏の人間がやってきて言いました。
「いや、彼らは間違いなく我が国の人間だ。着る服もなく、住む家もなく、食べるものはリンゴ1個しかないのに、自分たちは天国にいると信じ込まされていたんだから」
== 青いキリン ==
ある大富豪は言った。「青いキリンを一番早く連れてきた者に総資産を渡そう」と。
* イギリス人は複数人集まって議論し、青いキリンは居ないという結論についた。
* ドイツ人は図書館などで調べた。
* アメリカ人は世界中を調べまわった。
* 日本人は品種改良の末に青いキリンを作り出せた。
* 中国人は青いペンキを買いに行った。
== ロボコップ ==
日本人のエンジニアが、犯罪者を探して捕縛するロボットを作り上げた。早速日本で稼働させてみたところ、ロボットは1時間で10人のスリ師を捕まえてみせた。
ロボットをアメリカに輸出し稼働させてみたところ、1時間で100人の窃盗犯を捕まえた。
ロボットを中国に輸出し稼働させてみたところ、総書記を捕まえようとしたため、粉々になった。
ロボットをメキシコに輸出してみたところ、このロボットそのものが盗まれた。
gnkqvzjqiawrdy8zx8owjxuec6akkzl
304922
304921
2026-10-21T00:26:04Z
~2026-56291-81
92847
/* 無人島 */
304922
wikitext
text/x-wiki
{{wikipedia|エスニックジョーク}}
エスニックジョーク(民族や国民性や国家を題材としたジョーク)は、ある民族の典型的な特徴を誇張することで笑いを誘うものです。
この項では、エスニックジョークを紹介します。
ブラックジョークもあるので注意!
== 前提 ==
{{wikipedia|ステレオタイプ#人種・国籍・肌の色など}}
よくジョークに登場する民族とその特徴は、しばしば次のように表現されることが多いです。なお、重複する特徴もしばしばあります。言語の違いによるジョークも多いです。国民性・民族性に由来する偏見(いわゆる「[[w:ステレオタイプ|ステレオタイプ]]」)を笑うものですが、現在では公の場での取り扱いは注意を要します。
*アメリカ人:大雑把、陽気、贅沢、ヒーローへのあこがれが強い、訴訟をよくおこす、地理の知識がない、銃社会、ケンカ好き、傲慢、独善的。
*イギリス人:皮肉屋、紅茶好き、紳士の国、合理的、料理が不味い、堅苦しい、賭博好き。
*フランス人:ひねくれ者、キザ、恋愛重視、感覚的、自己中心的。
*イタリア人:女好き、怠け者、陽気、グルメ、情熱的。
*ドイツ人:生真面目、合理的、技術大国、頑固、個人主義。
*ロシア人:酒好き(特にウォッカ)、旧ソ連の影響のあるものは秘密主義などの厳しい政治。
*日本人:真面目、技術大国、集団主義、働きすぎ、家が狭い、勤勉、金持ち、英語が下手。
*中国人:食へのこだわり・グルメ、ケチ、強引、法を守らない。
*韓国人:酒好き、日本へのライバル意識、他責思考、韓国起源説の主張。
*ユダヤ人:狡猾、金儲けがうまい。米国においては、基本的に富裕層。
*アイルランド人:酒豪、ケチ。米国においては、遅れて入植したヨーロッパ系移民であって、多くは貧困層を形成するものとされた。
*ロマ(いわゆる「ジプシー」):高価なものや財布を見つけたらすぐ盗りに行く。ケチ。
*ポルトガル人:時間にルーズ。うるさい。ロマンチック。味覚が鈍感。
== 沈没船 ==
世界各国の人が乗った船が沈没しかかっています。そこで、船長は各国の乗客を海に飛び込ませようとします。
* アメリカ人に対して「飛び込めばヒーローになれますよ」
* ロシア人に対して「海にウォッカのビンが流れていますよ」
* イタリア人に対して「飛び込めば女性に愛されますよ」または「美女が飛び込みました」
* フランス人に対して「絶対に飛び込まないでください」
* イギリス人に対して「海に飛び込めばあなたは紳士です」
* ドイツ人に対して「海に飛び込むのはルールです」
* インド人に対して「牛が溺れていますよ」
* 中国人に対して「おいしい魚が泳いでいますよ」
* 日本人に対して「みなさん飛び込んでいます」
* 韓国人に対して「日本人はもう飛び込みました」
* 北朝鮮人に対して「今が脱北のチャンスです」又は「[[ja:w:金正恩|偉大なる第一書記様]]の命令です」
* 台湾人に対して「中国が飛び込めば侵略を諦めると言っていましたよ」
== 酒場にて ==
頼んだ酒にハエが入っているのを見て、
* フランス人は怒って帰った。
* イギリス人はウエイターに取り替えさせた。2杯分の代金を払った。
* ドイツ人はハエを除いて飲んだ。
* ロシア人はそのまま飲んだ。
* アメリカ人はウエイターに取り替えさせた。1杯分の料金を払った。
* 日本人はアメリカ人と同じ。
* 中国人はハエを食べた。
* 韓国人はこれは日本のせいだ!と言って帰っていった。
* 台湾人は中国に腐肉を投げつけてあっち行けと言って帰った。
または
* アメリカ人はビールを飲んでから不衛生だと裁判所に店を訴えた。
* イギリス人はビールを飲まず、皮肉を言って交換させた。
* ドイツ人は「アルコールで消毒されている」と思い、ハエを取り除いて飲んだ。
* フランス人は激怒して散々悪態をついて、もう一杯せしめた。
* ロシア人はすでに酔っぱらっていたのでハエに気付かずに飲んだ。
* ユダヤ人は「こら、これは俺のビールだ! 飲んだ分を返せ!」とハエを小突いた。
* 日本人は自分のジョッキにだけハエが入っているのを確認してからウエイターを呼んだ。
== 諜報機関 ==
([[w:アネクドート#秘密警察]]より)
国連がソ連のKGBとフランスのGIGNとアメリカのCIAは誰が一番犯人を捕まえるのがうまいか証明しようとしていた。国連の事務総長は彼らをテストすることにした。彼は森に1匹のウサギを放つと、それを捕まえてくるよう各々に指示した。
CIAは、動物の情報提供者を森中に配置した。さらに、植物や鉱物の目撃者に尋ねて回った。そうして3ヶ月に渡る徹底的な調査が終了した後、彼らはウサギは存在しないという結論を下した。
GIGNは2週間捜索し、成果が得られないとみると森に火をつけウサギもろともみんな殺してしまった。彼らは謝りもせず、ウサギに責任があると言った。
KGBは2時間ほど森に入っていたかと思うと、ひどく痛めつけられたクマを連れてきた。クマはうめいて言った「へぇへぇ、俺がウサギでございやす、ウサギで」。
== 無人島 ==
無人島に男2人、女1人が流された。そのときどうなるか。
*アメリカ人:男Aと女は結婚するが、すぐに離婚。男Bがその際の弁護士役を務める。
*ドイツ人:男Aと女は結婚し、男Bがその証人として書類を作成する。
*フランス人:男Aと女は結婚し、女は男Bと浮気する。
*イタリア人:3人で楽しむ。(意味深)
*日本人:男2人はそれぞれ、女をどうすればいいかについて東京の本社にお伺いを立てる。
== 料理 ==
フランス人が言った
「日本は豊かだと思っていたがそうではないようだ。腐った大豆(もしくは海藻)を食べているなんて」
日本人が言った
「フランスは豊かだと思っていたがそうではないようだ。かたつむりを食べているなんて」
フランス人と日本人が言った
「イギリスは豊かだと思っていたがそうではないようだ。イギリス料理を食べているなんて」
== 銃 ==
アメリカで家族全員が銃殺される事件が起きた。それが報道された時アメリカ人は口を揃えて言った。
「もっと銃規制が軽ければ家族は銃で自分の身を守れたであろう!」
== 酒 ==
いつも一緒に酒を飲んでいるロシア人とイギリス人とドイツ人がいた。
ある日、ドイツ人が言った「俺の寿命はもう一年もないらしい。俺が死んだら、毎年俺の命日にウォッカを墓にかけてくれないか?」
それを聞いたイギリス人は「毎年欠かさずにかけてやるさ」と言った。
ロシア人も言った「俺もかけてやるよ。ただし一回腎臓を通してからでいいかな?」
== 新聞 ==
ある新聞が『アイルランド人はケチである』という内容の記事を書いたところ、アイルランド人の団体から抗議の手紙が届いた。その手紙にはこう書いてあった。
「貴紙の書いたアイルランド人はケチであるという話は事実無根でありこのような記事を書き続ける場合は我々アイルランド人は対抗措置として貴紙を他人から借りて読むのをやめることとする」
== 必要なものは ==
国際的な会議でコロナ禍の今、なにが必要かについて話し合われた。
*アメリカ人は勇気、
*ドイツ人はルール、
*フランス人は愛、
*日本人は技術、
*ロシア人はウォッカ、
*イタリア人は裏切りと答えた
周りはロシア人に聞いた。 どうしてウォッカなのかと。
ロシア人は答えた。
「ウイルスは抑制できないが、不安を抑制することはできる。」
== 来る時間 ==
*開始一時間前に来たのがドイツ人と日本人とユダヤ人、
*開始30分前に来るのがイギリス人、
*開始時間ちょうどに来るのがアメリカ人、
*10分後に来るのがフランス人、
*15分後に来るのがイタリア人、
*30分〜1時間後に来るのがスペイン人。
*いつ来るのか分からないのがポルトガル人。
*中国人は、不法滞在している、もしくは入国禁止措置を取られているため来れない。
== 天国と地獄 ==
天国とは、
*コックは中国人(またはフランス人)
*政治家がイギリス人
*エンジニアが日本人(またはドイツ人)
*銀行員がドイツ人(またはスイス人)
*恋人がイタリア人
*警察官がイギリス人
地獄とは、
*コックがイギリス人
*政治家が日本人
*エンジニアが中国人
*銀行員がイタリア人
*恋人がドイツ人(またはスイス人)
*警察官がドイツ人(または中国人)
または
天国とは
*日本人の妻を持ち、
*アメリカ人の給料をもらい、
*中国人のコックを雇い、
*イギリス人の邸宅に住むこと
地獄とは
*アメリカ人の妻を持ち、
*中国人の給料をもらい、
*イギリス人のコックを雇い、
*日本人の家に住むこと
※ 中国が経済成長をする前のバージョン。
== 幸福 ==
幸福を買うかと神は各国の人々に言った。
*フランス人はワインとチーズがあるので買いませんと言った。
*イタリア人はパスタとサッカーさえあればいいので買いませんと言った。
*日本人は幸福を買い、領収書をもらった。
== たくさんあるもの ==
列車にアメリカ人とキューバ人とロシア人と弁護士と中国人(インド人)と付き添いの中国人(インド人)と日本人が座っていた。
キューバ人は葉巻を吸い終えると「ハバナの葉巻は最高級品だ。だがわが国には捨てるほどある。」と言って残った葉巻を窓の外に投げ捨てた。
ロシア人はウオッカを飲み終えると「ロシアのウオッカは最高だ。だがわが国には捨てるほどある。」と言って残った瓶を窓の外に放り投げた。
日本人はカメラで写真を撮ると「日本の機械は最高だ。だがわが国には捨てるほどある。」と言って写真を取り出して捨てた。
それを聞いたアメリカ人は、弁護士を窓から投げ捨てた。
それも見た中国人(インド人)は隣の中国人(インド人)を投げ捨てた。
韓国人はその話を聞いて「それらのルーツはすべて韓国だ」と言った。
== アジア関連 ==
=== 二次会 ===
結婚式の後、日本人と中国人と韓国人が二次会に行くことにした。
* 日本人「みんなが行くなら私も行きます」
* 中国人「おごってくれるなら私も行きます」
* 韓国人(黙って二人を二次会の飲み屋に連れていく)
=== 国際会議 ===
*国際会議において一番難しいのはインド人を黙らせ、日本人を喋らせることである。
=== 日本誕生 ===
*神様が日本列島を作りながら言った「この島々は日本と名付けよう。そしてこの国には美しい自然と素晴らしい文化と技術を与えよう。」助手がそれを聞いて言った「それではあまりにも日本が恵まれすぎています」神様は言った「安心しろ。多くの地震プレートや隣に朝鮮と中国、ロシアを作っておいた」
=== お会計 ===
*アジア人はどちらが全額支払うかで揉める。
=== 少子高齢化 ===
日本の少子高齢化について国会で話し合われた。
それからしばらく経って日本人の代表者がその問題について会見を行った。
その日本人は高らかに宣言した。
「私が最後の日本人だ」
=== 不良品 ===
*各国の工場に不良品は1000個に一個の精度でお願いします、とお願いすると
ロシアの工場では納期の延長を頼んだ。
中国の工場は不良品が10個あった。
日本の工場では999個作り終えると、「不良品用の設計図が届いていないのですが」と連絡しに来た。
=== 信用ならない言葉 ===
アジア人の信用ならない言葉3選
*日本人の「できません」
*韓国人の「できます」
*中国人の「できました」
=== 38度 ===
韓国の医学校で、生徒が先生に質問した。「先生、人は38度を超えるとどうなりますか?」「射殺されます」
=== 診察 ===
風邪をひいた日本人がアメリカのクリニックを訪れた。「How are you?」「I'm fine thank you, and you?」
=== アンケート ===
100人の日本人を対象にアンケートが実施された。「日本人は優柔不断な民族だと思いますか?」
*はい:13人
*いいえ:8人
*どちらとも言えない:79人
=== 輸血 ===
韓国の大統領が会談のために訪朝したが、道中で不慮の事故に遭い、意識不明の重体に陥った。
手術のために大量の輸血が行われたが、この時北朝鮮の官僚は思った。「今、ヤツの身体には北朝鮮人の血がたくさん流れている。親北思想に生まれ変わるに違いない!そうなれば韓国はあっという間に我らの手中に…!」
何時間にも及ぶ手術が終わり、大統領が意識を取り戻すと、開口一番に叫んだ。「金正恩の馬鹿野郎!」
=== ジョークと日本人 ===
日本人は1つのジョークで3回笑う。ジョークを聞いた時、隣の人にジョークのオチを説明してもらった時、家に帰ってからジョークのオチを理解した時。
=== パン屋 ===
ロシアを観光中の日本人・中国人・韓国人・北朝鮮人が、パン屋に並ぶ長蛇の列に出くわした。
日本人「パンを買う人の大行列ができている。この店のパンは絶品に違いない」
中国人「パンを買う人の大行列ができている。ロシア人は律儀な民族に違いない」
韓国人「パンを買う人の大行列ができている。この店は苦情が殺到するに違いない」
北朝鮮人「並びさえすればパンが買えるのか。ロシアは民主主義国家に違いない」
=== 日本人の怒らせ方 ===
中国・韓国・ロシア・北朝鮮・アメリカが、日本人を怒らせたくなって、結託して意地悪をする事にした。
中国は尖閣諸島を奪い取った。韓国は竹島を奪い取った。ロシアは北方領土を奪い取った。北朝鮮は弾道ミサイルを何発も発射した。アメリカは核爆弾を2発もお見舞いした。それでも日本人は怒らなかった。
各国がお手上げ状態になったその時、日本のテレビであるニュースが報じられ、日本人は憤慨した。「回転寿司の卓上醤油のボトルを舌で舐める動画が拡散され…」
=== 中国文化を学ぶ方法 ===
唐王朝の文化を見たいなら日本に行け。
宋王朝の文化を見たいならベトナムに行け。
明王朝の文化を見たいなら韓国に行け。
元王朝の文化を見たいならモンゴルに行け。
中華民国の文化を見たいなら台湾へ行け。
== 面白いジョーク ==
BはAに対して「面白いジョークを言えたら1ドルやるよ」と言った。以下は続き。
'''アメリカ&イギリス'''
*A「あるアメリカ人紳士がいた…」
*B「君には負けたよ!絶対にありえないじゃないか!」
'''ロシア人'''
*A「ある酒が嫌いなロシア人がいた…」
*B「君には負けたよ!絶対にありえないじゃないか!」
'''ドイツ人'''
*A「あるユニークなドイツ人がいた…」
*B「君には負けたよ!絶対にありえないじゃないか!」
== 教皇 ==
中世ヨーロッパには教皇が2人存在していた。
ある者が提案した。「みんなが納得する新しい教皇が必要だ。」そして3人目を出した。
結果は他の2人が認めず一時的に3人になり、問題を増やしてしまうだけだった。
== 嘘発見器 ==
中国共産党の習近平総書記と日本の岸田首相とアメリカのトランプ(ブッシュ)大統領が、ウソ発見器にかけられることになった。ウソをつくと「ビー」とブザーが鳴る装置である。
はじめに習近平総書記が装置に座って言った。
「私はいつも考えています。中国だけでなく世界中が豊かになればいいと」
「ビー、ビー、ビー」
次に岸田首相が装置に座って言った。
「私はいつも考えています。日本と北朝鮮が良き友人になればいいと」
「ビー、ビー、ビー」
最後にトランプ(ブッシュ)大統領が装置に座って言った。
「私はいつも考えています」
「ビー、ビー、ビー」
== 拉致 ==
ブッシュ大統領がテロリストに拉致された。「500万ドル用意しろ!さもなくばブッシュを生かして返すぞ」
== 拉致その2 ==
通勤中に渋滞に巻き込まれてしまった。すると前方から警察が歩いてきて窓をノックした。
「この先でブッシュ大統領がテロリストに拉致されてしまったんです。犯人は身代金を出さなければブッシュにガソリンを蒔いて火をつけるぞと言っています。いくらか寄付をお願いします」
「なるほど。いくら寄付すればいい?」
「1リットルもあれば十分です」
== 各国のベストセラー ==
アメリカでは新約聖書、
イスラエルでは旧約聖書、
ロシアでは偉人『スターリン』、
中国では毛沢東語録、
韓国では韓国の栄光、
日本では漫画
つまりどこの国でもフィクションが人気である
== 製品開発 ==
ドイツ人が発明し、
アメリカ人が製品化し、
イギリス人(ユダヤ人)が投資し、
フランス人がデザインし、
イタリア人が宣伝し、
日本人が小型化(高性能化)し、
中国が海賊版をつくり、
韓国が起源を主張する
== 懐に入れる ==
ある酒場に日本人・アメリカ人・ブラジル人の政治家が集まって話をしていた。
日本「あそこに橋が見えるでしょう?」
アメリカ「立派な橋ですね」
日本「実はここだけの話、建設費の10%を懐に入れましてね」
一同、ニヤニヤ
アメリカ「あそこにビルが見えるでしょう?」
ブラジル「高いビルですね」
アメリカ「私は30%を懐に入れましたよ」
一同、爆笑
ブラジル「あそこにダムが見えるでしょう?」
日本・アメリカ「いいえ?」
ブラジル「100%懐に入れました」
== 不法滞在 ==
オーストラリアの首相が言った
「我が国への不法滞在は絶対に許さない!」
アボリジニ「えっ!いつ帰ってくれるの?」
==オリンピック==
オリンピックのマークを見てアメリカ人はこう言った。
「O、O、O、O、Oってなんだ?」
== 時間厳守! ==
日本人「アメリカ人は時間にルーズだ。会議の開始時刻になっても全員集まらない」
アメリカ人「日本人は時間にルーズだ。終了時刻になってもまだ会議が終わらない」
== お静かに ==
日本のオフィスで静かにしなければならないのは、みんな仕事に集中しているから。
イタリアのオフィスで静かにしなければならないのは、みんな寝ているから。
== 図書館にて ==
「『平和国家・アメリカ』という本はありますか?」「ありますよ。ファンタジーノベルの棚をご覧ください」
== 持ち込み禁止 ==
2人のアメリカ人がカフェを訪れ、それぞれのカバンからサンドイッチを取り出し食べ始めた。
店員が注意を促した。「お客様、持参物の飲食はご遠慮願います」
2人は目を見合わせると、互いのサンドイッチを交換した。
== 理想の人間 ==
最も望ましい人間とは…
*ロシア人のように酒を慎み
*イギリス人のように料理が上手く(または「賭け事を慎み」)
*フランス人のように協調性があり
*イタリア人のように紳士的で(または「よく働き」)
*アメリカ人のように清貧で(または「寛容で」)
*ユダヤ人のように太っ腹で
*中国人のように法を守り
*インド人のように時間を守り
*日本人のように個性的で
*韓国人のように責任感があり
*ドイツ人のようにユーモラスな者である。
== 交通事故 ==
車を運転中、飛び出してきた歩行者に接触してしまった。ケガをした歩行者が運転手にかけた言葉とは?
アメリカ人「私から言う事は何もない。あとは弁護士と話してくれ」
ドイツ人「貴方が加入している保険会社の損害賠償額と免責事項を教えて下さい」
フランス人「なにボサッとしてんだ!こっちにだって飛び出す権利がある筈だ!」
イタリア人「あなたに娘さんはいますか?」
イギリス人「ちくしょう、今日は誰とも話さないって賭けをしてたのに!」
日本人「私にも落ち度があります。示談にしますか?保険を使いますか?」
韓国人「絶対に許さない!孫の代まで謝罪と賠償を要求する」
中国人は不法滞在しているので無言で立ち去る。
== 100万で買えるもの ==
日本人「100万もらったぞ!中古車くらいなら買えるかな。」
アメリカ人「は?100万あったら庭付きの家位は買えるだろ。」
韓国人「お前らのところ物価低すぎるだろ、100万あったら買えるのはせいぜいスマホくらいだろ」
日本人は100万円のことを言っており、アメリカ人は100万ドルのことを言っており、韓国人は100万ウォンのことを言っている。
==アリとキリギリス==
アリは夏の間にせっせと働き、冬を耐えるための食べ物を蓄えた。
キリギリスはその間バイオリンを弾いていた。
さて、冬になったらどうする?
フランス人「愛し合って冬を凌ぐ」
ドイツ人「キリギリスがアリの家でバイオリンを弾き、演奏料金としてアリから食べ物をもらう」
日本人「アリが過労により死に、キリギリスがそれらを食べて冬を耐えた」
==優秀な将軍==
フランス人とドイツ人とロシア人が、歴史上で最も優秀な将軍が誰か話し合っている。
そこで彼らはこう言った。
フランス人「ナポレオンこそ優秀な将軍だ」
ドイツ人「ヒトラーほど素晴らしい指導者はいない」
ロシア人「冬”将軍”だ」
== 道に落ちているりんご ==
ノルウェー人は拾って食べる
アイスランド人はりんごを拾い、綺麗に拭いてあげる
スウェーデン人は気づかないふりをする
フィンランド人は気づかない
デンマーク人はりんごをスウェーデン人に売りつける
日本人はどうするか悩む
中国人はけとばす
== ジャパングリッシュ ==
ある日本人がイタリア人とイギリス人に言った。
日本人「イタリアとイギリスって首都名の頭文字一緒ですよね!”ロ”ンドン、”ロ”ーマ、一緒なんて面白いですね!」
イタリア人「確かに日本語ではそうだけど…」
イギリス人「英語表記では違いますね」
日本人「えっそうなんですか!…あっ!でも国名の頭文字は一緒ですね!!”イ”タリア、”イ”ギリスですもんね!」
イタリア人「えっ、あぁ…」
イギリス人「”日本語表記では”確かに一緒ですね。」
イタリア人・イギリス人『…まさか日本人はRとLを間違えるとは聞いたことがあるけど…IとEも見分けられないのか…』
〜聖書に登場する人類の祖先「アダムとイブ」の正体について、各国の人が議論しています。〜
「アダムとイブは、一体どこの国の人だったのだろうか?」
• フランス人: 「服を着ずに愛し合っていたんだ。絶対にフランス人に違いない!」
• イギリス人: 「いや、1つのリンゴを紳士淑女として分け合って食べたんだ。イギリス人だよ」
• 日本人: 「いやいや、神様の言うルールを頑なに守ろうとしていたから、日本人に決まっている」
そこへ、事情をよく知る旧ソ連圏の人間がやってきて言いました。
「いや、彼らは間違いなく我が国の人間だ。着る服もなく、住む家もなく、食べるものはリンゴ1個しかないのに、自分たちは天国にいると信じ込まされていたんだから」
== 青いキリン ==
ある大富豪は言った。「青いキリンを一番早く連れてきた者に総資産を渡そう」と。
* イギリス人は複数人集まって議論し、青いキリンは居ないという結論についた。
* ドイツ人は図書館などで調べた。
* アメリカ人は世界中を調べまわった。
* 日本人は品種改良の末に青いキリンを作り出せた。
* 中国人は青いペンキを買いに行った。
== ロボコップ ==
日本人のエンジニアが、犯罪者を探して捕縛するロボットを作り上げた。早速日本で稼働させてみたところ、ロボットは1時間で10人のスリ師を捕まえてみせた。
ロボットをアメリカに輸出し稼働させてみたところ、1時間で100人の窃盗犯を捕まえた。
ロボットを中国に輸出し稼働させてみたところ、総書記を捕まえようとしたため、粉々になった。
ロボットをメキシコに輸出してみたところ、このロボットそのものが盗まれた。
dhn20pcf7d61axpgwxguu3bcgwzs5zp
304924
304922
2026-10-21T04:26:03Z
~2026-56291-81
92847
/* 必要なものは */
304924
wikitext
text/x-wiki
{{wikipedia|エスニックジョーク}}
エスニックジョーク(民族や国民性や国家を題材としたジョーク)は、ある民族の典型的な特徴を誇張することで笑いを誘うものです。
この項では、エスニックジョークを紹介します。
ブラックジョークもあるので注意!
== 前提 ==
{{wikipedia|ステレオタイプ#人種・国籍・肌の色など}}
よくジョークに登場する民族とその特徴は、しばしば次のように表現されることが多いです。なお、重複する特徴もしばしばあります。言語の違いによるジョークも多いです。国民性・民族性に由来する偏見(いわゆる「[[w:ステレオタイプ|ステレオタイプ]]」)を笑うものですが、現在では公の場での取り扱いは注意を要します。
*アメリカ人:大雑把、陽気、贅沢、ヒーローへのあこがれが強い、訴訟をよくおこす、地理の知識がない、銃社会、ケンカ好き、傲慢、独善的。
*イギリス人:皮肉屋、紅茶好き、紳士の国、合理的、料理が不味い、堅苦しい、賭博好き。
*フランス人:ひねくれ者、キザ、恋愛重視、感覚的、自己中心的。
*イタリア人:女好き、怠け者、陽気、グルメ、情熱的。
*ドイツ人:生真面目、合理的、技術大国、頑固、個人主義。
*ロシア人:酒好き(特にウォッカ)、旧ソ連の影響のあるものは秘密主義などの厳しい政治。
*日本人:真面目、技術大国、集団主義、働きすぎ、家が狭い、勤勉、金持ち、英語が下手。
*中国人:食へのこだわり・グルメ、ケチ、強引、法を守らない。
*韓国人:酒好き、日本へのライバル意識、他責思考、韓国起源説の主張。
*ユダヤ人:狡猾、金儲けがうまい。米国においては、基本的に富裕層。
*アイルランド人:酒豪、ケチ。米国においては、遅れて入植したヨーロッパ系移民であって、多くは貧困層を形成するものとされた。
*ロマ(いわゆる「ジプシー」):高価なものや財布を見つけたらすぐ盗りに行く。ケチ。
*ポルトガル人:時間にルーズ。うるさい。ロマンチック。味覚が鈍感。
== 沈没船 ==
世界各国の人が乗った船が沈没しかかっています。そこで、船長は各国の乗客を海に飛び込ませようとします。
* アメリカ人に対して「飛び込めばヒーローになれますよ」
* ロシア人に対して「海にウォッカのビンが流れていますよ」
* イタリア人に対して「飛び込めば女性に愛されますよ」または「美女が飛び込みました」
* フランス人に対して「絶対に飛び込まないでください」
* イギリス人に対して「海に飛び込めばあなたは紳士です」
* ドイツ人に対して「海に飛び込むのはルールです」
* インド人に対して「牛が溺れていますよ」
* 中国人に対して「おいしい魚が泳いでいますよ」
* 日本人に対して「みなさん飛び込んでいます」
* 韓国人に対して「日本人はもう飛び込みました」
* 北朝鮮人に対して「今が脱北のチャンスです」又は「[[ja:w:金正恩|偉大なる第一書記様]]の命令です」
* 台湾人に対して「中国が飛び込めば侵略を諦めると言っていましたよ」
== 酒場にて ==
頼んだ酒にハエが入っているのを見て、
* フランス人は怒って帰った。
* イギリス人はウエイターに取り替えさせた。2杯分の代金を払った。
* ドイツ人はハエを除いて飲んだ。
* ロシア人はそのまま飲んだ。
* アメリカ人はウエイターに取り替えさせた。1杯分の料金を払った。
* 日本人はアメリカ人と同じ。
* 中国人はハエを食べた。
* 韓国人はこれは日本のせいだ!と言って帰っていった。
* 台湾人は中国に腐肉を投げつけてあっち行けと言って帰った。
または
* アメリカ人はビールを飲んでから不衛生だと裁判所に店を訴えた。
* イギリス人はビールを飲まず、皮肉を言って交換させた。
* ドイツ人は「アルコールで消毒されている」と思い、ハエを取り除いて飲んだ。
* フランス人は激怒して散々悪態をついて、もう一杯せしめた。
* ロシア人はすでに酔っぱらっていたのでハエに気付かずに飲んだ。
* ユダヤ人は「こら、これは俺のビールだ! 飲んだ分を返せ!」とハエを小突いた。
* 日本人は自分のジョッキにだけハエが入っているのを確認してからウエイターを呼んだ。
== 諜報機関 ==
([[w:アネクドート#秘密警察]]より)
国連がソ連のKGBとフランスのGIGNとアメリカのCIAは誰が一番犯人を捕まえるのがうまいか証明しようとしていた。国連の事務総長は彼らをテストすることにした。彼は森に1匹のウサギを放つと、それを捕まえてくるよう各々に指示した。
CIAは、動物の情報提供者を森中に配置した。さらに、植物や鉱物の目撃者に尋ねて回った。そうして3ヶ月に渡る徹底的な調査が終了した後、彼らはウサギは存在しないという結論を下した。
GIGNは2週間捜索し、成果が得られないとみると森に火をつけウサギもろともみんな殺してしまった。彼らは謝りもせず、ウサギに責任があると言った。
KGBは2時間ほど森に入っていたかと思うと、ひどく痛めつけられたクマを連れてきた。クマはうめいて言った「へぇへぇ、俺がウサギでございやす、ウサギで」。
== 無人島 ==
無人島に男2人、女1人が流された。そのときどうなるか。
*アメリカ人:男Aと女は結婚するが、すぐに離婚。男Bがその際の弁護士役を務める。
*ドイツ人:男Aと女は結婚し、男Bがその証人として書類を作成する。
*フランス人:男Aと女は結婚し、女は男Bと浮気する。
*イタリア人:3人で楽しむ。(意味深)
*日本人:男2人はそれぞれ、女をどうすればいいかについて東京の本社にお伺いを立てる。
== 料理 ==
フランス人が言った
「日本は豊かだと思っていたがそうではないようだ。腐った大豆(もしくは海藻)を食べているなんて」
日本人が言った
「フランスは豊かだと思っていたがそうではないようだ。かたつむりを食べているなんて」
フランス人と日本人が言った
「イギリスは豊かだと思っていたがそうではないようだ。イギリス料理を食べているなんて」
== 銃 ==
アメリカで家族全員が銃殺される事件が起きた。それが報道された時アメリカ人は口を揃えて言った。
「もっと銃規制が軽ければ家族は銃で自分の身を守れたであろう!」
== 酒 ==
いつも一緒に酒を飲んでいるロシア人とイギリス人とドイツ人がいた。
ある日、ドイツ人が言った「俺の寿命はもう一年もないらしい。俺が死んだら、毎年俺の命日にウォッカを墓にかけてくれないか?」
それを聞いたイギリス人は「毎年欠かさずにかけてやるさ」と言った。
ロシア人も言った「俺もかけてやるよ。ただし一回腎臓を通してからでいいかな?」
== 新聞 ==
ある新聞が『アイルランド人はケチである』という内容の記事を書いたところ、アイルランド人の団体から抗議の手紙が届いた。その手紙にはこう書いてあった。
「貴紙の書いたアイルランド人はケチであるという話は事実無根でありこのような記事を書き続ける場合は我々アイルランド人は対抗措置として貴紙を他人から借りて読むのをやめることとする」
== 必要なものは ==
国際的な会議でコロナ禍の今、なにが必要かについて話し合われた。
*アメリカ人は勇気、
*ドイツ人はルール、
*フランス人は愛、
*日本人は安倍マスク、
*ロシア人はウォッカ、
*イタリア人は裏切りと答えた
周りはロシア人に聞いた。 どうしてウォッカなのかと。
ロシア人は答えた。
「ウイルスは抑制できないが、不安を抑制することはできる。」
== 来る時間 ==
*開始一時間前に来たのがドイツ人と日本人とユダヤ人、
*開始30分前に来るのがイギリス人、
*開始時間ちょうどに来るのがアメリカ人、
*10分後に来るのがフランス人、
*15分後に来るのがイタリア人、
*30分〜1時間後に来るのがスペイン人。
*いつ来るのか分からないのがポルトガル人。
*中国人は、不法滞在している、もしくは入国禁止措置を取られているため来れない。
== 天国と地獄 ==
天国とは、
*コックは中国人(またはフランス人)
*政治家がイギリス人
*エンジニアが日本人(またはドイツ人)
*銀行員がドイツ人(またはスイス人)
*恋人がイタリア人
*警察官がイギリス人
地獄とは、
*コックがイギリス人
*政治家が日本人
*エンジニアが中国人
*銀行員がイタリア人
*恋人がドイツ人(またはスイス人)
*警察官がドイツ人(または中国人)
または
天国とは
*日本人の妻を持ち、
*アメリカ人の給料をもらい、
*中国人のコックを雇い、
*イギリス人の邸宅に住むこと
地獄とは
*アメリカ人の妻を持ち、
*中国人の給料をもらい、
*イギリス人のコックを雇い、
*日本人の家に住むこと
※ 中国が経済成長をする前のバージョン。
== 幸福 ==
幸福を買うかと神は各国の人々に言った。
*フランス人はワインとチーズがあるので買いませんと言った。
*イタリア人はパスタとサッカーさえあればいいので買いませんと言った。
*日本人は幸福を買い、領収書をもらった。
== たくさんあるもの ==
列車にアメリカ人とキューバ人とロシア人と弁護士と中国人(インド人)と付き添いの中国人(インド人)と日本人が座っていた。
キューバ人は葉巻を吸い終えると「ハバナの葉巻は最高級品だ。だがわが国には捨てるほどある。」と言って残った葉巻を窓の外に投げ捨てた。
ロシア人はウオッカを飲み終えると「ロシアのウオッカは最高だ。だがわが国には捨てるほどある。」と言って残った瓶を窓の外に放り投げた。
日本人はカメラで写真を撮ると「日本の機械は最高だ。だがわが国には捨てるほどある。」と言って写真を取り出して捨てた。
それを聞いたアメリカ人は、弁護士を窓から投げ捨てた。
それも見た中国人(インド人)は隣の中国人(インド人)を投げ捨てた。
韓国人はその話を聞いて「それらのルーツはすべて韓国だ」と言った。
== アジア関連 ==
=== 二次会 ===
結婚式の後、日本人と中国人と韓国人が二次会に行くことにした。
* 日本人「みんなが行くなら私も行きます」
* 中国人「おごってくれるなら私も行きます」
* 韓国人(黙って二人を二次会の飲み屋に連れていく)
=== 国際会議 ===
*国際会議において一番難しいのはインド人を黙らせ、日本人を喋らせることである。
=== 日本誕生 ===
*神様が日本列島を作りながら言った「この島々は日本と名付けよう。そしてこの国には美しい自然と素晴らしい文化と技術を与えよう。」助手がそれを聞いて言った「それではあまりにも日本が恵まれすぎています」神様は言った「安心しろ。多くの地震プレートや隣に朝鮮と中国、ロシアを作っておいた」
=== お会計 ===
*アジア人はどちらが全額支払うかで揉める。
=== 少子高齢化 ===
日本の少子高齢化について国会で話し合われた。
それからしばらく経って日本人の代表者がその問題について会見を行った。
その日本人は高らかに宣言した。
「私が最後の日本人だ」
=== 不良品 ===
*各国の工場に不良品は1000個に一個の精度でお願いします、とお願いすると
ロシアの工場では納期の延長を頼んだ。
中国の工場は不良品が10個あった。
日本の工場では999個作り終えると、「不良品用の設計図が届いていないのですが」と連絡しに来た。
=== 信用ならない言葉 ===
アジア人の信用ならない言葉3選
*日本人の「できません」
*韓国人の「できます」
*中国人の「できました」
=== 38度 ===
韓国の医学校で、生徒が先生に質問した。「先生、人は38度を超えるとどうなりますか?」「射殺されます」
=== 診察 ===
風邪をひいた日本人がアメリカのクリニックを訪れた。「How are you?」「I'm fine thank you, and you?」
=== アンケート ===
100人の日本人を対象にアンケートが実施された。「日本人は優柔不断な民族だと思いますか?」
*はい:13人
*いいえ:8人
*どちらとも言えない:79人
=== 輸血 ===
韓国の大統領が会談のために訪朝したが、道中で不慮の事故に遭い、意識不明の重体に陥った。
手術のために大量の輸血が行われたが、この時北朝鮮の官僚は思った。「今、ヤツの身体には北朝鮮人の血がたくさん流れている。親北思想に生まれ変わるに違いない!そうなれば韓国はあっという間に我らの手中に…!」
何時間にも及ぶ手術が終わり、大統領が意識を取り戻すと、開口一番に叫んだ。「金正恩の馬鹿野郎!」
=== ジョークと日本人 ===
日本人は1つのジョークで3回笑う。ジョークを聞いた時、隣の人にジョークのオチを説明してもらった時、家に帰ってからジョークのオチを理解した時。
=== パン屋 ===
ロシアを観光中の日本人・中国人・韓国人・北朝鮮人が、パン屋に並ぶ長蛇の列に出くわした。
日本人「パンを買う人の大行列ができている。この店のパンは絶品に違いない」
中国人「パンを買う人の大行列ができている。ロシア人は律儀な民族に違いない」
韓国人「パンを買う人の大行列ができている。この店は苦情が殺到するに違いない」
北朝鮮人「並びさえすればパンが買えるのか。ロシアは民主主義国家に違いない」
=== 日本人の怒らせ方 ===
中国・韓国・ロシア・北朝鮮・アメリカが、日本人を怒らせたくなって、結託して意地悪をする事にした。
中国は尖閣諸島を奪い取った。韓国は竹島を奪い取った。ロシアは北方領土を奪い取った。北朝鮮は弾道ミサイルを何発も発射した。アメリカは核爆弾を2発もお見舞いした。それでも日本人は怒らなかった。
各国がお手上げ状態になったその時、日本のテレビであるニュースが報じられ、日本人は憤慨した。「回転寿司の卓上醤油のボトルを舌で舐める動画が拡散され…」
=== 中国文化を学ぶ方法 ===
唐王朝の文化を見たいなら日本に行け。
宋王朝の文化を見たいならベトナムに行け。
明王朝の文化を見たいなら韓国に行け。
元王朝の文化を見たいならモンゴルに行け。
中華民国の文化を見たいなら台湾へ行け。
== 面白いジョーク ==
BはAに対して「面白いジョークを言えたら1ドルやるよ」と言った。以下は続き。
'''アメリカ&イギリス'''
*A「あるアメリカ人紳士がいた…」
*B「君には負けたよ!絶対にありえないじゃないか!」
'''ロシア人'''
*A「ある酒が嫌いなロシア人がいた…」
*B「君には負けたよ!絶対にありえないじゃないか!」
'''ドイツ人'''
*A「あるユニークなドイツ人がいた…」
*B「君には負けたよ!絶対にありえないじゃないか!」
== 教皇 ==
中世ヨーロッパには教皇が2人存在していた。
ある者が提案した。「みんなが納得する新しい教皇が必要だ。」そして3人目を出した。
結果は他の2人が認めず一時的に3人になり、問題を増やしてしまうだけだった。
== 嘘発見器 ==
中国共産党の習近平総書記と日本の岸田首相とアメリカのトランプ(ブッシュ)大統領が、ウソ発見器にかけられることになった。ウソをつくと「ビー」とブザーが鳴る装置である。
はじめに習近平総書記が装置に座って言った。
「私はいつも考えています。中国だけでなく世界中が豊かになればいいと」
「ビー、ビー、ビー」
次に岸田首相が装置に座って言った。
「私はいつも考えています。日本と北朝鮮が良き友人になればいいと」
「ビー、ビー、ビー」
最後にトランプ(ブッシュ)大統領が装置に座って言った。
「私はいつも考えています」
「ビー、ビー、ビー」
== 拉致 ==
ブッシュ大統領がテロリストに拉致された。「500万ドル用意しろ!さもなくばブッシュを生かして返すぞ」
== 拉致その2 ==
通勤中に渋滞に巻き込まれてしまった。すると前方から警察が歩いてきて窓をノックした。
「この先でブッシュ大統領がテロリストに拉致されてしまったんです。犯人は身代金を出さなければブッシュにガソリンを蒔いて火をつけるぞと言っています。いくらか寄付をお願いします」
「なるほど。いくら寄付すればいい?」
「1リットルもあれば十分です」
== 各国のベストセラー ==
アメリカでは新約聖書、
イスラエルでは旧約聖書、
ロシアでは偉人『スターリン』、
中国では毛沢東語録、
韓国では韓国の栄光、
日本では漫画
つまりどこの国でもフィクションが人気である
== 製品開発 ==
ドイツ人が発明し、
アメリカ人が製品化し、
イギリス人(ユダヤ人)が投資し、
フランス人がデザインし、
イタリア人が宣伝し、
日本人が小型化(高性能化)し、
中国が海賊版をつくり、
韓国が起源を主張する
== 懐に入れる ==
ある酒場に日本人・アメリカ人・ブラジル人の政治家が集まって話をしていた。
日本「あそこに橋が見えるでしょう?」
アメリカ「立派な橋ですね」
日本「実はここだけの話、建設費の10%を懐に入れましてね」
一同、ニヤニヤ
アメリカ「あそこにビルが見えるでしょう?」
ブラジル「高いビルですね」
アメリカ「私は30%を懐に入れましたよ」
一同、爆笑
ブラジル「あそこにダムが見えるでしょう?」
日本・アメリカ「いいえ?」
ブラジル「100%懐に入れました」
== 不法滞在 ==
オーストラリアの首相が言った
「我が国への不法滞在は絶対に許さない!」
アボリジニ「えっ!いつ帰ってくれるの?」
==オリンピック==
オリンピックのマークを見てアメリカ人はこう言った。
「O、O、O、O、Oってなんだ?」
== 時間厳守! ==
日本人「アメリカ人は時間にルーズだ。会議の開始時刻になっても全員集まらない」
アメリカ人「日本人は時間にルーズだ。終了時刻になってもまだ会議が終わらない」
== お静かに ==
日本のオフィスで静かにしなければならないのは、みんな仕事に集中しているから。
イタリアのオフィスで静かにしなければならないのは、みんな寝ているから。
== 図書館にて ==
「『平和国家・アメリカ』という本はありますか?」「ありますよ。ファンタジーノベルの棚をご覧ください」
== 持ち込み禁止 ==
2人のアメリカ人がカフェを訪れ、それぞれのカバンからサンドイッチを取り出し食べ始めた。
店員が注意を促した。「お客様、持参物の飲食はご遠慮願います」
2人は目を見合わせると、互いのサンドイッチを交換した。
== 理想の人間 ==
最も望ましい人間とは…
*ロシア人のように酒を慎み
*イギリス人のように料理が上手く(または「賭け事を慎み」)
*フランス人のように協調性があり
*イタリア人のように紳士的で(または「よく働き」)
*アメリカ人のように清貧で(または「寛容で」)
*ユダヤ人のように太っ腹で
*中国人のように法を守り
*インド人のように時間を守り
*日本人のように個性的で
*韓国人のように責任感があり
*ドイツ人のようにユーモラスな者である。
== 交通事故 ==
車を運転中、飛び出してきた歩行者に接触してしまった。ケガをした歩行者が運転手にかけた言葉とは?
アメリカ人「私から言う事は何もない。あとは弁護士と話してくれ」
ドイツ人「貴方が加入している保険会社の損害賠償額と免責事項を教えて下さい」
フランス人「なにボサッとしてんだ!こっちにだって飛び出す権利がある筈だ!」
イタリア人「あなたに娘さんはいますか?」
イギリス人「ちくしょう、今日は誰とも話さないって賭けをしてたのに!」
日本人「私にも落ち度があります。示談にしますか?保険を使いますか?」
韓国人「絶対に許さない!孫の代まで謝罪と賠償を要求する」
中国人は不法滞在しているので無言で立ち去る。
== 100万で買えるもの ==
日本人「100万もらったぞ!中古車くらいなら買えるかな。」
アメリカ人「は?100万あったら庭付きの家位は買えるだろ。」
韓国人「お前らのところ物価低すぎるだろ、100万あったら買えるのはせいぜいスマホくらいだろ」
日本人は100万円のことを言っており、アメリカ人は100万ドルのことを言っており、韓国人は100万ウォンのことを言っている。
==アリとキリギリス==
アリは夏の間にせっせと働き、冬を耐えるための食べ物を蓄えた。
キリギリスはその間バイオリンを弾いていた。
さて、冬になったらどうする?
フランス人「愛し合って冬を凌ぐ」
ドイツ人「キリギリスがアリの家でバイオリンを弾き、演奏料金としてアリから食べ物をもらう」
日本人「アリが過労により死に、キリギリスがそれらを食べて冬を耐えた」
==優秀な将軍==
フランス人とドイツ人とロシア人が、歴史上で最も優秀な将軍が誰か話し合っている。
そこで彼らはこう言った。
フランス人「ナポレオンこそ優秀な将軍だ」
ドイツ人「ヒトラーほど素晴らしい指導者はいない」
ロシア人「冬”将軍”だ」
== 道に落ちているりんご ==
ノルウェー人は拾って食べる
アイスランド人はりんごを拾い、綺麗に拭いてあげる
スウェーデン人は気づかないふりをする
フィンランド人は気づかない
デンマーク人はりんごをスウェーデン人に売りつける
日本人はどうするか悩む
中国人はけとばす
== ジャパングリッシュ ==
ある日本人がイタリア人とイギリス人に言った。
日本人「イタリアとイギリスって首都名の頭文字一緒ですよね!”ロ”ンドン、”ロ”ーマ、一緒なんて面白いですね!」
イタリア人「確かに日本語ではそうだけど…」
イギリス人「英語表記では違いますね」
日本人「えっそうなんですか!…あっ!でも国名の頭文字は一緒ですね!!”イ”タリア、”イ”ギリスですもんね!」
イタリア人「えっ、あぁ…」
イギリス人「”日本語表記では”確かに一緒ですね。」
イタリア人・イギリス人『…まさか日本人はRとLを間違えるとは聞いたことがあるけど…IとEも見分けられないのか…』
〜聖書に登場する人類の祖先「アダムとイブ」の正体について、各国の人が議論しています。〜
「アダムとイブは、一体どこの国の人だったのだろうか?」
• フランス人: 「服を着ずに愛し合っていたんだ。絶対にフランス人に違いない!」
• イギリス人: 「いや、1つのリンゴを紳士淑女として分け合って食べたんだ。イギリス人だよ」
• 日本人: 「いやいや、神様の言うルールを頑なに守ろうとしていたから、日本人に決まっている」
そこへ、事情をよく知る旧ソ連圏の人間がやってきて言いました。
「いや、彼らは間違いなく我が国の人間だ。着る服もなく、住む家もなく、食べるものはリンゴ1個しかないのに、自分たちは天国にいると信じ込まされていたんだから」
== 青いキリン ==
ある大富豪は言った。「青いキリンを一番早く連れてきた者に総資産を渡そう」と。
* イギリス人は複数人集まって議論し、青いキリンは居ないという結論についた。
* ドイツ人は図書館などで調べた。
* アメリカ人は世界中を調べまわった。
* 日本人は品種改良の末に青いキリンを作り出せた。
* 中国人は青いペンキを買いに行った。
== ロボコップ ==
日本人のエンジニアが、犯罪者を探して捕縛するロボットを作り上げた。早速日本で稼働させてみたところ、ロボットは1時間で10人のスリ師を捕まえてみせた。
ロボットをアメリカに輸出し稼働させてみたところ、1時間で100人の窃盗犯を捕まえた。
ロボットを中国に輸出し稼働させてみたところ、総書記を捕まえようとしたため、粉々になった。
ロボットをメキシコに輸出してみたところ、このロボットそのものが盗まれた。
iawb7yl3i4o2j8avabmj8kvdzrklbvq
304925
304924
2026-10-21T04:26:42Z
~2026-56291-81
92847
/* 必要なものは */
304925
wikitext
text/x-wiki
{{wikipedia|エスニックジョーク}}
エスニックジョーク(民族や国民性や国家を題材としたジョーク)は、ある民族の典型的な特徴を誇張することで笑いを誘うものです。
この項では、エスニックジョークを紹介します。
ブラックジョークもあるので注意!
== 前提 ==
{{wikipedia|ステレオタイプ#人種・国籍・肌の色など}}
よくジョークに登場する民族とその特徴は、しばしば次のように表現されることが多いです。なお、重複する特徴もしばしばあります。言語の違いによるジョークも多いです。国民性・民族性に由来する偏見(いわゆる「[[w:ステレオタイプ|ステレオタイプ]]」)を笑うものですが、現在では公の場での取り扱いは注意を要します。
*アメリカ人:大雑把、陽気、贅沢、ヒーローへのあこがれが強い、訴訟をよくおこす、地理の知識がない、銃社会、ケンカ好き、傲慢、独善的。
*イギリス人:皮肉屋、紅茶好き、紳士の国、合理的、料理が不味い、堅苦しい、賭博好き。
*フランス人:ひねくれ者、キザ、恋愛重視、感覚的、自己中心的。
*イタリア人:女好き、怠け者、陽気、グルメ、情熱的。
*ドイツ人:生真面目、合理的、技術大国、頑固、個人主義。
*ロシア人:酒好き(特にウォッカ)、旧ソ連の影響のあるものは秘密主義などの厳しい政治。
*日本人:真面目、技術大国、集団主義、働きすぎ、家が狭い、勤勉、金持ち、英語が下手。
*中国人:食へのこだわり・グルメ、ケチ、強引、法を守らない。
*韓国人:酒好き、日本へのライバル意識、他責思考、韓国起源説の主張。
*ユダヤ人:狡猾、金儲けがうまい。米国においては、基本的に富裕層。
*アイルランド人:酒豪、ケチ。米国においては、遅れて入植したヨーロッパ系移民であって、多くは貧困層を形成するものとされた。
*ロマ(いわゆる「ジプシー」):高価なものや財布を見つけたらすぐ盗りに行く。ケチ。
*ポルトガル人:時間にルーズ。うるさい。ロマンチック。味覚が鈍感。
== 沈没船 ==
世界各国の人が乗った船が沈没しかかっています。そこで、船長は各国の乗客を海に飛び込ませようとします。
* アメリカ人に対して「飛び込めばヒーローになれますよ」
* ロシア人に対して「海にウォッカのビンが流れていますよ」
* イタリア人に対して「飛び込めば女性に愛されますよ」または「美女が飛び込みました」
* フランス人に対して「絶対に飛び込まないでください」
* イギリス人に対して「海に飛び込めばあなたは紳士です」
* ドイツ人に対して「海に飛び込むのはルールです」
* インド人に対して「牛が溺れていますよ」
* 中国人に対して「おいしい魚が泳いでいますよ」
* 日本人に対して「みなさん飛び込んでいます」
* 韓国人に対して「日本人はもう飛び込みました」
* 北朝鮮人に対して「今が脱北のチャンスです」又は「[[ja:w:金正恩|偉大なる第一書記様]]の命令です」
* 台湾人に対して「中国が飛び込めば侵略を諦めると言っていましたよ」
== 酒場にて ==
頼んだ酒にハエが入っているのを見て、
* フランス人は怒って帰った。
* イギリス人はウエイターに取り替えさせた。2杯分の代金を払った。
* ドイツ人はハエを除いて飲んだ。
* ロシア人はそのまま飲んだ。
* アメリカ人はウエイターに取り替えさせた。1杯分の料金を払った。
* 日本人はアメリカ人と同じ。
* 中国人はハエを食べた。
* 韓国人はこれは日本のせいだ!と言って帰っていった。
* 台湾人は中国に腐肉を投げつけてあっち行けと言って帰った。
または
* アメリカ人はビールを飲んでから不衛生だと裁判所に店を訴えた。
* イギリス人はビールを飲まず、皮肉を言って交換させた。
* ドイツ人は「アルコールで消毒されている」と思い、ハエを取り除いて飲んだ。
* フランス人は激怒して散々悪態をついて、もう一杯せしめた。
* ロシア人はすでに酔っぱらっていたのでハエに気付かずに飲んだ。
* ユダヤ人は「こら、これは俺のビールだ! 飲んだ分を返せ!」とハエを小突いた。
* 日本人は自分のジョッキにだけハエが入っているのを確認してからウエイターを呼んだ。
== 諜報機関 ==
([[w:アネクドート#秘密警察]]より)
国連がソ連のKGBとフランスのGIGNとアメリカのCIAは誰が一番犯人を捕まえるのがうまいか証明しようとしていた。国連の事務総長は彼らをテストすることにした。彼は森に1匹のウサギを放つと、それを捕まえてくるよう各々に指示した。
CIAは、動物の情報提供者を森中に配置した。さらに、植物や鉱物の目撃者に尋ねて回った。そうして3ヶ月に渡る徹底的な調査が終了した後、彼らはウサギは存在しないという結論を下した。
GIGNは2週間捜索し、成果が得られないとみると森に火をつけウサギもろともみんな殺してしまった。彼らは謝りもせず、ウサギに責任があると言った。
KGBは2時間ほど森に入っていたかと思うと、ひどく痛めつけられたクマを連れてきた。クマはうめいて言った「へぇへぇ、俺がウサギでございやす、ウサギで」。
== 無人島 ==
無人島に男2人、女1人が流された。そのときどうなるか。
*アメリカ人:男Aと女は結婚するが、すぐに離婚。男Bがその際の弁護士役を務める。
*ドイツ人:男Aと女は結婚し、男Bがその証人として書類を作成する。
*フランス人:男Aと女は結婚し、女は男Bと浮気する。
*イタリア人:3人で楽しむ。(意味深)
*日本人:男2人はそれぞれ、女をどうすればいいかについて東京の本社にお伺いを立てる。
== 料理 ==
フランス人が言った
「日本は豊かだと思っていたがそうではないようだ。腐った大豆(もしくは海藻)を食べているなんて」
日本人が言った
「フランスは豊かだと思っていたがそうではないようだ。かたつむりを食べているなんて」
フランス人と日本人が言った
「イギリスは豊かだと思っていたがそうではないようだ。イギリス料理を食べているなんて」
== 銃 ==
アメリカで家族全員が銃殺される事件が起きた。それが報道された時アメリカ人は口を揃えて言った。
「もっと銃規制が軽ければ家族は銃で自分の身を守れたであろう!」
== 酒 ==
いつも一緒に酒を飲んでいるロシア人とイギリス人とドイツ人がいた。
ある日、ドイツ人が言った「俺の寿命はもう一年もないらしい。俺が死んだら、毎年俺の命日にウォッカを墓にかけてくれないか?」
それを聞いたイギリス人は「毎年欠かさずにかけてやるさ」と言った。
ロシア人も言った「俺もかけてやるよ。ただし一回腎臓を通してからでいいかな?」
== 新聞 ==
ある新聞が『アイルランド人はケチである』という内容の記事を書いたところ、アイルランド人の団体から抗議の手紙が届いた。その手紙にはこう書いてあった。
「貴紙の書いたアイルランド人はケチであるという話は事実無根でありこのような記事を書き続ける場合は我々アイルランド人は対抗措置として貴紙を他人から借りて読むのをやめることとする」
== 必要なものは ==
国際的な会議でコロナ禍の今、なにが必要かについて話し合われた。
*アメリカ人は勇気、
*ドイツ人はルール、
*フランス人は愛、
*日本人はアベノマスク、
*ロシア人はウォッカ、
*イタリア人は裏切りと答えた
周りはロシア人に聞いた。 どうしてウォッカなのかと。
ロシア人は答えた。
「ウイルスは抑制できないが、不安を抑制することはできる。」
== 来る時間 ==
*開始一時間前に来たのがドイツ人と日本人とユダヤ人、
*開始30分前に来るのがイギリス人、
*開始時間ちょうどに来るのがアメリカ人、
*10分後に来るのがフランス人、
*15分後に来るのがイタリア人、
*30分〜1時間後に来るのがスペイン人。
*いつ来るのか分からないのがポルトガル人。
*中国人は、不法滞在している、もしくは入国禁止措置を取られているため来れない。
== 天国と地獄 ==
天国とは、
*コックは中国人(またはフランス人)
*政治家がイギリス人
*エンジニアが日本人(またはドイツ人)
*銀行員がドイツ人(またはスイス人)
*恋人がイタリア人
*警察官がイギリス人
地獄とは、
*コックがイギリス人
*政治家が日本人
*エンジニアが中国人
*銀行員がイタリア人
*恋人がドイツ人(またはスイス人)
*警察官がドイツ人(または中国人)
または
天国とは
*日本人の妻を持ち、
*アメリカ人の給料をもらい、
*中国人のコックを雇い、
*イギリス人の邸宅に住むこと
地獄とは
*アメリカ人の妻を持ち、
*中国人の給料をもらい、
*イギリス人のコックを雇い、
*日本人の家に住むこと
※ 中国が経済成長をする前のバージョン。
== 幸福 ==
幸福を買うかと神は各国の人々に言った。
*フランス人はワインとチーズがあるので買いませんと言った。
*イタリア人はパスタとサッカーさえあればいいので買いませんと言った。
*日本人は幸福を買い、領収書をもらった。
== たくさんあるもの ==
列車にアメリカ人とキューバ人とロシア人と弁護士と中国人(インド人)と付き添いの中国人(インド人)と日本人が座っていた。
キューバ人は葉巻を吸い終えると「ハバナの葉巻は最高級品だ。だがわが国には捨てるほどある。」と言って残った葉巻を窓の外に投げ捨てた。
ロシア人はウオッカを飲み終えると「ロシアのウオッカは最高だ。だがわが国には捨てるほどある。」と言って残った瓶を窓の外に放り投げた。
日本人はカメラで写真を撮ると「日本の機械は最高だ。だがわが国には捨てるほどある。」と言って写真を取り出して捨てた。
それを聞いたアメリカ人は、弁護士を窓から投げ捨てた。
それも見た中国人(インド人)は隣の中国人(インド人)を投げ捨てた。
韓国人はその話を聞いて「それらのルーツはすべて韓国だ」と言った。
== アジア関連 ==
=== 二次会 ===
結婚式の後、日本人と中国人と韓国人が二次会に行くことにした。
* 日本人「みんなが行くなら私も行きます」
* 中国人「おごってくれるなら私も行きます」
* 韓国人(黙って二人を二次会の飲み屋に連れていく)
=== 国際会議 ===
*国際会議において一番難しいのはインド人を黙らせ、日本人を喋らせることである。
=== 日本誕生 ===
*神様が日本列島を作りながら言った「この島々は日本と名付けよう。そしてこの国には美しい自然と素晴らしい文化と技術を与えよう。」助手がそれを聞いて言った「それではあまりにも日本が恵まれすぎています」神様は言った「安心しろ。多くの地震プレートや隣に朝鮮と中国、ロシアを作っておいた」
=== お会計 ===
*アジア人はどちらが全額支払うかで揉める。
=== 少子高齢化 ===
日本の少子高齢化について国会で話し合われた。
それからしばらく経って日本人の代表者がその問題について会見を行った。
その日本人は高らかに宣言した。
「私が最後の日本人だ」
=== 不良品 ===
*各国の工場に不良品は1000個に一個の精度でお願いします、とお願いすると
ロシアの工場では納期の延長を頼んだ。
中国の工場は不良品が10個あった。
日本の工場では999個作り終えると、「不良品用の設計図が届いていないのですが」と連絡しに来た。
=== 信用ならない言葉 ===
アジア人の信用ならない言葉3選
*日本人の「できません」
*韓国人の「できます」
*中国人の「できました」
=== 38度 ===
韓国の医学校で、生徒が先生に質問した。「先生、人は38度を超えるとどうなりますか?」「射殺されます」
=== 診察 ===
風邪をひいた日本人がアメリカのクリニックを訪れた。「How are you?」「I'm fine thank you, and you?」
=== アンケート ===
100人の日本人を対象にアンケートが実施された。「日本人は優柔不断な民族だと思いますか?」
*はい:13人
*いいえ:8人
*どちらとも言えない:79人
=== 輸血 ===
韓国の大統領が会談のために訪朝したが、道中で不慮の事故に遭い、意識不明の重体に陥った。
手術のために大量の輸血が行われたが、この時北朝鮮の官僚は思った。「今、ヤツの身体には北朝鮮人の血がたくさん流れている。親北思想に生まれ変わるに違いない!そうなれば韓国はあっという間に我らの手中に…!」
何時間にも及ぶ手術が終わり、大統領が意識を取り戻すと、開口一番に叫んだ。「金正恩の馬鹿野郎!」
=== ジョークと日本人 ===
日本人は1つのジョークで3回笑う。ジョークを聞いた時、隣の人にジョークのオチを説明してもらった時、家に帰ってからジョークのオチを理解した時。
=== パン屋 ===
ロシアを観光中の日本人・中国人・韓国人・北朝鮮人が、パン屋に並ぶ長蛇の列に出くわした。
日本人「パンを買う人の大行列ができている。この店のパンは絶品に違いない」
中国人「パンを買う人の大行列ができている。ロシア人は律儀な民族に違いない」
韓国人「パンを買う人の大行列ができている。この店は苦情が殺到するに違いない」
北朝鮮人「並びさえすればパンが買えるのか。ロシアは民主主義国家に違いない」
=== 日本人の怒らせ方 ===
中国・韓国・ロシア・北朝鮮・アメリカが、日本人を怒らせたくなって、結託して意地悪をする事にした。
中国は尖閣諸島を奪い取った。韓国は竹島を奪い取った。ロシアは北方領土を奪い取った。北朝鮮は弾道ミサイルを何発も発射した。アメリカは核爆弾を2発もお見舞いした。それでも日本人は怒らなかった。
各国がお手上げ状態になったその時、日本のテレビであるニュースが報じられ、日本人は憤慨した。「回転寿司の卓上醤油のボトルを舌で舐める動画が拡散され…」
=== 中国文化を学ぶ方法 ===
唐王朝の文化を見たいなら日本に行け。
宋王朝の文化を見たいならベトナムに行け。
明王朝の文化を見たいなら韓国に行け。
元王朝の文化を見たいならモンゴルに行け。
中華民国の文化を見たいなら台湾へ行け。
== 面白いジョーク ==
BはAに対して「面白いジョークを言えたら1ドルやるよ」と言った。以下は続き。
'''アメリカ&イギリス'''
*A「あるアメリカ人紳士がいた…」
*B「君には負けたよ!絶対にありえないじゃないか!」
'''ロシア人'''
*A「ある酒が嫌いなロシア人がいた…」
*B「君には負けたよ!絶対にありえないじゃないか!」
'''ドイツ人'''
*A「あるユニークなドイツ人がいた…」
*B「君には負けたよ!絶対にありえないじゃないか!」
== 教皇 ==
中世ヨーロッパには教皇が2人存在していた。
ある者が提案した。「みんなが納得する新しい教皇が必要だ。」そして3人目を出した。
結果は他の2人が認めず一時的に3人になり、問題を増やしてしまうだけだった。
== 嘘発見器 ==
中国共産党の習近平総書記と日本の岸田首相とアメリカのトランプ(ブッシュ)大統領が、ウソ発見器にかけられることになった。ウソをつくと「ビー」とブザーが鳴る装置である。
はじめに習近平総書記が装置に座って言った。
「私はいつも考えています。中国だけでなく世界中が豊かになればいいと」
「ビー、ビー、ビー」
次に岸田首相が装置に座って言った。
「私はいつも考えています。日本と北朝鮮が良き友人になればいいと」
「ビー、ビー、ビー」
最後にトランプ(ブッシュ)大統領が装置に座って言った。
「私はいつも考えています」
「ビー、ビー、ビー」
== 拉致 ==
ブッシュ大統領がテロリストに拉致された。「500万ドル用意しろ!さもなくばブッシュを生かして返すぞ」
== 拉致その2 ==
通勤中に渋滞に巻き込まれてしまった。すると前方から警察が歩いてきて窓をノックした。
「この先でブッシュ大統領がテロリストに拉致されてしまったんです。犯人は身代金を出さなければブッシュにガソリンを蒔いて火をつけるぞと言っています。いくらか寄付をお願いします」
「なるほど。いくら寄付すればいい?」
「1リットルもあれば十分です」
== 各国のベストセラー ==
アメリカでは新約聖書、
イスラエルでは旧約聖書、
ロシアでは偉人『スターリン』、
中国では毛沢東語録、
韓国では韓国の栄光、
日本では漫画
つまりどこの国でもフィクションが人気である
== 製品開発 ==
ドイツ人が発明し、
アメリカ人が製品化し、
イギリス人(ユダヤ人)が投資し、
フランス人がデザインし、
イタリア人が宣伝し、
日本人が小型化(高性能化)し、
中国が海賊版をつくり、
韓国が起源を主張する
== 懐に入れる ==
ある酒場に日本人・アメリカ人・ブラジル人の政治家が集まって話をしていた。
日本「あそこに橋が見えるでしょう?」
アメリカ「立派な橋ですね」
日本「実はここだけの話、建設費の10%を懐に入れましてね」
一同、ニヤニヤ
アメリカ「あそこにビルが見えるでしょう?」
ブラジル「高いビルですね」
アメリカ「私は30%を懐に入れましたよ」
一同、爆笑
ブラジル「あそこにダムが見えるでしょう?」
日本・アメリカ「いいえ?」
ブラジル「100%懐に入れました」
== 不法滞在 ==
オーストラリアの首相が言った
「我が国への不法滞在は絶対に許さない!」
アボリジニ「えっ!いつ帰ってくれるの?」
==オリンピック==
オリンピックのマークを見てアメリカ人はこう言った。
「O、O、O、O、Oってなんだ?」
== 時間厳守! ==
日本人「アメリカ人は時間にルーズだ。会議の開始時刻になっても全員集まらない」
アメリカ人「日本人は時間にルーズだ。終了時刻になってもまだ会議が終わらない」
== お静かに ==
日本のオフィスで静かにしなければならないのは、みんな仕事に集中しているから。
イタリアのオフィスで静かにしなければならないのは、みんな寝ているから。
== 図書館にて ==
「『平和国家・アメリカ』という本はありますか?」「ありますよ。ファンタジーノベルの棚をご覧ください」
== 持ち込み禁止 ==
2人のアメリカ人がカフェを訪れ、それぞれのカバンからサンドイッチを取り出し食べ始めた。
店員が注意を促した。「お客様、持参物の飲食はご遠慮願います」
2人は目を見合わせると、互いのサンドイッチを交換した。
== 理想の人間 ==
最も望ましい人間とは…
*ロシア人のように酒を慎み
*イギリス人のように料理が上手く(または「賭け事を慎み」)
*フランス人のように協調性があり
*イタリア人のように紳士的で(または「よく働き」)
*アメリカ人のように清貧で(または「寛容で」)
*ユダヤ人のように太っ腹で
*中国人のように法を守り
*インド人のように時間を守り
*日本人のように個性的で
*韓国人のように責任感があり
*ドイツ人のようにユーモラスな者である。
== 交通事故 ==
車を運転中、飛び出してきた歩行者に接触してしまった。ケガをした歩行者が運転手にかけた言葉とは?
アメリカ人「私から言う事は何もない。あとは弁護士と話してくれ」
ドイツ人「貴方が加入している保険会社の損害賠償額と免責事項を教えて下さい」
フランス人「なにボサッとしてんだ!こっちにだって飛び出す権利がある筈だ!」
イタリア人「あなたに娘さんはいますか?」
イギリス人「ちくしょう、今日は誰とも話さないって賭けをしてたのに!」
日本人「私にも落ち度があります。示談にしますか?保険を使いますか?」
韓国人「絶対に許さない!孫の代まで謝罪と賠償を要求する」
中国人は不法滞在しているので無言で立ち去る。
== 100万で買えるもの ==
日本人「100万もらったぞ!中古車くらいなら買えるかな。」
アメリカ人「は?100万あったら庭付きの家位は買えるだろ。」
韓国人「お前らのところ物価低すぎるだろ、100万あったら買えるのはせいぜいスマホくらいだろ」
日本人は100万円のことを言っており、アメリカ人は100万ドルのことを言っており、韓国人は100万ウォンのことを言っている。
==アリとキリギリス==
アリは夏の間にせっせと働き、冬を耐えるための食べ物を蓄えた。
キリギリスはその間バイオリンを弾いていた。
さて、冬になったらどうする?
フランス人「愛し合って冬を凌ぐ」
ドイツ人「キリギリスがアリの家でバイオリンを弾き、演奏料金としてアリから食べ物をもらう」
日本人「アリが過労により死に、キリギリスがそれらを食べて冬を耐えた」
==優秀な将軍==
フランス人とドイツ人とロシア人が、歴史上で最も優秀な将軍が誰か話し合っている。
そこで彼らはこう言った。
フランス人「ナポレオンこそ優秀な将軍だ」
ドイツ人「ヒトラーほど素晴らしい指導者はいない」
ロシア人「冬”将軍”だ」
== 道に落ちているりんご ==
ノルウェー人は拾って食べる
アイスランド人はりんごを拾い、綺麗に拭いてあげる
スウェーデン人は気づかないふりをする
フィンランド人は気づかない
デンマーク人はりんごをスウェーデン人に売りつける
日本人はどうするか悩む
中国人はけとばす
== ジャパングリッシュ ==
ある日本人がイタリア人とイギリス人に言った。
日本人「イタリアとイギリスって首都名の頭文字一緒ですよね!”ロ”ンドン、”ロ”ーマ、一緒なんて面白いですね!」
イタリア人「確かに日本語ではそうだけど…」
イギリス人「英語表記では違いますね」
日本人「えっそうなんですか!…あっ!でも国名の頭文字は一緒ですね!!”イ”タリア、”イ”ギリスですもんね!」
イタリア人「えっ、あぁ…」
イギリス人「”日本語表記では”確かに一緒ですね。」
イタリア人・イギリス人『…まさか日本人はRとLを間違えるとは聞いたことがあるけど…IとEも見分けられないのか…』
〜聖書に登場する人類の祖先「アダムとイブ」の正体について、各国の人が議論しています。〜
「アダムとイブは、一体どこの国の人だったのだろうか?」
• フランス人: 「服を着ずに愛し合っていたんだ。絶対にフランス人に違いない!」
• イギリス人: 「いや、1つのリンゴを紳士淑女として分け合って食べたんだ。イギリス人だよ」
• 日本人: 「いやいや、神様の言うルールを頑なに守ろうとしていたから、日本人に決まっている」
そこへ、事情をよく知る旧ソ連圏の人間がやってきて言いました。
「いや、彼らは間違いなく我が国の人間だ。着る服もなく、住む家もなく、食べるものはリンゴ1個しかないのに、自分たちは天国にいると信じ込まされていたんだから」
== 青いキリン ==
ある大富豪は言った。「青いキリンを一番早く連れてきた者に総資産を渡そう」と。
* イギリス人は複数人集まって議論し、青いキリンは居ないという結論についた。
* ドイツ人は図書館などで調べた。
* アメリカ人は世界中を調べまわった。
* 日本人は品種改良の末に青いキリンを作り出せた。
* 中国人は青いペンキを買いに行った。
== ロボコップ ==
日本人のエンジニアが、犯罪者を探して捕縛するロボットを作り上げた。早速日本で稼働させてみたところ、ロボットは1時間で10人のスリ師を捕まえてみせた。
ロボットをアメリカに輸出し稼働させてみたところ、1時間で100人の窃盗犯を捕まえた。
ロボットを中国に輸出し稼働させてみたところ、総書記を捕まえようとしたため、粉々になった。
ロボットをメキシコに輸出してみたところ、このロボットそのものが盗まれた。
i4nh2lvco4sj1krc9qv74dfo559y21b
高等学校日本史探究/新たな世紀の日本へⅡ
0
38286
304903
304901
2026-10-20T11:59:21Z
Kwawe
68789
/* 行政改革と日米安保の変化 */ 重要用語を色太字化と黒太字化。
304903
wikitext
text/x-wiki
[[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>新たな世紀の日本へⅡ
引き続き「新たな世紀の日本へ」の内容を解説します。第2回目では、政界再編から小渕恵三内閣までの国内政治を見ていきます。
== 政界再編と55年体制の終結 ==
※55年体制の崩壊で、国内政治はどのように変わりましたか。
{| style="border:2px solid #80A491;width:100%" cellspacing="0"
! style="background:#80A491" |村山談話
1995年8月15日「戦後五十周年の終戦記念日にあたって」を現代語に翻訳
|-
| style="padding:5px" |
|}
== バブルの崩壊 ==
プラザ合意後、大量のお金が土地購入・株式購入のために使われ、土地の値段・株価[資産価格]が次第に上がりました(資産インフレ)。1989(平成元)年、日本銀行は銀行へお金をあまり貸さなくなり、政府も土地の値段を上げすぎないようにしました(金融引き締め政策)。1990年代に入ってから、土地の値段・株価は下がり始めました。日経平均株価は、1989年12月末に3万8915円まで上がりました。しかし、その後は株式売却が増えて株価もいきなり下がり、1992年8月に1万4309円まで下がりました。土地の値段も1991年頃から下がり始め、1992年以後は日本各地で下がりました。2000年代半ばになると、大阪の一部商業地は一番高い時期の値段から約10分の1まで下がりました。こうして土地や株式の大幅な値上がりは終わり、1980年代後半のバブル経済は終わりました。
★日本の実質経済成長率の推移
[[ファイル:GDP_growth_rate_in_Japan.svg|代替文=日本の実質経済成長率の推移|フレームなし|924x924px]]
日本の景気は1991年から悪くなりました('''平成不況''')。実質経済成長率は1992年に1.3%、1993年に1%未満まで下がりました。1992年を3か月ずつに分けて見ると、4~6月は-3.3%となり、前の3か月より国内経済が小さくなりました。7~9月と10~12月もそれぞれ-0.1%となりました。第1次石油危機後に2期連続の経済縮小時期はあっても、3期連続の経済縮小は戦後初めてでした。僅かな景気回復時期も平成不況の途中にありました。しかしすぐに経済縮小となり、平成不況が長年続きました。
バブル経済当時の国民は金融機関からお金を借りて、株価と地価をより高い価格で買いました。金融機関は不動産会社にもお金を貸しました。バブル崩壊後、株価と地価が大きく下がりました。国民は株と土地を全て売っても借金を返せなくなりました。国民の借金も金融機関へ返ってこなくなりました(不良債権)。金融機関は株と土地を債権として持っており、不良債権から金融機関も大赤字になりました。
金融機関は不良債権処理にずっと追われて、さらに苦しくなりました。その結果、金融機関は不良債権の心配からお金を貸さなくなりました。企業は金融機関からお金を借りにくくなりました。国民も「この金融機関は大丈夫か」と不安を感じるようになり、金融機関はさらに苦しくなりました。その後、企業は新しい商品を作れなくなり、新しい工場を建てられなくなり、新しい機械も買えなくなりました。地価の下落・株価の下落・不良債権の増加・金融機関の経営悪化・金融機関の融資停止が全て重なって景気も次第に悪くなりました('''複合不況''')。
当時の政府と日本銀行はこれまでの不況と同じように、財政支出の拡大・低金利政策から数年で景気も回復するかもと思っていました。この誤対策は複合不況に一切効果ありません。住宅金融専門会社は1995年頃から相次いでつぶれました。1997年、北海道拓殖銀行と山一証券がつぶれました。1998年、日本債券信用銀行と日本長期信用銀行がつぶれました。このように大手金融機関がつぶれると、国民も他の金融機関も危ないのではないかと不安になりました。政府は金融システムまで止まらないように、倒産寸前の大手金融機関などに大量の公的資金を入れました。<gallery mode="nolines" widths="200" heights="200">
ファイル:The Hokkaido Takushoku Bank.JPG|旧北海道拓殖銀行本店
ファイル:Kayabacho Tower, at Shinkawa, Chuo, Tokyo (2019-01-02) 02.jpg|旧山一證券本社
ファイル:日債銀本店.jpg|旧日本債券信用銀行本店
ファイル:Shinsei Bank (head office 1).jpg|旧日本長期信用銀行本店
</gallery>1998年、小渕恵三が内閣総理大臣になりました。小渕恵三内閣も大型予算から景気を回復させしようとしました。小渕内閣が公共投資を増やして国民のお金を回そうとしても複合不況に一切効果ありません。こうして、公債発行残高は増えました。物価は1990年代後半からずっと下がり続けました(デフレスパイラル)。
[[ファイル:Unemployment Rate of Japan 1953-2009.jpg|サムネイル|395x395ピクセル|日本の失業率]]
企業は赤字なので、生き残るために経営の効率化[事業整理・人員削減・雇用調整・海外進出など]を進めました(リストラクチャリング)。中小企業の倒産も増えて、中高年労働者の解雇・中高年労働者の早期退職・新卒採用の削減から企業の人件費を大幅に減らしました。バブル景気の時期は労働者不足から「売り手市場」でも、バブル崩壊後から「買い手市場」へ変わりました。1990年代半ばから2000年代前半、企業は新卒採用を大幅に減らしました(就職氷河期)。1998年の完全失業率は4%を超え、2001年の完全失業率で5%になりました。
失業者が増えると労働者も「自分も仕事を失うかもしれない」と不安になり、個人消費を減らしました。消費者は同じような商品なら出来るだけ安い商品を選ぶようになり、ブランド品・高級品を買ってくれなくなりました。商品が売れなくなると、会社も少量生産・既存工場・既存機械だけで行うようになりました。その結果、会社の利益がさらに減って、人員削減・採用縮小もさらに進みました。株価と地価の下落から不良債権が増えて、金融機関の経営も苦しくなり、企業へお金を貸せなくなりました。
円高も国際分業も進みました。1994年、1ドルが100円を割り込みました。輸出主導・量産指向型産業[自動車・電子・家電・事務機器など]は海外で売れにくくなりました。また、バブル崩壊後の不景気から国内の購入者も減りました。生産費用を少しでも減らすため、労働者の給料が日本より低いアジア諸国[中国など]へ工場を移すようになりました[国内工場の閉鎖・国内工場の海外移転]。その結果、地元企業・周辺店舗の売り上げを減らし、失業者を増やしました(地域'''産業の空洞化''')。
繊維産業の事業所数は減り続けました。2015年の繊維産業の事業所数は1991年と比べて約4分の1になりました。国内衣料品市場のうち海外衣料品購入割合は1991年で52%になり、2017年で97%まで上がりました。多数の多国籍企業が1990年代後半に日本企業を合併したり、買収したりしました。企業が日本型雇用を取り入れていても競争力強化・経営効率化から人員削減・能力給の導入を進めました。その結果、働き方の不安定さが広がりました。
日本は技術面でも負けています。1980年代、日本企業はエレクトロニクス[電子機器]・新素材・バイオテクノロジーなどの技術でアメリカに追いつこうとしていました。1990年代から情報通信技術の活用や生産性の伸びでアメリカ合衆国に負けました。商品は日本国内で売れにくくなり、業務内容も変わっていきました。そのため、日本企業は海外企業に負けないような対策を取りました。
バブル崩壊後、銀行制度・企業制度も変えられました。「日本版金融ビッグバン」を1996年に打ち出して、銀行・証券会社などにも規制を緩めて金融の自由化・国際化を進めました。1997年の独占禁止法改正から禁止の持株会社を再度認めました。企業は持株会社からグループ内の会社をまとめ直したり、経営の進め方を変えたりしやすくなり、その後の企業再編・金融再編にもつながりました。
以前の大規模小売店舗法は店舗面積500平方メートル以上の大規模小売店舗出店条件として出店規模・営業時間・営業日数などを定めていました。しかし、大規模小売店舗は中小小売業者の近くにも自由に出店しており、中小小売業者のお客様まで消えました。そのため、政府は大規模小売店舗の立地場所を1998年から制限しました(大規模小売店舗立地法)。中小小売業者から流れすぎないように守りながら、大規模小売店舗も中小小売業者も商売を続けられるようにしました。2000年、大規模小売店舗法を廃止しました。[[ファイル:Asian Financial Crisis EN-2009-05-05.png|サムネイル|273x273px|アジア通貨危機の影響国]]企業再編・合併は政府の規制緩和から広がり、海外企業と国内企業の協力・合併も増えました。その流れから六大企業集団もまとまりました。金融業界でも銀行などが倒産したり、別の銀行と合併したりしました。その結果、日本の金融業界は三井住友グループ[旧三井系と旧住友系]・三菱UFJ[旧三菱系と三和系]・みずほグループ[旧第一勧銀系と旧富士系]の三大金融グループへまとまりました。
国内長期不況で苦しむ中、アジア諸国の経済は大成長しました。しかし短期海外資金の依存・金融機関の過剰な借入れ・企業の過剰な借入れ・金融制度の弱さ・投機資金の流入などから海外投資家が危機感を示して一斉に海外資金を回収・売却・国外移動を行いました。1997年、タイの通貨バーツの価値が大きく下がりました。海外投資家は東アジア・東南アジアから次々と海外資金を回収・売却・国外移動を行いました(アジア通貨危機)。その結果、東アジア・東南アジア諸国の金融と経済は大きな爪痕を残しました。債務問題は韓国などで大きくなり、国際通貨基金(International Monetary Fund:IMF)の支援を受けました。アジア通貨危機は日本経済と日本の金融機関にも大きな爪痕を残して、不良債権問題をさらに悪化させました。
日本政府はアジア通貨危機の発生から地域的な金融協力制度[アジア通貨基金構想]を出しました。しかし、アメリカ合衆国の反対から日本政府は二国間金融支援と新宮沢構想などに切り替えて、東アジア諸国を金銭面で助けました。
バブル経済崩壊後の平成不況はずっと続きました。景気は2002年初期に少しだけ上向きました。しかし、政府が公共事業中心の従来型景気対策を抑えながら不良債権処理と規制改革を進めました。その結果、企業は引き続き大規模なリストラと雇用調整を行いました。当初、バブル崩壊後の長期停滞は「失われた10年」とよばれました。その後も日本経済の停滞が強く、「失われた20年」「失われた30年」とよばれました。
== 行政改革と日米安保の変化 ==
1990年代後半、大規模災害の対策・重大事件への対策・行政改革・財政改革・金融改革・冷戦後の日米安全保障体制見直し・政党の組み直しを行いました。1995年1月17日、阪神・淡路地域でマグニチュード7.3の<span style="color:#f29100">'''阪神・淡路大震災[兵庫県南部地震]'''</span>が起こりました。神戸市を中心に6400人以上が亡くなり、建造物・高速道路までも大きく壊れました。当地震で大都市は自然災害に弱く、都市政策・耐震化基準・防災体制の見直しをしました。また、国民は被災地に入って、避難民[被災者]の生活を支えたり、被災地の後片付けを手伝ったりしました。この活動からボランティア活動が全国に広がりました。
1995年3月20日、オウム真理教集団は東京都の地下鉄でサリンを撒いて、多数の死傷者を出しました(<span style="color:#f29100">'''地下鉄サリン事件'''</span>)。このように阪神・淡路大震災と地下鉄サリン事件・少年犯罪の殺人事件・児童虐待などが何度も報道機関で取り上げられ、旧価値観的な安全神話も崩れて国民の意識も変わりました。<gallery mode="packed" widths="200" heights="200">
ファイル:Hanshin Expressway Nada b059.jpg|阪神淡路大震災被災後
ファイル:【地下鉄サリン事件】除染を行う自衛隊員と警察官.jpg|地下鉄サリン事件
ファイル:Ryutaro Hashimoto 19960111.jpg|橋本龍太郎
ファイル:Ryuhei Kawada 20240307.jpg|川田龍平
</gallery>1995年9月、自由民主党総裁選挙から<span style="color:#f29100">'''橋本龍太郎'''</span>が選ばれました。1996年1月、村山富市首相退陣後の内閣総理大臣指名選挙で橋本龍太郎が選ばれました。橋本内閣でも自民党・社会民主党・新党さきがけの3党が引き続き協力して、政策を進めました。なお日本社会党は自衛隊・日米安全保障条約の賛成側に回り、1996年に党名を社会民主党へ変えました。
薬害エイズ問題も大きく取り上げられました。橋本龍太郎内閣厚生大臣の菅直人は薬害エイズ被害者[川田龍平など]に謝罪しました。その後、国と製薬会社と被害者が話し合い、和解しました。
1996年、新しい選挙制度で初めて衆議院議員総選挙が行われ、自由民主党の議席を大きく増やしても、過半数を下回りました。社会民主党と新党さきがけは第2次橋本内閣から国務大臣を出さなくなり、閣外協力に変わりました。その結果、自由民主党単独政権に戻りました。
橋本龍太郎内閣は冷戦後の国際変化・国内経済・政府問題を解決するため、行政・財政・金融の各分野を見直しました。行政改革は政府組織を減らしたり、類似の政府組織を1つにまとめたりして、首相などの政策案を出しやすくしました。1998年、中央省庁等改革基本法が導入されて中央省庁等改革関連法から行政改革の方針を決めました。
2001年1月、政府はこの行政改革の方針から中央省庁を1府22省庁から1府12省庁に減らしました。その結果、内閣総理大臣は各省庁へ指示を出して、政府全体の政策を進めやすくしました。2007年、防衛庁を防衛省に上げました。
★省庁再編
{| class="wikitable"
!再編前
!再編後
!再編前
!再編後
|-
|内閣官房
|内閣官房
|大蔵省
|財務省
|-
| rowspan="2" |総理府
金融再生委員会
経済企画庁
沖縄開発庁
| rowspan="2" |内閣府
|科学技術庁
文部省
|文部科学省
|-
|厚生省
労働省
|厚生労働省
|-
|国家公安委員会
|国家公安委員会
|農林水産省
|農林水産省
|-
|防衛庁
|防衛庁(省)
|通商産業省
|経済産業省
|-
|総務庁
郵政省
自治省
|総務省
| rowspan="2" |北海道開発庁
国土庁
建設省
運輸省
| rowspan="2" |国土交通省
|-
|法務省
|法務省
|-
|外務省
|外務省
|環境庁
|環境省
|}
橋本龍太郎内閣は国債の発行額を減らそうとしました。1997年4月、財政構造改革法に従って消費税率を3%から5%に引き上げて公共事業費などを減らしました。国債発行額は1970年代後半から増えても1980年代末で一度減りました。1990年代に入り、公共投資を再拡大させてから大幅な国債発行額増加に向かいました。
しかし、国民は消費税率の引き上げなどから財布の紐もきつくなり、金融機関も生き残れなくなりました。さらにアジア通貨・金融危機も起きて、日本経済は再不況になりました。やがて、銀行同士は金融不安の拡大から合併して1つの銀行になりました。1997年度の実質経済成長率は-0.4%となり、1974年度[第1次石油危機直後]以来のマイナス成長になりました。1998年度の実質経済成長率は-2%まで下がり、平成不況の大きさを改めて物語りました。
[[ファイル:Official Portrait of President William Jefferson Clinton - DPLA - 4697184146b3b6e2d6791b8f3c297476.jpg|サムネイル|221x221ピクセル|ビル・クリントン大統領]]
冷戦後、橋本龍太郎内閣は日米安全保障体制を見直しました。アメリカのビル・クリントン大統領が1996年4月に日本を訪れ、橋本首相と話し合って<span style="color:#f29100">'''日米安全保障共同宣言'''</span>を発表しました。日米安全保障共同宣言から日本とアメリカは日本防衛以外にもアジア太平洋地域の戦争防止・紛争防止まで努めていくようになりました。
自衛隊がアメリカ軍に必要物資を運ぶなどの後方支援についても、日米防衛協力のための指針を見直しました。1997年、日本政府とアメリカ合衆国政府は「新しい日米防衛協力のための指針(新ガイドライン)」を作りました。
日本が外国から直接攻撃されても直接攻撃されていなくても、日本周辺国の戦争などから日本の平和と安全に大きく関わっていたらアメリカ合衆国側も新ガイドラインに従って助け合いました(周辺事態)。ただし日本から何キロ以内というような距離だけだとアメリカ合衆国側は何もしません。
地球温暖化防止京都会議は1997年に開かれ、温室効果ガスの削減目標などを盛り込む京都議定書を採択しました。また、橋本龍太郎内閣は従来のアイヌ民族政策を大きく変えました。
アイヌ民族は1946年2月に北海道アイヌ協会を作り、アイヌ民族の権利を政府に求めました。北海道旧土人保護法からアイヌ民族用の土地[給与地]を貰っても、農地改革で買収されたくありませんでした。しかしアイヌ民族をずっと厳しく人種差別しており、アイヌ民族の一部は北海道から逃げました。その後、北海道アイヌ協会は名前を北海道ウタリ協会に変えました。[[ファイル:UPOPOY 202608.jpg|サムネイル|民族共生象徴空間ウポポイ]]1980年代、世界各地の先住民族が先住民族の権利を政府に求めました。北海道ウタリ協会は政府に北海道旧土人保護法を廃止して新しい法律を作ってほしいと求めました。1997年、国会はアイヌ民族文化をずっと守っていくためにアイヌ文化振興法を作り、北海道旧土人保護法を廃止しました。
その後もアイヌ民族政策は変わりました。2008年、国会はアイヌ民族を日本の先住民族と認めて、内閣へアイヌ民族の権利・生活・文化なども認めてほしいとお願いしました。民族団体の名前も北海道ウタリ協会から北海道アイヌ協会に戻しました。
2019(令和元)年、政府はアイヌ施策推進法で日本の「先住民族」にアイヌ民族を初めて入れました。アイヌ施策推進法から北海道アイヌ協会側も話し合いに参加して、アイヌ民族向けの新しい政策を行っています。2020年、北海道白老町に民族共生象徴空間ウポポイが開かれました。アイヌ語講座・アイヌ文化活動・アイヌ語活動が日本各地で開かれてもいます。
[[ファイル:Keizo Obuchi 19980730.jpg|サムネイル|168x168ピクセル|小渕恵三]]
1998年7月の参議院議員選挙で自由民主党議席数は大きく減らし、この結果から橋本龍太郎も内閣総理大臣を辞めました。これを受けて、<span style="color:#f29100">'''小渕恵三'''</span>が内閣総理大臣に選ばれました。小渕恵三内閣はバブル崩壊に消費税増税・金融不安・アジア通貨危機なども重なり、橋本龍太郎の財政再建路線を修正しました。小渕恵三内閣は土木工事・公共施設建築工事の大型予算を組んでその潤いから複合不況まで立て直そうとしました。その結果、政府は赤字国債発行額を再び大幅に増やしました。
1999年、小渕恵三内閣は国会法案の賛成を増やしたいから自由党〔1月〕・公明党〔10月〕も自由民主党と一緒に内閣を支えていました[自自公連立政権の開始]。その結果、自由民主党・自由党・公明党は衆議院・参議院の両方で過半数の議席を持つようになりました。小渕恵三内閣から自由民主党と公明党は2025年10月まで一緒に内閣を支えました。
1999年、小渕恵三内閣は'''新ガイドライン関連法'''をまとめました。新ガイドライン関連法の<span style="color:#f29100">'''周辺事態安全確保法'''</span>は日本周辺国家の暴走で自国の平和と安全まで守れなくなったら、自衛隊を出してアメリカ軍へ必要物資を送りました。
[[ファイル:G8 2000 group photo (kremlin.ru).jpg|サムネイル|233x233ピクセル|第26回主要国首脳会議]]
1999年、小渕恵三内閣は日の丸と君が代を国旗・国歌法へ初めて記しました。また、国民は情報公開法に従って官公庁へ資料を見せてほしいとお願いしやすくなりました。国会は憲法調査会で憲法を変えるかどうか話し合いました。小渕恵三内閣は2000年に九州・沖縄で第26回主要国首脳会議[サミット]開くと決めました。
== 資料出所 ==
* 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年
* 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年
* 高埜利彦、高村直助ほか編著『日本史A 改訂版』株式会社山川出版社 2016年
* 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年
* 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年
* 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年
* 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年
* 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年
* 河合敦著『世界一わかりやすい河合敦の日本史B[近・現代]の特別講座』株式会社KADOKAWA 2014年(絶版本)
* 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年
* 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年
[[カテゴリ:高等学校日本史探究|あらたなせいきのにほんへ]]
[[カテゴリ:20世紀]]
8na9fwl7bi8czz4tk0tsc7tcp2cn9s3
304906
304903
2026-10-20T12:54:29Z
Kwawe
68789
/* 行政改革と日米安保の変化 */ この時期は野党も大きく変わり、新進党は議員の大量離脱から1997年末になくなった。
304906
wikitext
text/x-wiki
[[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>新たな世紀の日本へⅡ
引き続き「新たな世紀の日本へ」の内容を解説します。第2回目では、政界再編から小渕恵三内閣までの国内政治を見ていきます。
== 政界再編と55年体制の終結 ==
※55年体制の崩壊で、国内政治はどのように変わりましたか。
{| style="border:2px solid #80A491;width:100%" cellspacing="0"
! style="background:#80A491" |村山談話
1995年8月15日「戦後五十周年の終戦記念日にあたって」を現代語に翻訳
|-
| style="padding:5px" |
|}
== バブルの崩壊 ==
プラザ合意後、大量のお金が土地購入・株式購入のために使われ、土地の値段・株価[資産価格]が次第に上がりました(資産インフレ)。1989(平成元)年、日本銀行は銀行へお金をあまり貸さなくなり、政府も土地の値段を上げすぎないようにしました(金融引き締め政策)。1990年代に入ってから、土地の値段・株価は下がり始めました。日経平均株価は、1989年12月末に3万8915円まで上がりました。しかし、その後は株式売却が増えて株価もいきなり下がり、1992年8月に1万4309円まで下がりました。土地の値段も1991年頃から下がり始め、1992年以後は日本各地で下がりました。2000年代半ばになると、大阪の一部商業地は一番高い時期の値段から約10分の1まで下がりました。こうして土地や株式の大幅な値上がりは終わり、1980年代後半のバブル経済は終わりました。
★日本の実質経済成長率の推移
[[ファイル:GDP_growth_rate_in_Japan.svg|代替文=日本の実質経済成長率の推移|フレームなし|924x924px]]
日本の景気は1991年から悪くなりました('''平成不況''')。実質経済成長率は1992年に1.3%、1993年に1%未満まで下がりました。1992年を3か月ずつに分けて見ると、4~6月は-3.3%となり、前の3か月より国内経済が小さくなりました。7~9月と10~12月もそれぞれ-0.1%となりました。第1次石油危機後に2期連続の経済縮小時期はあっても、3期連続の経済縮小は戦後初めてでした。僅かな景気回復時期も平成不況の途中にありました。しかしすぐに経済縮小となり、平成不況が長年続きました。
バブル経済当時の国民は金融機関からお金を借りて、株価と地価をより高い価格で買いました。金融機関は不動産会社にもお金を貸しました。バブル崩壊後、株価と地価が大きく下がりました。国民は株と土地を全て売っても借金を返せなくなりました。国民の借金も金融機関へ返ってこなくなりました(不良債権)。金融機関は株と土地を債権として持っており、不良債権から金融機関も大赤字になりました。
金融機関は不良債権処理にずっと追われて、さらに苦しくなりました。その結果、金融機関は不良債権の心配からお金を貸さなくなりました。企業は金融機関からお金を借りにくくなりました。国民も「この金融機関は大丈夫か」と不安を感じるようになり、金融機関はさらに苦しくなりました。その後、企業は新しい商品を作れなくなり、新しい工場を建てられなくなり、新しい機械も買えなくなりました。地価の下落・株価の下落・不良債権の増加・金融機関の経営悪化・金融機関の融資停止が全て重なって景気も次第に悪くなりました('''複合不況''')。
当時の政府と日本銀行はこれまでの不況と同じように、財政支出の拡大・低金利政策から数年で景気も回復するかもと思っていました。この誤対策は複合不況に一切効果ありません。住宅金融専門会社は1995年頃から相次いでつぶれました。1997年、北海道拓殖銀行と山一証券がつぶれました。1998年、日本債券信用銀行と日本長期信用銀行がつぶれました。このように大手金融機関がつぶれると、国民も他の金融機関も危ないのではないかと不安になりました。政府は金融システムまで止まらないように、倒産寸前の大手金融機関などに大量の公的資金を入れました。<gallery mode="nolines" widths="200" heights="200">
ファイル:The Hokkaido Takushoku Bank.JPG|旧北海道拓殖銀行本店
ファイル:Kayabacho Tower, at Shinkawa, Chuo, Tokyo (2019-01-02) 02.jpg|旧山一證券本社
ファイル:日債銀本店.jpg|旧日本債券信用銀行本店
ファイル:Shinsei Bank (head office 1).jpg|旧日本長期信用銀行本店
</gallery>1998年、小渕恵三が内閣総理大臣になりました。小渕恵三内閣も大型予算から景気を回復させしようとしました。小渕内閣が公共投資を増やして国民のお金を回そうとしても複合不況に一切効果ありません。こうして、公債発行残高は増えました。物価は1990年代後半からずっと下がり続けました(デフレスパイラル)。
[[ファイル:Unemployment Rate of Japan 1953-2009.jpg|サムネイル|395x395ピクセル|日本の失業率]]
企業は赤字なので、生き残るために経営の効率化[事業整理・人員削減・雇用調整・海外進出など]を進めました(リストラクチャリング)。中小企業の倒産も増えて、中高年労働者の解雇・中高年労働者の早期退職・新卒採用の削減から企業の人件費を大幅に減らしました。バブル景気の時期は労働者不足から「売り手市場」でも、バブル崩壊後から「買い手市場」へ変わりました。1990年代半ばから2000年代前半、企業は新卒採用を大幅に減らしました(就職氷河期)。1998年の完全失業率は4%を超え、2001年の完全失業率で5%になりました。
失業者が増えると労働者も「自分も仕事を失うかもしれない」と不安になり、個人消費を減らしました。消費者は同じような商品なら出来るだけ安い商品を選ぶようになり、ブランド品・高級品を買ってくれなくなりました。商品が売れなくなると、会社も少量生産・既存工場・既存機械だけで行うようになりました。その結果、会社の利益がさらに減って、人員削減・採用縮小もさらに進みました。株価と地価の下落から不良債権が増えて、金融機関の経営も苦しくなり、企業へお金を貸せなくなりました。
円高も国際分業も進みました。1994年、1ドルが100円を割り込みました。輸出主導・量産指向型産業[自動車・電子・家電・事務機器など]は海外で売れにくくなりました。また、バブル崩壊後の不景気から国内の購入者も減りました。生産費用を少しでも減らすため、労働者の給料が日本より低いアジア諸国[中国など]へ工場を移すようになりました[国内工場の閉鎖・国内工場の海外移転]。その結果、地元企業・周辺店舗の売り上げを減らし、失業者を増やしました(地域'''産業の空洞化''')。
繊維産業の事業所数は減り続けました。2015年の繊維産業の事業所数は1991年と比べて約4分の1になりました。国内衣料品市場のうち海外衣料品購入割合は1991年で52%になり、2017年で97%まで上がりました。多数の多国籍企業が1990年代後半に日本企業を合併したり、買収したりしました。企業が日本型雇用を取り入れていても競争力強化・経営効率化から人員削減・能力給の導入を進めました。その結果、働き方の不安定さが広がりました。
日本は技術面でも負けています。1980年代、日本企業はエレクトロニクス[電子機器]・新素材・バイオテクノロジーなどの技術でアメリカに追いつこうとしていました。1990年代から情報通信技術の活用や生産性の伸びでアメリカ合衆国に負けました。商品は日本国内で売れにくくなり、業務内容も変わっていきました。そのため、日本企業は海外企業に負けないような対策を取りました。
バブル崩壊後、銀行制度・企業制度も変えられました。「日本版金融ビッグバン」を1996年に打ち出して、銀行・証券会社などにも規制を緩めて金融の自由化・国際化を進めました。1997年の独占禁止法改正から禁止の持株会社を再度認めました。企業は持株会社からグループ内の会社をまとめ直したり、経営の進め方を変えたりしやすくなり、その後の企業再編・金融再編にもつながりました。
以前の大規模小売店舗法は店舗面積500平方メートル以上の大規模小売店舗出店条件として出店規模・営業時間・営業日数などを定めていました。しかし、大規模小売店舗は中小小売業者の近くにも自由に出店しており、中小小売業者のお客様まで消えました。そのため、政府は大規模小売店舗の立地場所を1998年から制限しました(大規模小売店舗立地法)。中小小売業者から流れすぎないように守りながら、大規模小売店舗も中小小売業者も商売を続けられるようにしました。2000年、大規模小売店舗法を廃止しました。[[ファイル:Asian Financial Crisis EN-2009-05-05.png|サムネイル|273x273px|アジア通貨危機の影響国]]企業再編・合併は政府の規制緩和から広がり、海外企業と国内企業の協力・合併も増えました。その流れから六大企業集団もまとまりました。金融業界でも銀行などが倒産したり、別の銀行と合併したりしました。その結果、日本の金融業界は三井住友グループ[旧三井系と旧住友系]・三菱UFJ[旧三菱系と三和系]・みずほグループ[旧第一勧銀系と旧富士系]の三大金融グループへまとまりました。
国内長期不況で苦しむ中、アジア諸国の経済は大成長しました。しかし短期海外資金の依存・金融機関の過剰な借入れ・企業の過剰な借入れ・金融制度の弱さ・投機資金の流入などから海外投資家が危機感を示して一斉に海外資金を回収・売却・国外移動を行いました。1997年、タイの通貨バーツの価値が大きく下がりました。海外投資家は東アジア・東南アジアから次々と海外資金を回収・売却・国外移動を行いました(アジア通貨危機)。その結果、東アジア・東南アジア諸国の金融と経済は大きな爪痕を残しました。債務問題は韓国などで大きくなり、国際通貨基金(International Monetary Fund:IMF)の支援を受けました。アジア通貨危機は日本経済と日本の金融機関にも大きな爪痕を残して、不良債権問題をさらに悪化させました。
日本政府はアジア通貨危機の発生から地域的な金融協力制度[アジア通貨基金構想]を出しました。しかし、アメリカ合衆国の反対から日本政府は二国間金融支援と新宮沢構想などに切り替えて、東アジア諸国を金銭面で助けました。
バブル経済崩壊後の平成不況はずっと続きました。景気は2002年初期に少しだけ上向きました。しかし、政府が公共事業中心の従来型景気対策を抑えながら不良債権処理と規制改革を進めました。その結果、企業は引き続き大規模なリストラと雇用調整を行いました。当初、バブル崩壊後の長期停滞は「失われた10年」とよばれました。その後も日本経済の停滞が強く、「失われた20年」「失われた30年」とよばれました。
== 行政改革と日米安保の変化 ==
1990年代後半、大規模災害の対策・重大事件への対策・行政改革・財政改革・金融改革・冷戦後の日米安全保障体制見直し・政党の組み直しを行いました。1995年1月17日、阪神・淡路地域でマグニチュード7.3の<span style="color:#f29100">'''阪神・淡路大震災[兵庫県南部地震]'''</span>が起こりました。神戸市を中心に6400人以上が亡くなり、建造物・高速道路までも大きく壊れました。当地震で大都市は自然災害に弱く、都市政策・耐震化基準・防災体制の見直しをしました。また、国民は被災地に入って、避難民[被災者]の生活を支えたり、被災地の後片付けを手伝ったりしました。この活動からボランティア活動が全国に広がりました。
1995年3月20日、オウム真理教集団は東京都の地下鉄でサリンを撒いて、多数の死傷者を出しました(<span style="color:#f29100">'''地下鉄サリン事件'''</span>)。このように阪神・淡路大震災と地下鉄サリン事件・少年犯罪の殺人事件・児童虐待などが何度も報道機関で取り上げられ、旧価値観的な安全神話も崩れて国民の意識も変わりました。<gallery mode="packed" widths="200" heights="200">
ファイル:Hanshin Expressway Nada b059.jpg|阪神淡路大震災被災後
ファイル:【地下鉄サリン事件】除染を行う自衛隊員と警察官.jpg|地下鉄サリン事件
ファイル:Ryutaro Hashimoto 19960111.jpg|橋本龍太郎
ファイル:Ryuhei Kawada 20240307.jpg|川田龍平
</gallery>1995年9月、自由民主党総裁選挙から<span style="color:#f29100">'''橋本龍太郎'''</span>が選ばれました。1996年1月、村山富市首相退陣後の内閣総理大臣指名選挙で橋本龍太郎が選ばれました。橋本内閣でも自民党・社会民主党・新党さきがけの3党が引き続き協力して、政策を進めました。なお日本社会党は自衛隊・日米安全保障条約の賛成側に回り、1996年に党名を社会民主党へ変えました。
薬害エイズ問題も大きく取り上げられました。橋本龍太郎内閣厚生大臣の菅直人は薬害エイズ被害者[川田龍平など]に謝罪しました。その後、国と製薬会社と被害者が話し合い、和解しました。
1996年、新しい選挙制度で初めて衆議院議員総選挙が行われ、自由民主党の議席を大きく増やしても、過半数を下回りました。社会民主党と新党さきがけは第2次橋本内閣から国務大臣を出さなくなり、閣外協力に変わりました。その結果、自由民主党単独政権に戻りました。
橋本龍太郎内閣は冷戦後の国際変化・国内経済・政府問題を解決するため、行政・財政・金融の各分野を見直しました。行政改革は政府組織を減らしたり、類似の政府組織を1つにまとめたりして、首相などの政策案を出しやすくしました。1998年、中央省庁等改革基本法が導入されて中央省庁等改革関連法から行政改革の方針を決めました。
2001年1月、政府はこの行政改革の方針から中央省庁を1府22省庁から1府12省庁に減らしました。その結果、内閣総理大臣は各省庁へ指示を出して、政府全体の政策を進めやすくしました。2007年、防衛庁を防衛省に上げました。
★省庁再編
{| class="wikitable"
!再編前
!再編後
!再編前
!再編後
|-
|内閣官房
|内閣官房
|大蔵省
|財務省
|-
| rowspan="2" |総理府
金融再生委員会
経済企画庁
沖縄開発庁
| rowspan="2" |内閣府
|科学技術庁
文部省
|文部科学省
|-
|厚生省
労働省
|厚生労働省
|-
|国家公安委員会
|国家公安委員会
|農林水産省
|農林水産省
|-
|防衛庁
|防衛庁(省)
|通商産業省
|経済産業省
|-
|総務庁
郵政省
自治省
|総務省
| rowspan="2" |北海道開発庁
国土庁
建設省
運輸省
| rowspan="2" |国土交通省
|-
|法務省
|法務省
|-
|外務省
|外務省
|環境庁
|環境省
|}
橋本龍太郎内閣は国債の発行額を減らそうとしました。1997年4月、財政構造改革法に従って消費税率を3%から5%に引き上げて公共事業費などを減らしました。国債発行額は1970年代後半から増えても1980年代末で一度減りました。1990年代に入り、公共投資を再拡大させてから大幅な国債発行額増加に向かいました。
しかし、国民は消費税率の引き上げなどから財布の紐もきつくなり、金融機関も生き残れなくなりました。さらにアジア通貨・金融危機も起きて、日本経済は再不況になりました。やがて、銀行同士は金融不安の拡大から合併して1つの銀行になりました。1997年度の実質経済成長率は-0.4%となり、1974年度[第1次石油危機直後]以来のマイナス成長になりました。1998年度の実質経済成長率は-2%まで下がり、平成不況の大きさを改めて物語りました。
[[ファイル:Official Portrait of President William Jefferson Clinton - DPLA - 4697184146b3b6e2d6791b8f3c297476.jpg|サムネイル|221x221ピクセル|ビル・クリントン大統領]]
冷戦後、橋本龍太郎内閣は日米安全保障体制を見直しました。アメリカのビル・クリントン大統領が1996年4月に日本を訪れ、橋本首相と話し合って<span style="color:#f29100">'''日米安全保障共同宣言'''</span>を発表しました。日米安全保障共同宣言から日本とアメリカは日本防衛以外にもアジア太平洋地域の戦争防止・紛争防止まで努めていくようになりました。
自衛隊がアメリカ軍に必要物資を運ぶなどの後方支援についても、日米防衛協力のための指針を見直しました。1997年、日本政府とアメリカ合衆国政府は「新しい日米防衛協力のための指針(新ガイドライン)」を作りました。
日本が外国から直接攻撃されても直接攻撃されていなくても、日本周辺国の戦争などから日本の平和と安全に大きく関わっていたらアメリカ合衆国側も新ガイドラインに従って助け合いました(周辺事態)。ただし日本から何キロ以内というような距離だけだとアメリカ合衆国側は何もしません。
地球温暖化防止京都会議は1997年に開かれ、温室効果ガスの削減目標などを盛り込む京都議定書を採択しました。また、橋本龍太郎内閣は従来のアイヌ民族政策を大きく変えました。
アイヌ民族は1946年2月に北海道アイヌ協会を作り、アイヌ民族の権利を政府に求めました。北海道旧土人保護法からアイヌ民族用の土地[給与地]を貰っても、農地改革で買収されたくありませんでした。しかしアイヌ民族をずっと厳しく人種差別しており、アイヌ民族の一部は北海道から逃げました。その後、北海道アイヌ協会は名前を北海道ウタリ協会に変えました。[[ファイル:UPOPOY 202608.jpg|サムネイル|民族共生象徴空間ウポポイ]]1980年代、世界各地の先住民族が先住民族の権利を政府に求めました。北海道ウタリ協会は政府に北海道旧土人保護法を廃止して新しい法律を作ってほしいと求めました。1997年、国会はアイヌ民族文化をずっと守っていくためにアイヌ文化振興法を作り、北海道旧土人保護法を廃止しました。
その後もアイヌ民族政策は変わりました。2008年、国会はアイヌ民族を日本の先住民族と認めて、内閣へアイヌ民族の権利・生活・文化なども認めてほしいとお願いしました。民族団体の名前も北海道ウタリ協会から北海道アイヌ協会に戻しました。
2019(令和元)年、政府はアイヌ施策推進法で日本の「先住民族」にアイヌ民族を初めて入れました。アイヌ施策推進法から北海道アイヌ協会側も話し合いに参加して、アイヌ民族向けの新しい政策を行っています。2020年、北海道白老町に民族共生象徴空間ウポポイが開かれました。アイヌ語講座・アイヌ文化活動・アイヌ語活動が日本各地で開かれてもいます。
[[ファイル:Keizo Obuchi 19980730.jpg|サムネイル|168x168ピクセル|小渕恵三]]
1998年7月の参議院議員選挙で自由民主党議席数は大きく減らし、この結果から橋本龍太郎も内閣総理大臣を辞めました。これを受けて、<span style="color:#f29100">'''小渕恵三'''</span>が内閣総理大臣に選ばれました。小渕恵三内閣はバブル崩壊に消費税増税・金融不安・アジア通貨危機なども重なり、橋本龍太郎の財政再建路線を修正しました。小渕恵三内閣は土木工事・公共施設建築工事の大型予算を組んでその潤いから複合不況まで立て直そうとしました。その結果、政府は赤字国債発行額を再び大幅に増やしました。
1999年、小渕恵三内閣は国会法案の賛成を増やしたいから自由党〔1月〕・公明党〔10月〕も自由民主党と一緒に内閣を支えていました[自自公連立政権の開始]。その結果、自由民主党・自由党・公明党は衆議院・参議院の両方で過半数の議席を持つようになりました。小渕恵三内閣から自由民主党と公明党は2025年10月まで一緒に内閣を支えました。
1999年、小渕恵三内閣は'''新ガイドライン関連法'''をまとめました。新ガイドライン関連法の<span style="color:#f29100">'''周辺事態安全確保法'''</span>は日本周辺国家の暴走で自国の平和と安全まで守れなくなったら、自衛隊を出してアメリカ軍へ必要物資を送りました。
[[ファイル:G8 2000 group photo (kremlin.ru).jpg|サムネイル|233x233ピクセル|第26回主要国首脳会議]]
1999年、小渕恵三内閣は日の丸と君が代を国旗・国歌法へ初めて記しました。また、国民は情報公開法に従って官公庁へ資料を見せてほしいとお願いしやすくなりました。国会は憲法調査会で憲法を変えるかどうか話し合いました。小渕恵三内閣は2000年に九州・沖縄で第26回主要国首脳会議[サミット]開くと決めました。
この時期は野党も大きく変わりました。社会民主党の支持者は少しずつ減りました。新進党は議員の大量離脱から1997年末になくなりました。旧新進党の議員は違う政党[自由党・新党平和・民主党]に入りました。1996年、鳩山由紀夫・菅直人が民主党を結成しました。その後、旧新進党議員も民主党へ入りました。さらに、新党平和・黎明クラブを公明党に戻しました。
== 資料出所 ==
* 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年
* 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年
* 高埜利彦、高村直助ほか編著『日本史A 改訂版』株式会社山川出版社 2016年
* 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年
* 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年
* 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年
* 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年
* 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年
* 河合敦著『世界一わかりやすい河合敦の日本史B[近・現代]の特別講座』株式会社KADOKAWA 2014年(絶版本)
* 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年
* 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年
[[カテゴリ:高等学校日本史探究|あらたなせいきのにほんへ]]
[[カテゴリ:20世紀]]
jken5xuln3oq9dim73h9x5lzpwbq4ui
304907
304906
2026-10-20T13:09:14Z
Kwawe
68789
/* 行政改革と日米安保の変化 */ 55年体制が終わっても、自由民主党と民主党の保守二大政党制へ繋がらなかった。
304907
wikitext
text/x-wiki
[[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>新たな世紀の日本へⅡ
引き続き「新たな世紀の日本へ」の内容を解説します。第2回目では、政界再編から小渕恵三内閣までの国内政治を見ていきます。
== 政界再編と55年体制の終結 ==
※55年体制の崩壊で、国内政治はどのように変わりましたか。
{| style="border:2px solid #80A491;width:100%" cellspacing="0"
! style="background:#80A491" |村山談話
1995年8月15日「戦後五十周年の終戦記念日にあたって」を現代語に翻訳
|-
| style="padding:5px" |
|}
== バブルの崩壊 ==
プラザ合意後、大量のお金が土地購入・株式購入のために使われ、土地の値段・株価[資産価格]が次第に上がりました(資産インフレ)。1989(平成元)年、日本銀行は銀行へお金をあまり貸さなくなり、政府も土地の値段を上げすぎないようにしました(金融引き締め政策)。1990年代に入ってから、土地の値段・株価は下がり始めました。日経平均株価は、1989年12月末に3万8915円まで上がりました。しかし、その後は株式売却が増えて株価もいきなり下がり、1992年8月に1万4309円まで下がりました。土地の値段も1991年頃から下がり始め、1992年以後は日本各地で下がりました。2000年代半ばになると、大阪の一部商業地は一番高い時期の値段から約10分の1まで下がりました。こうして土地や株式の大幅な値上がりは終わり、1980年代後半のバブル経済は終わりました。
★日本の実質経済成長率の推移
[[ファイル:GDP_growth_rate_in_Japan.svg|代替文=日本の実質経済成長率の推移|フレームなし|924x924px]]
日本の景気は1991年から悪くなりました('''平成不況''')。実質経済成長率は1992年に1.3%、1993年に1%未満まで下がりました。1992年を3か月ずつに分けて見ると、4~6月は-3.3%となり、前の3か月より国内経済が小さくなりました。7~9月と10~12月もそれぞれ-0.1%となりました。第1次石油危機後に2期連続の経済縮小時期はあっても、3期連続の経済縮小は戦後初めてでした。僅かな景気回復時期も平成不況の途中にありました。しかしすぐに経済縮小となり、平成不況が長年続きました。
バブル経済当時の国民は金融機関からお金を借りて、株価と地価をより高い価格で買いました。金融機関は不動産会社にもお金を貸しました。バブル崩壊後、株価と地価が大きく下がりました。国民は株と土地を全て売っても借金を返せなくなりました。国民の借金も金融機関へ返ってこなくなりました(不良債権)。金融機関は株と土地を債権として持っており、不良債権から金融機関も大赤字になりました。
金融機関は不良債権処理にずっと追われて、さらに苦しくなりました。その結果、金融機関は不良債権の心配からお金を貸さなくなりました。企業は金融機関からお金を借りにくくなりました。国民も「この金融機関は大丈夫か」と不安を感じるようになり、金融機関はさらに苦しくなりました。その後、企業は新しい商品を作れなくなり、新しい工場を建てられなくなり、新しい機械も買えなくなりました。地価の下落・株価の下落・不良債権の増加・金融機関の経営悪化・金融機関の融資停止が全て重なって景気も次第に悪くなりました('''複合不況''')。
当時の政府と日本銀行はこれまでの不況と同じように、財政支出の拡大・低金利政策から数年で景気も回復するかもと思っていました。この誤対策は複合不況に一切効果ありません。住宅金融専門会社は1995年頃から相次いでつぶれました。1997年、北海道拓殖銀行と山一証券がつぶれました。1998年、日本債券信用銀行と日本長期信用銀行がつぶれました。このように大手金融機関がつぶれると、国民も他の金融機関も危ないのではないかと不安になりました。政府は金融システムまで止まらないように、倒産寸前の大手金融機関などに大量の公的資金を入れました。<gallery mode="nolines" widths="200" heights="200">
ファイル:The Hokkaido Takushoku Bank.JPG|旧北海道拓殖銀行本店
ファイル:Kayabacho Tower, at Shinkawa, Chuo, Tokyo (2019-01-02) 02.jpg|旧山一證券本社
ファイル:日債銀本店.jpg|旧日本債券信用銀行本店
ファイル:Shinsei Bank (head office 1).jpg|旧日本長期信用銀行本店
</gallery>1998年、小渕恵三が内閣総理大臣になりました。小渕恵三内閣も大型予算から景気を回復させしようとしました。小渕内閣が公共投資を増やして国民のお金を回そうとしても複合不況に一切効果ありません。こうして、公債発行残高は増えました。物価は1990年代後半からずっと下がり続けました(デフレスパイラル)。
[[ファイル:Unemployment Rate of Japan 1953-2009.jpg|サムネイル|395x395ピクセル|日本の失業率]]
企業は赤字なので、生き残るために経営の効率化[事業整理・人員削減・雇用調整・海外進出など]を進めました(リストラクチャリング)。中小企業の倒産も増えて、中高年労働者の解雇・中高年労働者の早期退職・新卒採用の削減から企業の人件費を大幅に減らしました。バブル景気の時期は労働者不足から「売り手市場」でも、バブル崩壊後から「買い手市場」へ変わりました。1990年代半ばから2000年代前半、企業は新卒採用を大幅に減らしました(就職氷河期)。1998年の完全失業率は4%を超え、2001年の完全失業率で5%になりました。
失業者が増えると労働者も「自分も仕事を失うかもしれない」と不安になり、個人消費を減らしました。消費者は同じような商品なら出来るだけ安い商品を選ぶようになり、ブランド品・高級品を買ってくれなくなりました。商品が売れなくなると、会社も少量生産・既存工場・既存機械だけで行うようになりました。その結果、会社の利益がさらに減って、人員削減・採用縮小もさらに進みました。株価と地価の下落から不良債権が増えて、金融機関の経営も苦しくなり、企業へお金を貸せなくなりました。
円高も国際分業も進みました。1994年、1ドルが100円を割り込みました。輸出主導・量産指向型産業[自動車・電子・家電・事務機器など]は海外で売れにくくなりました。また、バブル崩壊後の不景気から国内の購入者も減りました。生産費用を少しでも減らすため、労働者の給料が日本より低いアジア諸国[中国など]へ工場を移すようになりました[国内工場の閉鎖・国内工場の海外移転]。その結果、地元企業・周辺店舗の売り上げを減らし、失業者を増やしました(地域'''産業の空洞化''')。
繊維産業の事業所数は減り続けました。2015年の繊維産業の事業所数は1991年と比べて約4分の1になりました。国内衣料品市場のうち海外衣料品購入割合は1991年で52%になり、2017年で97%まで上がりました。多数の多国籍企業が1990年代後半に日本企業を合併したり、買収したりしました。企業が日本型雇用を取り入れていても競争力強化・経営効率化から人員削減・能力給の導入を進めました。その結果、働き方の不安定さが広がりました。
日本は技術面でも負けています。1980年代、日本企業はエレクトロニクス[電子機器]・新素材・バイオテクノロジーなどの技術でアメリカに追いつこうとしていました。1990年代から情報通信技術の活用や生産性の伸びでアメリカ合衆国に負けました。商品は日本国内で売れにくくなり、業務内容も変わっていきました。そのため、日本企業は海外企業に負けないような対策を取りました。
バブル崩壊後、銀行制度・企業制度も変えられました。「日本版金融ビッグバン」を1996年に打ち出して、銀行・証券会社などにも規制を緩めて金融の自由化・国際化を進めました。1997年の独占禁止法改正から禁止の持株会社を再度認めました。企業は持株会社からグループ内の会社をまとめ直したり、経営の進め方を変えたりしやすくなり、その後の企業再編・金融再編にもつながりました。
以前の大規模小売店舗法は店舗面積500平方メートル以上の大規模小売店舗出店条件として出店規模・営業時間・営業日数などを定めていました。しかし、大規模小売店舗は中小小売業者の近くにも自由に出店しており、中小小売業者のお客様まで消えました。そのため、政府は大規模小売店舗の立地場所を1998年から制限しました(大規模小売店舗立地法)。中小小売業者から流れすぎないように守りながら、大規模小売店舗も中小小売業者も商売を続けられるようにしました。2000年、大規模小売店舗法を廃止しました。[[ファイル:Asian Financial Crisis EN-2009-05-05.png|サムネイル|273x273px|アジア通貨危機の影響国]]企業再編・合併は政府の規制緩和から広がり、海外企業と国内企業の協力・合併も増えました。その流れから六大企業集団もまとまりました。金融業界でも銀行などが倒産したり、別の銀行と合併したりしました。その結果、日本の金融業界は三井住友グループ[旧三井系と旧住友系]・三菱UFJ[旧三菱系と三和系]・みずほグループ[旧第一勧銀系と旧富士系]の三大金融グループへまとまりました。
国内長期不況で苦しむ中、アジア諸国の経済は大成長しました。しかし短期海外資金の依存・金融機関の過剰な借入れ・企業の過剰な借入れ・金融制度の弱さ・投機資金の流入などから海外投資家が危機感を示して一斉に海外資金を回収・売却・国外移動を行いました。1997年、タイの通貨バーツの価値が大きく下がりました。海外投資家は東アジア・東南アジアから次々と海外資金を回収・売却・国外移動を行いました(アジア通貨危機)。その結果、東アジア・東南アジア諸国の金融と経済は大きな爪痕を残しました。債務問題は韓国などで大きくなり、国際通貨基金(International Monetary Fund:IMF)の支援を受けました。アジア通貨危機は日本経済と日本の金融機関にも大きな爪痕を残して、不良債権問題をさらに悪化させました。
日本政府はアジア通貨危機の発生から地域的な金融協力制度[アジア通貨基金構想]を出しました。しかし、アメリカ合衆国の反対から日本政府は二国間金融支援と新宮沢構想などに切り替えて、東アジア諸国を金銭面で助けました。
バブル経済崩壊後の平成不況はずっと続きました。景気は2002年初期に少しだけ上向きました。しかし、政府が公共事業中心の従来型景気対策を抑えながら不良債権処理と規制改革を進めました。その結果、企業は引き続き大規模なリストラと雇用調整を行いました。当初、バブル崩壊後の長期停滞は「失われた10年」とよばれました。その後も日本経済の停滞が強く、「失われた20年」「失われた30年」とよばれました。
== 行政改革と日米安保の変化 ==
1990年代後半、大規模災害の対策・重大事件への対策・行政改革・財政改革・金融改革・冷戦後の日米安全保障体制見直し・政党の組み直しを行いました。1995年1月17日、阪神・淡路地域でマグニチュード7.3の<span style="color:#f29100">'''阪神・淡路大震災[兵庫県南部地震]'''</span>が起こりました。神戸市を中心に6400人以上が亡くなり、建造物・高速道路までも大きく壊れました。当地震で大都市は自然災害に弱く、都市政策・耐震化基準・防災体制の見直しをしました。また、国民は被災地に入って、避難民[被災者]の生活を支えたり、被災地の後片付けを手伝ったりしました。この活動からボランティア活動が全国に広がりました。
1995年3月20日、オウム真理教集団は東京都の地下鉄でサリンを撒いて、多数の死傷者を出しました(<span style="color:#f29100">'''地下鉄サリン事件'''</span>)。このように阪神・淡路大震災と地下鉄サリン事件・少年犯罪の殺人事件・児童虐待などが何度も報道機関で取り上げられ、旧価値観的な安全神話も崩れて国民の意識も変わりました。<gallery mode="packed" widths="200" heights="200">
ファイル:Hanshin Expressway Nada b059.jpg|阪神淡路大震災被災後
ファイル:【地下鉄サリン事件】除染を行う自衛隊員と警察官.jpg|地下鉄サリン事件
ファイル:Ryutaro Hashimoto 19960111.jpg|橋本龍太郎
ファイル:Ryuhei Kawada 20240307.jpg|川田龍平
</gallery>1995年9月、自由民主党総裁選挙から<span style="color:#f29100">'''橋本龍太郎'''</span>が選ばれました。1996年1月、村山富市首相退陣後の内閣総理大臣指名選挙で橋本龍太郎が選ばれました。橋本内閣でも自民党・社会民主党・新党さきがけの3党が引き続き協力して、政策を進めました。なお日本社会党は自衛隊・日米安全保障条約の賛成側に回り、1996年に党名を社会民主党へ変えました。
薬害エイズ問題も大きく取り上げられました。橋本龍太郎内閣厚生大臣の菅直人は薬害エイズ被害者[川田龍平など]に謝罪しました。その後、国と製薬会社と被害者が話し合い、和解しました。
1996年、新しい選挙制度で初めて衆議院議員総選挙が行われ、自由民主党の議席を大きく増やしても、過半数を下回りました。社会民主党と新党さきがけは第2次橋本内閣から国務大臣を出さなくなり、閣外協力に変わりました。その結果、自由民主党単独政権に戻りました。
橋本龍太郎内閣は冷戦後の国際変化・国内経済・政府問題を解決するため、行政・財政・金融の各分野を見直しました。行政改革は政府組織を減らしたり、類似の政府組織を1つにまとめたりして、首相などの政策案を出しやすくしました。1998年、中央省庁等改革基本法が導入されて中央省庁等改革関連法から行政改革の方針を決めました。
2001年1月、政府はこの行政改革の方針から中央省庁を1府22省庁から1府12省庁に減らしました。その結果、内閣総理大臣は各省庁へ指示を出して、政府全体の政策を進めやすくしました。2007年、防衛庁を防衛省に上げました。
★省庁再編
{| class="wikitable"
!再編前
!再編後
!再編前
!再編後
|-
|内閣官房
|内閣官房
|大蔵省
|財務省
|-
| rowspan="2" |総理府
金融再生委員会
経済企画庁
沖縄開発庁
| rowspan="2" |内閣府
|科学技術庁
文部省
|文部科学省
|-
|厚生省
労働省
|厚生労働省
|-
|国家公安委員会
|国家公安委員会
|農林水産省
|農林水産省
|-
|防衛庁
|防衛庁(省)
|通商産業省
|経済産業省
|-
|総務庁
郵政省
自治省
|総務省
| rowspan="2" |北海道開発庁
国土庁
建設省
運輸省
| rowspan="2" |国土交通省
|-
|法務省
|法務省
|-
|外務省
|外務省
|環境庁
|環境省
|}
橋本龍太郎内閣は国債の発行額を減らそうとしました。1997年4月、財政構造改革法に従って消費税率を3%から5%に引き上げて公共事業費などを減らしました。国債発行額は1970年代後半から増えても1980年代末で一度減りました。1990年代に入り、公共投資を再拡大させてから大幅な国債発行額増加に向かいました。
しかし、国民は消費税率の引き上げなどから財布の紐もきつくなり、金融機関も生き残れなくなりました。さらにアジア通貨・金融危機も起きて、日本経済は再不況になりました。やがて、銀行同士は金融不安の拡大から合併して1つの銀行になりました。1997年度の実質経済成長率は-0.4%となり、1974年度[第1次石油危機直後]以来のマイナス成長になりました。1998年度の実質経済成長率は-2%まで下がり、平成不況の大きさを改めて物語りました。
[[ファイル:Official Portrait of President William Jefferson Clinton - DPLA - 4697184146b3b6e2d6791b8f3c297476.jpg|サムネイル|221x221ピクセル|ビル・クリントン大統領]]
冷戦後、橋本龍太郎内閣は日米安全保障体制を見直しました。アメリカのビル・クリントン大統領が1996年4月に日本を訪れ、橋本首相と話し合って<span style="color:#f29100">'''日米安全保障共同宣言'''</span>を発表しました。日米安全保障共同宣言から日本とアメリカは日本防衛以外にもアジア太平洋地域の戦争防止・紛争防止まで努めていくようになりました。
自衛隊がアメリカ軍に必要物資を運ぶなどの後方支援についても、日米防衛協力のための指針を見直しました。1997年、日本政府とアメリカ合衆国政府は「新しい日米防衛協力のための指針(新ガイドライン)」を作りました。
日本が外国から直接攻撃されても直接攻撃されていなくても、日本周辺国の戦争などから日本の平和と安全に大きく関わっていたらアメリカ合衆国側も新ガイドラインに従って助け合いました(周辺事態)。ただし日本から何キロ以内というような距離だけだとアメリカ合衆国側は何もしません。
地球温暖化防止京都会議は1997年に開かれ、温室効果ガスの削減目標などを盛り込む京都議定書を採択しました。また、橋本龍太郎内閣は従来のアイヌ民族政策を大きく変えました。
アイヌ民族は1946年2月に北海道アイヌ協会を作り、アイヌ民族の権利を政府に求めました。北海道旧土人保護法からアイヌ民族用の土地[給与地]を貰っても、農地改革で買収されたくありませんでした。しかしアイヌ民族をずっと厳しく人種差別しており、アイヌ民族の一部は北海道から逃げました。その後、北海道アイヌ協会は名前を北海道ウタリ協会に変えました。[[ファイル:UPOPOY 202608.jpg|サムネイル|民族共生象徴空間ウポポイ]]1980年代、世界各地の先住民族が先住民族の権利を政府に求めました。北海道ウタリ協会は政府に北海道旧土人保護法を廃止して新しい法律を作ってほしいと求めました。1997年、国会はアイヌ民族文化をずっと守っていくためにアイヌ文化振興法を作り、北海道旧土人保護法を廃止しました。
その後もアイヌ民族政策は変わりました。2008年、国会はアイヌ民族を日本の先住民族と認めて、内閣へアイヌ民族の権利・生活・文化なども認めてほしいとお願いしました。民族団体の名前も北海道ウタリ協会から北海道アイヌ協会に戻しました。
2019(令和元)年、政府はアイヌ施策推進法で日本の「先住民族」にアイヌ民族を初めて入れました。アイヌ施策推進法から北海道アイヌ協会側も話し合いに参加して、アイヌ民族向けの新しい政策を行っています。2020年、北海道白老町に民族共生象徴空間ウポポイが開かれました。アイヌ語講座・アイヌ文化活動・アイヌ語活動が日本各地で開かれてもいます。
[[ファイル:Keizo Obuchi 19980730.jpg|サムネイル|168x168ピクセル|小渕恵三]]
1998年7月の参議院議員選挙で自由民主党議席数は大きく減らし、この結果から橋本龍太郎も内閣総理大臣を辞めました。これを受けて、<span style="color:#f29100">'''小渕恵三'''</span>が内閣総理大臣に選ばれました。小渕恵三内閣はバブル崩壊に消費税増税・金融不安・アジア通貨危機なども重なり、橋本龍太郎の財政再建路線を修正しました。小渕恵三内閣は土木工事・公共施設建築工事の大型予算を組んでその潤いから複合不況まで立て直そうとしました。その結果、政府は赤字国債発行額を再び大幅に増やしました。
1999年、小渕恵三内閣は国会法案の賛成を増やしたいから自由党〔1月〕・公明党〔10月〕も自由民主党と一緒に内閣を支えていました[自自公連立政権の開始]。その結果、自由民主党・自由党・公明党は衆議院・参議院の両方で過半数の議席を持つようになりました。小渕恵三内閣から自由民主党と公明党は2025年10月まで一緒に内閣を支えました。
1999年、小渕恵三内閣は'''新ガイドライン関連法'''をまとめました。新ガイドライン関連法の<span style="color:#f29100">'''周辺事態安全確保法'''</span>は日本周辺国家の暴走で自国の平和と安全まで守れなくなったら、自衛隊を出してアメリカ軍へ必要物資を送りました。
[[ファイル:G8 2000 group photo (kremlin.ru).jpg|サムネイル|233x233ピクセル|第26回主要国首脳会議]]
1999年、小渕恵三内閣は日の丸と君が代を国旗・国歌法へ初めて記しました。また、国民は情報公開法に従って官公庁へ資料を見せてほしいとお願いしやすくなりました。国会は憲法調査会で憲法を変えるかどうか話し合いました。小渕恵三内閣は2000年に九州・沖縄で第26回主要国首脳会議[サミット]開くと決めました。
この時期は野党も大きく変わりました。社会民主党の支持者は少しずつ減りました。新進党は議員の大量離脱から1997年末になくなりました。旧新進党の議員は違う政党[自由党・新党平和・民主党]に入りました。1996年、鳩山由紀夫・菅直人が民主党を結成しました。その後、旧新進党議員も民主党へ入りました。さらに、新党平和・黎明クラブを公明党に戻しました。
こうして、自由民主党と日本社会党が長く争う55年体制も終わりました。55年体制が終わっても、自由民主党と民主党の保守二大政党制へ繋がりませんでした。自由民主党が再び政権へ戻っても、自由党・公明党と一緒に内閣を支えていました。
== 資料出所 ==
* 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年
* 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年
* 高埜利彦、高村直助ほか編著『日本史A 改訂版』株式会社山川出版社 2016年
* 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年
* 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年
* 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年
* 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年
* 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年
* 河合敦著『世界一わかりやすい河合敦の日本史B[近・現代]の特別講座』株式会社KADOKAWA 2014年(絶版本)
* 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年
* 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年
[[カテゴリ:高等学校日本史探究|あらたなせいきのにほんへ]]
[[カテゴリ:20世紀]]
gtrydv2tj3mj4sz6da95inx77i5dtzd
304908
304907
2026-10-20T13:10:36Z
Kwawe
68789
/* 行政改革と日米安保の変化 */
304908
wikitext
text/x-wiki
[[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>新たな世紀の日本へⅡ
引き続き「新たな世紀の日本へ」の内容を解説します。第2回目では、政界再編から小渕恵三内閣までの国内政治を見ていきます。
== 政界再編と55年体制の終結 ==
※55年体制の崩壊で、国内政治はどのように変わりましたか。
{| style="border:2px solid #80A491;width:100%" cellspacing="0"
! style="background:#80A491" |村山談話
1995年8月15日「戦後五十周年の終戦記念日にあたって」を現代語に翻訳
|-
| style="padding:5px" |
|}
== バブルの崩壊 ==
プラザ合意後、大量のお金が土地購入・株式購入のために使われ、土地の値段・株価[資産価格]が次第に上がりました(資産インフレ)。1989(平成元)年、日本銀行は銀行へお金をあまり貸さなくなり、政府も土地の値段を上げすぎないようにしました(金融引き締め政策)。1990年代に入ってから、土地の値段・株価は下がり始めました。日経平均株価は、1989年12月末に3万8915円まで上がりました。しかし、その後は株式売却が増えて株価もいきなり下がり、1992年8月に1万4309円まで下がりました。土地の値段も1991年頃から下がり始め、1992年以後は日本各地で下がりました。2000年代半ばになると、大阪の一部商業地は一番高い時期の値段から約10分の1まで下がりました。こうして土地や株式の大幅な値上がりは終わり、1980年代後半のバブル経済は終わりました。
★日本の実質経済成長率の推移
[[ファイル:GDP_growth_rate_in_Japan.svg|代替文=日本の実質経済成長率の推移|フレームなし|924x924px]]
日本の景気は1991年から悪くなりました('''平成不況''')。実質経済成長率は1992年に1.3%、1993年に1%未満まで下がりました。1992年を3か月ずつに分けて見ると、4~6月は-3.3%となり、前の3か月より国内経済が小さくなりました。7~9月と10~12月もそれぞれ-0.1%となりました。第1次石油危機後に2期連続の経済縮小時期はあっても、3期連続の経済縮小は戦後初めてでした。僅かな景気回復時期も平成不況の途中にありました。しかしすぐに経済縮小となり、平成不況が長年続きました。
バブル経済当時の国民は金融機関からお金を借りて、株価と地価をより高い価格で買いました。金融機関は不動産会社にもお金を貸しました。バブル崩壊後、株価と地価が大きく下がりました。国民は株と土地を全て売っても借金を返せなくなりました。国民の借金も金融機関へ返ってこなくなりました(不良債権)。金融機関は株と土地を債権として持っており、不良債権から金融機関も大赤字になりました。
金融機関は不良債権処理にずっと追われて、さらに苦しくなりました。その結果、金融機関は不良債権の心配からお金を貸さなくなりました。企業は金融機関からお金を借りにくくなりました。国民も「この金融機関は大丈夫か」と不安を感じるようになり、金融機関はさらに苦しくなりました。その後、企業は新しい商品を作れなくなり、新しい工場を建てられなくなり、新しい機械も買えなくなりました。地価の下落・株価の下落・不良債権の増加・金融機関の経営悪化・金融機関の融資停止が全て重なって景気も次第に悪くなりました('''複合不況''')。
当時の政府と日本銀行はこれまでの不況と同じように、財政支出の拡大・低金利政策から数年で景気も回復するかもと思っていました。この誤対策は複合不況に一切効果ありません。住宅金融専門会社は1995年頃から相次いでつぶれました。1997年、北海道拓殖銀行と山一証券がつぶれました。1998年、日本債券信用銀行と日本長期信用銀行がつぶれました。このように大手金融機関がつぶれると、国民も他の金融機関も危ないのではないかと不安になりました。政府は金融システムまで止まらないように、倒産寸前の大手金融機関などに大量の公的資金を入れました。<gallery mode="nolines" widths="200" heights="200">
ファイル:The Hokkaido Takushoku Bank.JPG|旧北海道拓殖銀行本店
ファイル:Kayabacho Tower, at Shinkawa, Chuo, Tokyo (2019-01-02) 02.jpg|旧山一證券本社
ファイル:日債銀本店.jpg|旧日本債券信用銀行本店
ファイル:Shinsei Bank (head office 1).jpg|旧日本長期信用銀行本店
</gallery>1998年、小渕恵三が内閣総理大臣になりました。小渕恵三内閣も大型予算から景気を回復させしようとしました。小渕内閣が公共投資を増やして国民のお金を回そうとしても複合不況に一切効果ありません。こうして、公債発行残高は増えました。物価は1990年代後半からずっと下がり続けました(デフレスパイラル)。
[[ファイル:Unemployment Rate of Japan 1953-2009.jpg|サムネイル|395x395ピクセル|日本の失業率]]
企業は赤字なので、生き残るために経営の効率化[事業整理・人員削減・雇用調整・海外進出など]を進めました(リストラクチャリング)。中小企業の倒産も増えて、中高年労働者の解雇・中高年労働者の早期退職・新卒採用の削減から企業の人件費を大幅に減らしました。バブル景気の時期は労働者不足から「売り手市場」でも、バブル崩壊後から「買い手市場」へ変わりました。1990年代半ばから2000年代前半、企業は新卒採用を大幅に減らしました(就職氷河期)。1998年の完全失業率は4%を超え、2001年の完全失業率で5%になりました。
失業者が増えると労働者も「自分も仕事を失うかもしれない」と不安になり、個人消費を減らしました。消費者は同じような商品なら出来るだけ安い商品を選ぶようになり、ブランド品・高級品を買ってくれなくなりました。商品が売れなくなると、会社も少量生産・既存工場・既存機械だけで行うようになりました。その結果、会社の利益がさらに減って、人員削減・採用縮小もさらに進みました。株価と地価の下落から不良債権が増えて、金融機関の経営も苦しくなり、企業へお金を貸せなくなりました。
円高も国際分業も進みました。1994年、1ドルが100円を割り込みました。輸出主導・量産指向型産業[自動車・電子・家電・事務機器など]は海外で売れにくくなりました。また、バブル崩壊後の不景気から国内の購入者も減りました。生産費用を少しでも減らすため、労働者の給料が日本より低いアジア諸国[中国など]へ工場を移すようになりました[国内工場の閉鎖・国内工場の海外移転]。その結果、地元企業・周辺店舗の売り上げを減らし、失業者を増やしました(地域'''産業の空洞化''')。
繊維産業の事業所数は減り続けました。2015年の繊維産業の事業所数は1991年と比べて約4分の1になりました。国内衣料品市場のうち海外衣料品購入割合は1991年で52%になり、2017年で97%まで上がりました。多数の多国籍企業が1990年代後半に日本企業を合併したり、買収したりしました。企業が日本型雇用を取り入れていても競争力強化・経営効率化から人員削減・能力給の導入を進めました。その結果、働き方の不安定さが広がりました。
日本は技術面でも負けています。1980年代、日本企業はエレクトロニクス[電子機器]・新素材・バイオテクノロジーなどの技術でアメリカに追いつこうとしていました。1990年代から情報通信技術の活用や生産性の伸びでアメリカ合衆国に負けました。商品は日本国内で売れにくくなり、業務内容も変わっていきました。そのため、日本企業は海外企業に負けないような対策を取りました。
バブル崩壊後、銀行制度・企業制度も変えられました。「日本版金融ビッグバン」を1996年に打ち出して、銀行・証券会社などにも規制を緩めて金融の自由化・国際化を進めました。1997年の独占禁止法改正から禁止の持株会社を再度認めました。企業は持株会社からグループ内の会社をまとめ直したり、経営の進め方を変えたりしやすくなり、その後の企業再編・金融再編にもつながりました。
以前の大規模小売店舗法は店舗面積500平方メートル以上の大規模小売店舗出店条件として出店規模・営業時間・営業日数などを定めていました。しかし、大規模小売店舗は中小小売業者の近くにも自由に出店しており、中小小売業者のお客様まで消えました。そのため、政府は大規模小売店舗の立地場所を1998年から制限しました(大規模小売店舗立地法)。中小小売業者から流れすぎないように守りながら、大規模小売店舗も中小小売業者も商売を続けられるようにしました。2000年、大規模小売店舗法を廃止しました。[[ファイル:Asian Financial Crisis EN-2009-05-05.png|サムネイル|273x273px|アジア通貨危機の影響国]]企業再編・合併は政府の規制緩和から広がり、海外企業と国内企業の協力・合併も増えました。その流れから六大企業集団もまとまりました。金融業界でも銀行などが倒産したり、別の銀行と合併したりしました。その結果、日本の金融業界は三井住友グループ[旧三井系と旧住友系]・三菱UFJ[旧三菱系と三和系]・みずほグループ[旧第一勧銀系と旧富士系]の三大金融グループへまとまりました。
国内長期不況で苦しむ中、アジア諸国の経済は大成長しました。しかし短期海外資金の依存・金融機関の過剰な借入れ・企業の過剰な借入れ・金融制度の弱さ・投機資金の流入などから海外投資家が危機感を示して一斉に海外資金を回収・売却・国外移動を行いました。1997年、タイの通貨バーツの価値が大きく下がりました。海外投資家は東アジア・東南アジアから次々と海外資金を回収・売却・国外移動を行いました(アジア通貨危機)。その結果、東アジア・東南アジア諸国の金融と経済は大きな爪痕を残しました。債務問題は韓国などで大きくなり、国際通貨基金(International Monetary Fund:IMF)の支援を受けました。アジア通貨危機は日本経済と日本の金融機関にも大きな爪痕を残して、不良債権問題をさらに悪化させました。
日本政府はアジア通貨危機の発生から地域的な金融協力制度[アジア通貨基金構想]を出しました。しかし、アメリカ合衆国の反対から日本政府は二国間金融支援と新宮沢構想などに切り替えて、東アジア諸国を金銭面で助けました。
バブル経済崩壊後の平成不況はずっと続きました。景気は2002年初期に少しだけ上向きました。しかし、政府が公共事業中心の従来型景気対策を抑えながら不良債権処理と規制改革を進めました。その結果、企業は引き続き大規模なリストラと雇用調整を行いました。当初、バブル崩壊後の長期停滞は「失われた10年」とよばれました。その後も日本経済の停滞が強く、「失われた20年」「失われた30年」とよばれました。
== 行政改革と日米安保の変化 ==
1990年代後半、大規模災害の対策・重大事件への対策・行政改革・財政改革・金融改革・冷戦後の日米安全保障体制見直し・政党の組み直しを行いました。1995年1月17日、阪神・淡路地域でマグニチュード7.3の<span style="color:#f29100">'''阪神・淡路大震災[兵庫県南部地震]'''</span>が起こりました。神戸市を中心に6400人以上が亡くなり、建造物・高速道路までも大きく壊れました。当地震で大都市は自然災害に弱く、都市政策・耐震化基準・防災体制の見直しをしました。また、国民は被災地に入って、避難民[被災者]の生活を支えたり、被災地の後片付けを手伝ったりしました。この活動からボランティア活動が全国に広がりました。
1995年3月20日、オウム真理教集団は東京都の地下鉄でサリンを撒いて、多数の死傷者を出しました(<span style="color:#f29100">'''地下鉄サリン事件'''</span>)。このように阪神・淡路大震災と地下鉄サリン事件・少年犯罪の殺人事件・児童虐待などが何度も報道機関で取り上げられ、旧価値観的な安全神話も崩れて国民の意識も変わりました。<gallery mode="packed" widths="200" heights="200">
ファイル:Hanshin Expressway Nada b059.jpg|阪神淡路大震災被災後
ファイル:【地下鉄サリン事件】除染を行う自衛隊員と警察官.jpg|地下鉄サリン事件
ファイル:Ryutaro Hashimoto 19960111.jpg|橋本龍太郎
ファイル:Ryuhei Kawada 20240307.jpg|川田龍平
</gallery>1995年9月、自由民主党総裁選挙から<span style="color:#f29100">'''橋本龍太郎'''</span>が選ばれました。1996年1月、村山富市首相退陣後の内閣総理大臣指名選挙で橋本龍太郎が選ばれました。橋本内閣でも自民党・社会民主党・新党さきがけの3党が引き続き協力して、政策を進めました。なお日本社会党は自衛隊・日米安全保障条約の賛成側に回り、1996年に党名を社会民主党へ変えました。
薬害エイズ問題も大きく取り上げられました。橋本龍太郎内閣厚生大臣の菅直人は薬害エイズ被害者[川田龍平など]に謝罪しました。その後、国と製薬会社と被害者が話し合い、和解しました。
1996年、新しい選挙制度で初めて衆議院議員総選挙が行われ、自由民主党の議席を大きく増やしても、過半数を下回りました。社会民主党と新党さきがけは第2次橋本内閣から国務大臣を出さなくなり、閣外協力に変わりました。その結果、自由民主党単独政権に戻りました。
橋本龍太郎内閣は冷戦後の国際変化・国内経済・政府問題を解決するため、行政・財政・金融の各分野を見直しました。行政改革は政府組織を減らしたり、類似の政府組織を1つにまとめたりして、首相などの政策案を出しやすくしました。1998年、中央省庁等改革基本法が導入されて中央省庁等改革関連法から行政改革の方針を決めました。
2001年1月、政府はこの行政改革の方針から中央省庁を1府22省庁から1府12省庁に減らしました。その結果、内閣総理大臣は各省庁へ指示を出して、政府全体の政策を進めやすくしました。2007年、防衛庁を防衛省に上げました。
★省庁再編
{| class="wikitable"
!再編前
!再編後
!再編前
!再編後
|-
|内閣官房
|内閣官房
|大蔵省
|財務省
|-
| rowspan="2" |総理府
金融再生委員会
経済企画庁
沖縄開発庁
| rowspan="2" |内閣府
|科学技術庁
文部省
|文部科学省
|-
|厚生省
労働省
|厚生労働省
|-
|国家公安委員会
|国家公安委員会
|農林水産省
|農林水産省
|-
|防衛庁
|防衛庁(省)
|通商産業省
|経済産業省
|-
|総務庁
郵政省
自治省
|総務省
| rowspan="2" |北海道開発庁
国土庁
建設省
運輸省
| rowspan="2" |国土交通省
|-
|法務省
|法務省
|-
|外務省
|外務省
|環境庁
|環境省
|}
橋本龍太郎内閣は国債の発行額を減らそうとしました。1997年4月、財政構造改革法に従って消費税率を3%から5%に引き上げて公共事業費などを減らしました。国債発行額は1970年代後半から増えても1980年代末で一度減りました。1990年代に入り、公共投資を再拡大させてから大幅な国債発行額増加に向かいました。
しかし、国民は消費税率の引き上げなどから財布の紐もきつくなり、金融機関も生き残れなくなりました。さらにアジア通貨・金融危機も起きて、日本経済は再不況になりました。やがて、銀行同士は金融不安の拡大から合併して1つの銀行になりました。1997年度の実質経済成長率は-0.4%となり、1974年度[第1次石油危機直後]以来のマイナス成長になりました。1998年度の実質経済成長率は-2%まで下がり、平成不況の大きさを改めて物語りました。
[[ファイル:Official Portrait of President William Jefferson Clinton - DPLA - 4697184146b3b6e2d6791b8f3c297476.jpg|サムネイル|221x221ピクセル|ビル・クリントン大統領]]
冷戦後、橋本龍太郎内閣は日米安全保障体制を見直しました。アメリカのビル・クリントン大統領が1996年4月に日本を訪れ、橋本首相と話し合って<span style="color:#f29100">'''日米安全保障共同宣言'''</span>を発表しました。日米安全保障共同宣言から日本とアメリカは日本防衛以外にもアジア太平洋地域の戦争防止・紛争防止まで努めていくようになりました。
自衛隊がアメリカ軍に必要物資を運ぶなどの後方支援についても、日米防衛協力のための指針を見直しました。1997年、日本政府とアメリカ合衆国政府は「新しい日米防衛協力のための指針(新ガイドライン)」を作りました。
日本が外国から直接攻撃されても直接攻撃されていなくても、日本周辺国の戦争などから日本の平和と安全に大きく関わっていたらアメリカ合衆国側も新ガイドラインに従って助け合いました(周辺事態)。ただし日本から何キロ以内というような距離だけだとアメリカ合衆国側は何もしません。
地球温暖化防止京都会議は1997年に開かれ、温室効果ガスの削減目標などを盛り込む京都議定書を採択しました。また、橋本龍太郎内閣は従来のアイヌ民族政策を大きく変えました。
アイヌ民族は1946年2月に北海道アイヌ協会を作り、アイヌ民族の権利を政府に求めました。北海道旧土人保護法からアイヌ民族用の土地[給与地]を貰っても、農地改革で買収されたくありませんでした。しかしアイヌ民族をずっと厳しく人種差別しており、アイヌ民族の一部は北海道から逃げました。その後、北海道アイヌ協会は名前を北海道ウタリ協会に変えました。[[ファイル:UPOPOY 202608.jpg|サムネイル|民族共生象徴空間ウポポイ]]1980年代、世界各地の先住民族が先住民族の権利を政府に求めました。北海道ウタリ協会は政府に北海道旧土人保護法を廃止して新しい法律を作ってほしいと求めました。1997年、国会はアイヌ民族文化をずっと守っていくためにアイヌ文化振興法を作り、北海道旧土人保護法を廃止しました。
その後もアイヌ民族政策は変わりました。2008年、国会はアイヌ民族を日本の先住民族と認めて、内閣へアイヌ民族の権利・生活・文化なども認めてほしいとお願いしました。民族団体の名前も北海道ウタリ協会から北海道アイヌ協会に戻しました。
2019(令和元)年、政府はアイヌ施策推進法で日本の「先住民族」にアイヌ民族を初めて入れました。アイヌ施策推進法から北海道アイヌ協会側も話し合いに参加して、アイヌ民族向けの新しい政策を行っています。2020年、北海道白老町に民族共生象徴空間ウポポイが開かれました。アイヌ語講座・アイヌ文化活動・アイヌ語活動が日本各地で開かれてもいます。
[[ファイル:Keizo Obuchi 19980730.jpg|サムネイル|168x168ピクセル|小渕恵三]]
1998年7月の参議院議員選挙で自由民主党議席数は大きく減らし、この結果から橋本龍太郎も内閣総理大臣を辞めました。これを受けて、<span style="color:#f29100">'''小渕恵三'''</span>が内閣総理大臣に選ばれました。小渕恵三内閣はバブル崩壊に消費税増税・金融不安・アジア通貨危機なども重なり、橋本龍太郎の財政再建路線を修正しました。小渕恵三内閣は土木工事・公共施設建築工事の大型予算を組んでその潤いから複合不況まで立て直そうとしました。その結果、政府は赤字国債発行額を再び大幅に増やしました。
1999年、小渕恵三内閣は国会法案の賛成を増やしたいから自由党〔1月〕・公明党〔10月〕も自由民主党と一緒に内閣を支えていました[自自公連立政権の開始]。その結果、自由民主党・自由党・公明党は衆議院・参議院の両方で過半数の議席を持つようになりました。小渕恵三内閣から自由民主党と公明党は2025年10月まで一緒に内閣を支えました。
1999年、小渕恵三内閣は'''新ガイドライン関連法'''をまとめました。新ガイドライン関連法の<span style="color:#f29100">'''周辺事態安全確保法'''</span>は日本周辺国家の暴走で自国の平和と安全まで守れなくなったら、自衛隊を出してアメリカ軍へ必要物資を送りました。
[[ファイル:G8 2000 group photo (kremlin.ru).jpg|サムネイル|223x223px|第26回主要国首脳会議]]
1999年、小渕恵三内閣は日の丸と君が代を国旗・国歌法へ初めて記しました。また、国民は情報公開法に従って官公庁へ資料を見せてほしいとお願いしやすくなりました。国会は憲法調査会で憲法を変えるかどうか話し合いました。小渕恵三内閣は2000年に九州・沖縄で第26回主要国首脳会議[サミット]開くと決めました。
この時期は野党も大きく変わりました。社会民主党の支持者は少しずつ減りました。新進党は議員の大量離脱から1997年末になくなりました。旧新進党の議員は違う政党[自由党・新党平和・民主党]に入りました。1996年、鳩山由紀夫・菅直人が民主党を結成しました。その後、旧新進党議員も民主党へ入りました。さらに、新党平和・黎明クラブを公明党に戻しました。
こうして、自由民主党と日本社会党が長く争う55年体制も終わりました。55年体制が終わっても、自由民主党と民主党の保守二大政党制へ繋がりませんでした。自由民主党が再び政権へ戻っても、自由党・公明党と一緒に内閣を支えていました。
== 資料出所 ==
* 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年
* 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年
* 高埜利彦、高村直助ほか編著『日本史A 改訂版』株式会社山川出版社 2016年
* 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年
* 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年
* 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年
* 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年
* 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年
* 河合敦著『世界一わかりやすい河合敦の日本史B[近・現代]の特別講座』株式会社KADOKAWA 2014年(絶版本)
* 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年
* 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年
[[カテゴリ:高等学校日本史探究|あらたなせいきのにほんへ]]
[[カテゴリ:20世紀]]
qv8z19om0re1aml2bukbne7qj790yt6
304959
304908
2026-10-21T11:04:34Z
Kwawe
68789
/* 政界再編と55年体制の終結 */ 1975年、国鉄職員などは大きなストライキ「スト権スト」を行って政府側に争議権の回復を求めても失敗した。
304959
wikitext
text/x-wiki
[[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>新たな世紀の日本へⅡ
引き続き「新たな世紀の日本へ」の内容を解説します。第2回目では、政界再編から小渕恵三内閣までの国内政治を見ていきます。
== 政界再編と55年体制の終結 ==
1975年、国鉄職員などは大きなストライキ「スト権スト」を行って政府側に争議権の回復を求めても失敗しました。その後、官公庁労働組合はストライキなどをあまり行わなくなりました。民間大企業の労働組合も春闘で大幅な賃上げを求めにくくなりました。
== バブルの崩壊 ==
プラザ合意後、大量のお金が土地購入・株式購入のために使われ、土地の値段・株価[資産価格]が次第に上がりました(資産インフレ)。1989(平成元)年、日本銀行は銀行へお金をあまり貸さなくなり、政府も土地の値段を上げすぎないようにしました(金融引き締め政策)。1990年代に入ってから、土地の値段・株価は下がり始めました。日経平均株価は、1989年12月末に3万8915円まで上がりました。しかし、その後は株式売却が増えて株価もいきなり下がり、1992年8月に1万4309円まで下がりました。土地の値段も1991年頃から下がり始め、1992年以後は日本各地で下がりました。2000年代半ばになると、大阪の一部商業地は一番高い時期の値段から約10分の1まで下がりました。こうして土地や株式の大幅な値上がりは終わり、1980年代後半のバブル経済は終わりました。
★日本の実質経済成長率の推移
[[ファイル:GDP_growth_rate_in_Japan.svg|代替文=日本の実質経済成長率の推移|フレームなし|924x924px]]
日本の景気は1991年から悪くなりました('''平成不況''')。実質経済成長率は1992年に1.3%、1993年に1%未満まで下がりました。1992年を3か月ずつに分けて見ると、4~6月は-3.3%となり、前の3か月より国内経済が小さくなりました。7~9月と10~12月もそれぞれ-0.1%となりました。第1次石油危機後に2期連続の経済縮小時期はあっても、3期連続の経済縮小は戦後初めてでした。僅かな景気回復時期も平成不況の途中にありました。しかしすぐに経済縮小となり、平成不況が長年続きました。
バブル経済当時の国民は金融機関からお金を借りて、株価と地価をより高い価格で買いました。金融機関は不動産会社にもお金を貸しました。バブル崩壊後、株価と地価が大きく下がりました。国民は株と土地を全て売っても借金を返せなくなりました。国民の借金も金融機関へ返ってこなくなりました(不良債権)。金融機関は株と土地を債権として持っており、不良債権から金融機関も大赤字になりました。
金融機関は不良債権処理にずっと追われて、さらに苦しくなりました。その結果、金融機関は不良債権の心配からお金を貸さなくなりました。企業は金融機関からお金を借りにくくなりました。国民も「この金融機関は大丈夫か」と不安を感じるようになり、金融機関はさらに苦しくなりました。その後、企業は新しい商品を作れなくなり、新しい工場を建てられなくなり、新しい機械も買えなくなりました。地価の下落・株価の下落・不良債権の増加・金融機関の経営悪化・金融機関の融資停止が全て重なって景気も次第に悪くなりました('''複合不況''')。
当時の政府と日本銀行はこれまでの不況と同じように、財政支出の拡大・低金利政策から数年で景気も回復するかもと思っていました。この誤対策は複合不況に一切効果ありません。住宅金融専門会社は1995年頃から相次いでつぶれました。1997年、北海道拓殖銀行と山一証券がつぶれました。1998年、日本債券信用銀行と日本長期信用銀行がつぶれました。このように大手金融機関がつぶれると、国民も他の金融機関も危ないのではないかと不安になりました。政府は金融システムまで止まらないように、倒産寸前の大手金融機関などに大量の公的資金を入れました。<gallery mode="nolines" widths="200" heights="200">
ファイル:The Hokkaido Takushoku Bank.JPG|旧北海道拓殖銀行本店
ファイル:Kayabacho Tower, at Shinkawa, Chuo, Tokyo (2019-01-02) 02.jpg|旧山一證券本社
ファイル:日債銀本店.jpg|旧日本債券信用銀行本店
ファイル:Shinsei Bank (head office 1).jpg|旧日本長期信用銀行本店
</gallery>1998年、小渕恵三が内閣総理大臣になりました。小渕恵三内閣も大型予算から景気を回復させしようとしました。小渕内閣が公共投資を増やして国民のお金を回そうとしても複合不況に一切効果ありません。こうして、公債発行残高は増えました。物価は1990年代後半からずっと下がり続けました(デフレスパイラル)。
[[ファイル:Unemployment Rate of Japan 1953-2009.jpg|サムネイル|395x395ピクセル|日本の失業率]]
企業は赤字なので、生き残るために経営の効率化[事業整理・人員削減・雇用調整・海外進出など]を進めました(リストラクチャリング)。中小企業の倒産も増えて、中高年労働者の解雇・中高年労働者の早期退職・新卒採用の削減から企業の人件費を大幅に減らしました。バブル景気の時期は労働者不足から「売り手市場」でも、バブル崩壊後から「買い手市場」へ変わりました。1990年代半ばから2000年代前半、企業は新卒採用を大幅に減らしました(就職氷河期)。1998年の完全失業率は4%を超え、2001年の完全失業率で5%になりました。
失業者が増えると労働者も「自分も仕事を失うかもしれない」と不安になり、個人消費を減らしました。消費者は同じような商品なら出来るだけ安い商品を選ぶようになり、ブランド品・高級品を買ってくれなくなりました。商品が売れなくなると、会社も少量生産・既存工場・既存機械だけで行うようになりました。その結果、会社の利益がさらに減って、人員削減・採用縮小もさらに進みました。株価と地価の下落から不良債権が増えて、金融機関の経営も苦しくなり、企業へお金を貸せなくなりました。
円高も国際分業も進みました。1994年、1ドルが100円を割り込みました。輸出主導・量産指向型産業[自動車・電子・家電・事務機器など]は海外で売れにくくなりました。また、バブル崩壊後の不景気から国内の購入者も減りました。生産費用を少しでも減らすため、労働者の給料が日本より低いアジア諸国[中国など]へ工場を移すようになりました[国内工場の閉鎖・国内工場の海外移転]。その結果、地元企業・周辺店舗の売り上げを減らし、失業者を増やしました(地域'''産業の空洞化''')。
繊維産業の事業所数は減り続けました。2015年の繊維産業の事業所数は1991年と比べて約4分の1になりました。国内衣料品市場のうち海外衣料品購入割合は1991年で52%になり、2017年で97%まで上がりました。多数の多国籍企業が1990年代後半に日本企業を合併したり、買収したりしました。企業が日本型雇用を取り入れていても競争力強化・経営効率化から人員削減・能力給の導入を進めました。その結果、働き方の不安定さが広がりました。
日本は技術面でも負けています。1980年代、日本企業はエレクトロニクス[電子機器]・新素材・バイオテクノロジーなどの技術でアメリカに追いつこうとしていました。1990年代から情報通信技術の活用や生産性の伸びでアメリカ合衆国に負けました。商品は日本国内で売れにくくなり、業務内容も変わっていきました。そのため、日本企業は海外企業に負けないような対策を取りました。
バブル崩壊後、銀行制度・企業制度も変えられました。「日本版金融ビッグバン」を1996年に打ち出して、銀行・証券会社などにも規制を緩めて金融の自由化・国際化を進めました。1997年の独占禁止法改正から禁止の持株会社を再度認めました。企業は持株会社からグループ内の会社をまとめ直したり、経営の進め方を変えたりしやすくなり、その後の企業再編・金融再編にもつながりました。
以前の大規模小売店舗法は店舗面積500平方メートル以上の大規模小売店舗出店条件として出店規模・営業時間・営業日数などを定めていました。しかし、大規模小売店舗は中小小売業者の近くにも自由に出店しており、中小小売業者のお客様まで消えました。そのため、政府は大規模小売店舗の立地場所を1998年から制限しました(大規模小売店舗立地法)。中小小売業者から流れすぎないように守りながら、大規模小売店舗も中小小売業者も商売を続けられるようにしました。2000年、大規模小売店舗法を廃止しました。[[ファイル:Asian Financial Crisis EN-2009-05-05.png|サムネイル|273x273px|アジア通貨危機の影響国]]企業再編・合併は政府の規制緩和から広がり、海外企業と国内企業の協力・合併も増えました。その流れから六大企業集団もまとまりました。金融業界でも銀行などが倒産したり、別の銀行と合併したりしました。その結果、日本の金融業界は三井住友グループ[旧三井系と旧住友系]・三菱UFJ[旧三菱系と三和系]・みずほグループ[旧第一勧銀系と旧富士系]の三大金融グループへまとまりました。
国内長期不況で苦しむ中、アジア諸国の経済は大成長しました。しかし短期海外資金の依存・金融機関の過剰な借入れ・企業の過剰な借入れ・金融制度の弱さ・投機資金の流入などから海外投資家が危機感を示して一斉に海外資金を回収・売却・国外移動を行いました。1997年、タイの通貨バーツの価値が大きく下がりました。海外投資家は東アジア・東南アジアから次々と海外資金を回収・売却・国外移動を行いました(アジア通貨危機)。その結果、東アジア・東南アジア諸国の金融と経済は大きな爪痕を残しました。債務問題は韓国などで大きくなり、国際通貨基金(International Monetary Fund:IMF)の支援を受けました。アジア通貨危機は日本経済と日本の金融機関にも大きな爪痕を残して、不良債権問題をさらに悪化させました。
日本政府はアジア通貨危機の発生から地域的な金融協力制度[アジア通貨基金構想]を出しました。しかし、アメリカ合衆国の反対から日本政府は二国間金融支援と新宮沢構想などに切り替えて、東アジア諸国を金銭面で助けました。
バブル経済崩壊後の平成不況はずっと続きました。景気は2002年初期に少しだけ上向きました。しかし、政府が公共事業中心の従来型景気対策を抑えながら不良債権処理と規制改革を進めました。その結果、企業は引き続き大規模なリストラと雇用調整を行いました。当初、バブル崩壊後の長期停滞は「失われた10年」とよばれました。その後も日本経済の停滞が強く、「失われた20年」「失われた30年」とよばれました。
== 行政改革と日米安保の変化 ==
1990年代後半、大規模災害の対策・重大事件への対策・行政改革・財政改革・金融改革・冷戦後の日米安全保障体制見直し・政党の組み直しを行いました。1995年1月17日、阪神・淡路地域でマグニチュード7.3の<span style="color:#f29100">'''阪神・淡路大震災[兵庫県南部地震]'''</span>が起こりました。神戸市を中心に6400人以上が亡くなり、建造物・高速道路までも大きく壊れました。当地震で大都市は自然災害に弱く、都市政策・耐震化基準・防災体制の見直しをしました。また、国民は被災地に入って、避難民[被災者]の生活を支えたり、被災地の後片付けを手伝ったりしました。この活動からボランティア活動が全国に広がりました。
1995年3月20日、オウム真理教集団は東京都の地下鉄でサリンを撒いて、多数の死傷者を出しました(<span style="color:#f29100">'''地下鉄サリン事件'''</span>)。このように阪神・淡路大震災と地下鉄サリン事件・少年犯罪の殺人事件・児童虐待などが何度も報道機関で取り上げられ、旧価値観的な安全神話も崩れて国民の意識も変わりました。<gallery mode="packed" widths="200" heights="200">
ファイル:Hanshin Expressway Nada b059.jpg|阪神淡路大震災被災後
ファイル:【地下鉄サリン事件】除染を行う自衛隊員と警察官.jpg|地下鉄サリン事件
ファイル:Ryutaro Hashimoto 19960111.jpg|橋本龍太郎
ファイル:Ryuhei Kawada 20240307.jpg|川田龍平
</gallery>1995年9月、自由民主党総裁選挙から<span style="color:#f29100">'''橋本龍太郎'''</span>が選ばれました。1996年1月、村山富市首相退陣後の内閣総理大臣指名選挙で橋本龍太郎が選ばれました。橋本内閣でも自民党・社会民主党・新党さきがけの3党が引き続き協力して、政策を進めました。なお日本社会党は自衛隊・日米安全保障条約の賛成側に回り、1996年に党名を社会民主党へ変えました。
薬害エイズ問題も大きく取り上げられました。橋本龍太郎内閣厚生大臣の菅直人は薬害エイズ被害者[川田龍平など]に謝罪しました。その後、国と製薬会社と被害者が話し合い、和解しました。
1996年、新しい選挙制度で初めて衆議院議員総選挙が行われ、自由民主党の議席を大きく増やしても、過半数を下回りました。社会民主党と新党さきがけは第2次橋本内閣から国務大臣を出さなくなり、閣外協力に変わりました。その結果、自由民主党単独政権に戻りました。
橋本龍太郎内閣は冷戦後の国際変化・国内経済・政府問題を解決するため、行政・財政・金融の各分野を見直しました。行政改革は政府組織を減らしたり、類似の政府組織を1つにまとめたりして、首相などの政策案を出しやすくしました。1998年、中央省庁等改革基本法が導入されて中央省庁等改革関連法から行政改革の方針を決めました。
2001年1月、政府はこの行政改革の方針から中央省庁を1府22省庁から1府12省庁に減らしました。その結果、内閣総理大臣は各省庁へ指示を出して、政府全体の政策を進めやすくしました。2007年、防衛庁を防衛省に上げました。
★省庁再編
{| class="wikitable"
!再編前
!再編後
!再編前
!再編後
|-
|内閣官房
|内閣官房
|大蔵省
|財務省
|-
| rowspan="2" |総理府
金融再生委員会
経済企画庁
沖縄開発庁
| rowspan="2" |内閣府
|科学技術庁
文部省
|文部科学省
|-
|厚生省
労働省
|厚生労働省
|-
|国家公安委員会
|国家公安委員会
|農林水産省
|農林水産省
|-
|防衛庁
|防衛庁(省)
|通商産業省
|経済産業省
|-
|総務庁
郵政省
自治省
|総務省
| rowspan="2" |北海道開発庁
国土庁
建設省
運輸省
| rowspan="2" |国土交通省
|-
|法務省
|法務省
|-
|外務省
|外務省
|環境庁
|環境省
|}
橋本龍太郎内閣は国債の発行額を減らそうとしました。1997年4月、財政構造改革法に従って消費税率を3%から5%に引き上げて公共事業費などを減らしました。国債発行額は1970年代後半から増えても1980年代末で一度減りました。1990年代に入り、公共投資を再拡大させてから大幅な国債発行額増加に向かいました。
しかし、国民は消費税率の引き上げなどから財布の紐もきつくなり、金融機関も生き残れなくなりました。さらにアジア通貨・金融危機も起きて、日本経済は再不況になりました。やがて、銀行同士は金融不安の拡大から合併して1つの銀行になりました。1997年度の実質経済成長率は-0.4%となり、1974年度[第1次石油危機直後]以来のマイナス成長になりました。1998年度の実質経済成長率は-2%まで下がり、平成不況の大きさを改めて物語りました。
[[ファイル:Official Portrait of President William Jefferson Clinton - DPLA - 4697184146b3b6e2d6791b8f3c297476.jpg|サムネイル|221x221ピクセル|ビル・クリントン大統領]]
冷戦後、橋本龍太郎内閣は日米安全保障体制を見直しました。アメリカのビル・クリントン大統領が1996年4月に日本を訪れ、橋本首相と話し合って<span style="color:#f29100">'''日米安全保障共同宣言'''</span>を発表しました。日米安全保障共同宣言から日本とアメリカは日本防衛以外にもアジア太平洋地域の戦争防止・紛争防止まで努めていくようになりました。
自衛隊がアメリカ軍に必要物資を運ぶなどの後方支援についても、日米防衛協力のための指針を見直しました。1997年、日本政府とアメリカ合衆国政府は「新しい日米防衛協力のための指針(新ガイドライン)」を作りました。
日本が外国から直接攻撃されても直接攻撃されていなくても、日本周辺国の戦争などから日本の平和と安全に大きく関わっていたらアメリカ合衆国側も新ガイドラインに従って助け合いました(周辺事態)。ただし日本から何キロ以内というような距離だけだとアメリカ合衆国側は何もしません。
地球温暖化防止京都会議は1997年に開かれ、温室効果ガスの削減目標などを盛り込む京都議定書を採択しました。また、橋本龍太郎内閣は従来のアイヌ民族政策を大きく変えました。
アイヌ民族は1946年2月に北海道アイヌ協会を作り、アイヌ民族の権利を政府に求めました。北海道旧土人保護法からアイヌ民族用の土地[給与地]を貰っても、農地改革で買収されたくありませんでした。しかしアイヌ民族をずっと厳しく人種差別しており、アイヌ民族の一部は北海道から逃げました。その後、北海道アイヌ協会は名前を北海道ウタリ協会に変えました。[[ファイル:UPOPOY 202608.jpg|サムネイル|民族共生象徴空間ウポポイ]]1980年代、世界各地の先住民族が先住民族の権利を政府に求めました。北海道ウタリ協会は政府に北海道旧土人保護法を廃止して新しい法律を作ってほしいと求めました。1997年、国会はアイヌ民族文化をずっと守っていくためにアイヌ文化振興法を作り、北海道旧土人保護法を廃止しました。
その後もアイヌ民族政策は変わりました。2008年、国会はアイヌ民族を日本の先住民族と認めて、内閣へアイヌ民族の権利・生活・文化なども認めてほしいとお願いしました。民族団体の名前も北海道ウタリ協会から北海道アイヌ協会に戻しました。
2019(令和元)年、政府はアイヌ施策推進法で日本の「先住民族」にアイヌ民族を初めて入れました。アイヌ施策推進法から北海道アイヌ協会側も話し合いに参加して、アイヌ民族向けの新しい政策を行っています。2020年、北海道白老町に民族共生象徴空間ウポポイが開かれました。アイヌ語講座・アイヌ文化活動・アイヌ語活動が日本各地で開かれてもいます。
[[ファイル:Keizo Obuchi 19980730.jpg|サムネイル|168x168ピクセル|小渕恵三]]
1998年7月の参議院議員選挙で自由民主党議席数は大きく減らし、この結果から橋本龍太郎も内閣総理大臣を辞めました。これを受けて、<span style="color:#f29100">'''小渕恵三'''</span>が内閣総理大臣に選ばれました。小渕恵三内閣はバブル崩壊に消費税増税・金融不安・アジア通貨危機なども重なり、橋本龍太郎の財政再建路線を修正しました。小渕恵三内閣は土木工事・公共施設建築工事の大型予算を組んでその潤いから複合不況まで立て直そうとしました。その結果、政府は赤字国債発行額を再び大幅に増やしました。
1999年、小渕恵三内閣は国会法案の賛成を増やしたいから自由党〔1月〕・公明党〔10月〕も自由民主党と一緒に内閣を支えていました[自自公連立政権の開始]。その結果、自由民主党・自由党・公明党は衆議院・参議院の両方で過半数の議席を持つようになりました。小渕恵三内閣から自由民主党と公明党は2025年10月まで一緒に内閣を支えました。
1999年、小渕恵三内閣は'''新ガイドライン関連法'''をまとめました。新ガイドライン関連法の<span style="color:#f29100">'''周辺事態安全確保法'''</span>は日本周辺国家の暴走で自国の平和と安全まで守れなくなったら、自衛隊を出してアメリカ軍へ必要物資を送りました。
[[ファイル:G8 2000 group photo (kremlin.ru).jpg|サムネイル|223x223px|第26回主要国首脳会議]]
1999年、小渕恵三内閣は日の丸と君が代を国旗・国歌法へ初めて記しました。また、国民は情報公開法に従って官公庁へ資料を見せてほしいとお願いしやすくなりました。国会は憲法調査会で憲法を変えるかどうか話し合いました。小渕恵三内閣は2000年に九州・沖縄で第26回主要国首脳会議[サミット]開くと決めました。
この時期は野党も大きく変わりました。社会民主党の支持者は少しずつ減りました。新進党は議員の大量離脱から1997年末になくなりました。旧新進党の議員は違う政党[自由党・新党平和・民主党]に入りました。1996年、鳩山由紀夫・菅直人が民主党を結成しました。その後、旧新進党議員も民主党へ入りました。さらに、新党平和・黎明クラブを公明党に戻しました。
こうして、自由民主党と日本社会党が長く争う55年体制も終わりました。55年体制が終わっても、自由民主党と民主党の保守二大政党制へ繋がりませんでした。自由民主党が再び政権へ戻っても、自由党・公明党と一緒に内閣を支えていました。
== 資料出所 ==
* 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年
* 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年
* 高埜利彦、高村直助ほか編著『日本史A 改訂版』株式会社山川出版社 2016年
* 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年
* 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年
* 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年
* 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年
* 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年
* 河合敦著『世界一わかりやすい河合敦の日本史B[近・現代]の特別講座』株式会社KADOKAWA 2014年(絶版本)
* 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年
* 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年
[[カテゴリ:高等学校日本史探究|あらたなせいきのにほんへ]]
[[カテゴリ:20世紀]]
jr9spik9tu9uhwxxx30frmyzouma799
304960
304959
2026-10-21T11:05:43Z
Kwawe
68789
/* 政界再編と55年体制の終結 */ 1987年、全日本民間労働組合連合会[民間連合]をつくった。
304960
wikitext
text/x-wiki
[[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>新たな世紀の日本へⅡ
引き続き「新たな世紀の日本へ」の内容を解説します。第2回目では、政界再編から小渕恵三内閣までの国内政治を見ていきます。
== 政界再編と55年体制の終結 ==
1975年、国鉄職員などは大きなストライキ「スト権スト」を行って政府側に争議権の回復を求めても失敗しました。その後、官公庁労働組合はストライキなどをあまり行わなくなりました。民間大企業の労働組合も春闘で大幅な賃上げを求めにくくなりました。
その後、民間労働組合は1つにまとまり始めました。1987年、全日本民間労働組合連合会[民間連合]をつくりました。1989年の日本労働組合総評議会[総評]解散後、元日本労働組合総評議会[総評]は全日本民間労働組合連合会[民間連合]に合流しました。その後、全日本民間労働組合連合会[民間連合]と同盟などの労働組合は1つにまとまって日本労働組合総連合会[連合]をつくりました。日本労働組合総連合会[連合]は約800万人もいました。
== バブルの崩壊 ==
プラザ合意後、大量のお金が土地購入・株式購入のために使われ、土地の値段・株価[資産価格]が次第に上がりました(資産インフレ)。1989(平成元)年、日本銀行は銀行へお金をあまり貸さなくなり、政府も土地の値段を上げすぎないようにしました(金融引き締め政策)。1990年代に入ってから、土地の値段・株価は下がり始めました。日経平均株価は、1989年12月末に3万8915円まで上がりました。しかし、その後は株式売却が増えて株価もいきなり下がり、1992年8月に1万4309円まで下がりました。土地の値段も1991年頃から下がり始め、1992年以後は日本各地で下がりました。2000年代半ばになると、大阪の一部商業地は一番高い時期の値段から約10分の1まで下がりました。こうして土地や株式の大幅な値上がりは終わり、1980年代後半のバブル経済は終わりました。
★日本の実質経済成長率の推移
[[ファイル:GDP_growth_rate_in_Japan.svg|代替文=日本の実質経済成長率の推移|フレームなし|924x924px]]
日本の景気は1991年から悪くなりました('''平成不況''')。実質経済成長率は1992年に1.3%、1993年に1%未満まで下がりました。1992年を3か月ずつに分けて見ると、4~6月は-3.3%となり、前の3か月より国内経済が小さくなりました。7~9月と10~12月もそれぞれ-0.1%となりました。第1次石油危機後に2期連続の経済縮小時期はあっても、3期連続の経済縮小は戦後初めてでした。僅かな景気回復時期も平成不況の途中にありました。しかしすぐに経済縮小となり、平成不況が長年続きました。
バブル経済当時の国民は金融機関からお金を借りて、株価と地価をより高い価格で買いました。金融機関は不動産会社にもお金を貸しました。バブル崩壊後、株価と地価が大きく下がりました。国民は株と土地を全て売っても借金を返せなくなりました。国民の借金も金融機関へ返ってこなくなりました(不良債権)。金融機関は株と土地を債権として持っており、不良債権から金融機関も大赤字になりました。
金融機関は不良債権処理にずっと追われて、さらに苦しくなりました。その結果、金融機関は不良債権の心配からお金を貸さなくなりました。企業は金融機関からお金を借りにくくなりました。国民も「この金融機関は大丈夫か」と不安を感じるようになり、金融機関はさらに苦しくなりました。その後、企業は新しい商品を作れなくなり、新しい工場を建てられなくなり、新しい機械も買えなくなりました。地価の下落・株価の下落・不良債権の増加・金融機関の経営悪化・金融機関の融資停止が全て重なって景気も次第に悪くなりました('''複合不況''')。
当時の政府と日本銀行はこれまでの不況と同じように、財政支出の拡大・低金利政策から数年で景気も回復するかもと思っていました。この誤対策は複合不況に一切効果ありません。住宅金融専門会社は1995年頃から相次いでつぶれました。1997年、北海道拓殖銀行と山一証券がつぶれました。1998年、日本債券信用銀行と日本長期信用銀行がつぶれました。このように大手金融機関がつぶれると、国民も他の金融機関も危ないのではないかと不安になりました。政府は金融システムまで止まらないように、倒産寸前の大手金融機関などに大量の公的資金を入れました。<gallery mode="nolines" widths="200" heights="200">
ファイル:The Hokkaido Takushoku Bank.JPG|旧北海道拓殖銀行本店
ファイル:Kayabacho Tower, at Shinkawa, Chuo, Tokyo (2019-01-02) 02.jpg|旧山一證券本社
ファイル:日債銀本店.jpg|旧日本債券信用銀行本店
ファイル:Shinsei Bank (head office 1).jpg|旧日本長期信用銀行本店
</gallery>1998年、小渕恵三が内閣総理大臣になりました。小渕恵三内閣も大型予算から景気を回復させしようとしました。小渕内閣が公共投資を増やして国民のお金を回そうとしても複合不況に一切効果ありません。こうして、公債発行残高は増えました。物価は1990年代後半からずっと下がり続けました(デフレスパイラル)。
[[ファイル:Unemployment Rate of Japan 1953-2009.jpg|サムネイル|395x395ピクセル|日本の失業率]]
企業は赤字なので、生き残るために経営の効率化[事業整理・人員削減・雇用調整・海外進出など]を進めました(リストラクチャリング)。中小企業の倒産も増えて、中高年労働者の解雇・中高年労働者の早期退職・新卒採用の削減から企業の人件費を大幅に減らしました。バブル景気の時期は労働者不足から「売り手市場」でも、バブル崩壊後から「買い手市場」へ変わりました。1990年代半ばから2000年代前半、企業は新卒採用を大幅に減らしました(就職氷河期)。1998年の完全失業率は4%を超え、2001年の完全失業率で5%になりました。
失業者が増えると労働者も「自分も仕事を失うかもしれない」と不安になり、個人消費を減らしました。消費者は同じような商品なら出来るだけ安い商品を選ぶようになり、ブランド品・高級品を買ってくれなくなりました。商品が売れなくなると、会社も少量生産・既存工場・既存機械だけで行うようになりました。その結果、会社の利益がさらに減って、人員削減・採用縮小もさらに進みました。株価と地価の下落から不良債権が増えて、金融機関の経営も苦しくなり、企業へお金を貸せなくなりました。
円高も国際分業も進みました。1994年、1ドルが100円を割り込みました。輸出主導・量産指向型産業[自動車・電子・家電・事務機器など]は海外で売れにくくなりました。また、バブル崩壊後の不景気から国内の購入者も減りました。生産費用を少しでも減らすため、労働者の給料が日本より低いアジア諸国[中国など]へ工場を移すようになりました[国内工場の閉鎖・国内工場の海外移転]。その結果、地元企業・周辺店舗の売り上げを減らし、失業者を増やしました(地域'''産業の空洞化''')。
繊維産業の事業所数は減り続けました。2015年の繊維産業の事業所数は1991年と比べて約4分の1になりました。国内衣料品市場のうち海外衣料品購入割合は1991年で52%になり、2017年で97%まで上がりました。多数の多国籍企業が1990年代後半に日本企業を合併したり、買収したりしました。企業が日本型雇用を取り入れていても競争力強化・経営効率化から人員削減・能力給の導入を進めました。その結果、働き方の不安定さが広がりました。
日本は技術面でも負けています。1980年代、日本企業はエレクトロニクス[電子機器]・新素材・バイオテクノロジーなどの技術でアメリカに追いつこうとしていました。1990年代から情報通信技術の活用や生産性の伸びでアメリカ合衆国に負けました。商品は日本国内で売れにくくなり、業務内容も変わっていきました。そのため、日本企業は海外企業に負けないような対策を取りました。
バブル崩壊後、銀行制度・企業制度も変えられました。「日本版金融ビッグバン」を1996年に打ち出して、銀行・証券会社などにも規制を緩めて金融の自由化・国際化を進めました。1997年の独占禁止法改正から禁止の持株会社を再度認めました。企業は持株会社からグループ内の会社をまとめ直したり、経営の進め方を変えたりしやすくなり、その後の企業再編・金融再編にもつながりました。
以前の大規模小売店舗法は店舗面積500平方メートル以上の大規模小売店舗出店条件として出店規模・営業時間・営業日数などを定めていました。しかし、大規模小売店舗は中小小売業者の近くにも自由に出店しており、中小小売業者のお客様まで消えました。そのため、政府は大規模小売店舗の立地場所を1998年から制限しました(大規模小売店舗立地法)。中小小売業者から流れすぎないように守りながら、大規模小売店舗も中小小売業者も商売を続けられるようにしました。2000年、大規模小売店舗法を廃止しました。[[ファイル:Asian Financial Crisis EN-2009-05-05.png|サムネイル|273x273px|アジア通貨危機の影響国]]企業再編・合併は政府の規制緩和から広がり、海外企業と国内企業の協力・合併も増えました。その流れから六大企業集団もまとまりました。金融業界でも銀行などが倒産したり、別の銀行と合併したりしました。その結果、日本の金融業界は三井住友グループ[旧三井系と旧住友系]・三菱UFJ[旧三菱系と三和系]・みずほグループ[旧第一勧銀系と旧富士系]の三大金融グループへまとまりました。
国内長期不況で苦しむ中、アジア諸国の経済は大成長しました。しかし短期海外資金の依存・金融機関の過剰な借入れ・企業の過剰な借入れ・金融制度の弱さ・投機資金の流入などから海外投資家が危機感を示して一斉に海外資金を回収・売却・国外移動を行いました。1997年、タイの通貨バーツの価値が大きく下がりました。海外投資家は東アジア・東南アジアから次々と海外資金を回収・売却・国外移動を行いました(アジア通貨危機)。その結果、東アジア・東南アジア諸国の金融と経済は大きな爪痕を残しました。債務問題は韓国などで大きくなり、国際通貨基金(International Monetary Fund:IMF)の支援を受けました。アジア通貨危機は日本経済と日本の金融機関にも大きな爪痕を残して、不良債権問題をさらに悪化させました。
日本政府はアジア通貨危機の発生から地域的な金融協力制度[アジア通貨基金構想]を出しました。しかし、アメリカ合衆国の反対から日本政府は二国間金融支援と新宮沢構想などに切り替えて、東アジア諸国を金銭面で助けました。
バブル経済崩壊後の平成不況はずっと続きました。景気は2002年初期に少しだけ上向きました。しかし、政府が公共事業中心の従来型景気対策を抑えながら不良債権処理と規制改革を進めました。その結果、企業は引き続き大規模なリストラと雇用調整を行いました。当初、バブル崩壊後の長期停滞は「失われた10年」とよばれました。その後も日本経済の停滞が強く、「失われた20年」「失われた30年」とよばれました。
== 行政改革と日米安保の変化 ==
1990年代後半、大規模災害の対策・重大事件への対策・行政改革・財政改革・金融改革・冷戦後の日米安全保障体制見直し・政党の組み直しを行いました。1995年1月17日、阪神・淡路地域でマグニチュード7.3の<span style="color:#f29100">'''阪神・淡路大震災[兵庫県南部地震]'''</span>が起こりました。神戸市を中心に6400人以上が亡くなり、建造物・高速道路までも大きく壊れました。当地震で大都市は自然災害に弱く、都市政策・耐震化基準・防災体制の見直しをしました。また、国民は被災地に入って、避難民[被災者]の生活を支えたり、被災地の後片付けを手伝ったりしました。この活動からボランティア活動が全国に広がりました。
1995年3月20日、オウム真理教集団は東京都の地下鉄でサリンを撒いて、多数の死傷者を出しました(<span style="color:#f29100">'''地下鉄サリン事件'''</span>)。このように阪神・淡路大震災と地下鉄サリン事件・少年犯罪の殺人事件・児童虐待などが何度も報道機関で取り上げられ、旧価値観的な安全神話も崩れて国民の意識も変わりました。<gallery mode="packed" widths="200" heights="200">
ファイル:Hanshin Expressway Nada b059.jpg|阪神淡路大震災被災後
ファイル:【地下鉄サリン事件】除染を行う自衛隊員と警察官.jpg|地下鉄サリン事件
ファイル:Ryutaro Hashimoto 19960111.jpg|橋本龍太郎
ファイル:Ryuhei Kawada 20240307.jpg|川田龍平
</gallery>1995年9月、自由民主党総裁選挙から<span style="color:#f29100">'''橋本龍太郎'''</span>が選ばれました。1996年1月、村山富市首相退陣後の内閣総理大臣指名選挙で橋本龍太郎が選ばれました。橋本内閣でも自民党・社会民主党・新党さきがけの3党が引き続き協力して、政策を進めました。なお日本社会党は自衛隊・日米安全保障条約の賛成側に回り、1996年に党名を社会民主党へ変えました。
薬害エイズ問題も大きく取り上げられました。橋本龍太郎内閣厚生大臣の菅直人は薬害エイズ被害者[川田龍平など]に謝罪しました。その後、国と製薬会社と被害者が話し合い、和解しました。
1996年、新しい選挙制度で初めて衆議院議員総選挙が行われ、自由民主党の議席を大きく増やしても、過半数を下回りました。社会民主党と新党さきがけは第2次橋本内閣から国務大臣を出さなくなり、閣外協力に変わりました。その結果、自由民主党単独政権に戻りました。
橋本龍太郎内閣は冷戦後の国際変化・国内経済・政府問題を解決するため、行政・財政・金融の各分野を見直しました。行政改革は政府組織を減らしたり、類似の政府組織を1つにまとめたりして、首相などの政策案を出しやすくしました。1998年、中央省庁等改革基本法が導入されて中央省庁等改革関連法から行政改革の方針を決めました。
2001年1月、政府はこの行政改革の方針から中央省庁を1府22省庁から1府12省庁に減らしました。その結果、内閣総理大臣は各省庁へ指示を出して、政府全体の政策を進めやすくしました。2007年、防衛庁を防衛省に上げました。
★省庁再編
{| class="wikitable"
!再編前
!再編後
!再編前
!再編後
|-
|内閣官房
|内閣官房
|大蔵省
|財務省
|-
| rowspan="2" |総理府
金融再生委員会
経済企画庁
沖縄開発庁
| rowspan="2" |内閣府
|科学技術庁
文部省
|文部科学省
|-
|厚生省
労働省
|厚生労働省
|-
|国家公安委員会
|国家公安委員会
|農林水産省
|農林水産省
|-
|防衛庁
|防衛庁(省)
|通商産業省
|経済産業省
|-
|総務庁
郵政省
自治省
|総務省
| rowspan="2" |北海道開発庁
国土庁
建設省
運輸省
| rowspan="2" |国土交通省
|-
|法務省
|法務省
|-
|外務省
|外務省
|環境庁
|環境省
|}
橋本龍太郎内閣は国債の発行額を減らそうとしました。1997年4月、財政構造改革法に従って消費税率を3%から5%に引き上げて公共事業費などを減らしました。国債発行額は1970年代後半から増えても1980年代末で一度減りました。1990年代に入り、公共投資を再拡大させてから大幅な国債発行額増加に向かいました。
しかし、国民は消費税率の引き上げなどから財布の紐もきつくなり、金融機関も生き残れなくなりました。さらにアジア通貨・金融危機も起きて、日本経済は再不況になりました。やがて、銀行同士は金融不安の拡大から合併して1つの銀行になりました。1997年度の実質経済成長率は-0.4%となり、1974年度[第1次石油危機直後]以来のマイナス成長になりました。1998年度の実質経済成長率は-2%まで下がり、平成不況の大きさを改めて物語りました。
[[ファイル:Official Portrait of President William Jefferson Clinton - DPLA - 4697184146b3b6e2d6791b8f3c297476.jpg|サムネイル|221x221ピクセル|ビル・クリントン大統領]]
冷戦後、橋本龍太郎内閣は日米安全保障体制を見直しました。アメリカのビル・クリントン大統領が1996年4月に日本を訪れ、橋本首相と話し合って<span style="color:#f29100">'''日米安全保障共同宣言'''</span>を発表しました。日米安全保障共同宣言から日本とアメリカは日本防衛以外にもアジア太平洋地域の戦争防止・紛争防止まで努めていくようになりました。
自衛隊がアメリカ軍に必要物資を運ぶなどの後方支援についても、日米防衛協力のための指針を見直しました。1997年、日本政府とアメリカ合衆国政府は「新しい日米防衛協力のための指針(新ガイドライン)」を作りました。
日本が外国から直接攻撃されても直接攻撃されていなくても、日本周辺国の戦争などから日本の平和と安全に大きく関わっていたらアメリカ合衆国側も新ガイドラインに従って助け合いました(周辺事態)。ただし日本から何キロ以内というような距離だけだとアメリカ合衆国側は何もしません。
地球温暖化防止京都会議は1997年に開かれ、温室効果ガスの削減目標などを盛り込む京都議定書を採択しました。また、橋本龍太郎内閣は従来のアイヌ民族政策を大きく変えました。
アイヌ民族は1946年2月に北海道アイヌ協会を作り、アイヌ民族の権利を政府に求めました。北海道旧土人保護法からアイヌ民族用の土地[給与地]を貰っても、農地改革で買収されたくありませんでした。しかしアイヌ民族をずっと厳しく人種差別しており、アイヌ民族の一部は北海道から逃げました。その後、北海道アイヌ協会は名前を北海道ウタリ協会に変えました。[[ファイル:UPOPOY 202608.jpg|サムネイル|民族共生象徴空間ウポポイ]]1980年代、世界各地の先住民族が先住民族の権利を政府に求めました。北海道ウタリ協会は政府に北海道旧土人保護法を廃止して新しい法律を作ってほしいと求めました。1997年、国会はアイヌ民族文化をずっと守っていくためにアイヌ文化振興法を作り、北海道旧土人保護法を廃止しました。
その後もアイヌ民族政策は変わりました。2008年、国会はアイヌ民族を日本の先住民族と認めて、内閣へアイヌ民族の権利・生活・文化なども認めてほしいとお願いしました。民族団体の名前も北海道ウタリ協会から北海道アイヌ協会に戻しました。
2019(令和元)年、政府はアイヌ施策推進法で日本の「先住民族」にアイヌ民族を初めて入れました。アイヌ施策推進法から北海道アイヌ協会側も話し合いに参加して、アイヌ民族向けの新しい政策を行っています。2020年、北海道白老町に民族共生象徴空間ウポポイが開かれました。アイヌ語講座・アイヌ文化活動・アイヌ語活動が日本各地で開かれてもいます。
[[ファイル:Keizo Obuchi 19980730.jpg|サムネイル|168x168ピクセル|小渕恵三]]
1998年7月の参議院議員選挙で自由民主党議席数は大きく減らし、この結果から橋本龍太郎も内閣総理大臣を辞めました。これを受けて、<span style="color:#f29100">'''小渕恵三'''</span>が内閣総理大臣に選ばれました。小渕恵三内閣はバブル崩壊に消費税増税・金融不安・アジア通貨危機なども重なり、橋本龍太郎の財政再建路線を修正しました。小渕恵三内閣は土木工事・公共施設建築工事の大型予算を組んでその潤いから複合不況まで立て直そうとしました。その結果、政府は赤字国債発行額を再び大幅に増やしました。
1999年、小渕恵三内閣は国会法案の賛成を増やしたいから自由党〔1月〕・公明党〔10月〕も自由民主党と一緒に内閣を支えていました[自自公連立政権の開始]。その結果、自由民主党・自由党・公明党は衆議院・参議院の両方で過半数の議席を持つようになりました。小渕恵三内閣から自由民主党と公明党は2025年10月まで一緒に内閣を支えました。
1999年、小渕恵三内閣は'''新ガイドライン関連法'''をまとめました。新ガイドライン関連法の<span style="color:#f29100">'''周辺事態安全確保法'''</span>は日本周辺国家の暴走で自国の平和と安全まで守れなくなったら、自衛隊を出してアメリカ軍へ必要物資を送りました。
[[ファイル:G8 2000 group photo (kremlin.ru).jpg|サムネイル|223x223px|第26回主要国首脳会議]]
1999年、小渕恵三内閣は日の丸と君が代を国旗・国歌法へ初めて記しました。また、国民は情報公開法に従って官公庁へ資料を見せてほしいとお願いしやすくなりました。国会は憲法調査会で憲法を変えるかどうか話し合いました。小渕恵三内閣は2000年に九州・沖縄で第26回主要国首脳会議[サミット]開くと決めました。
この時期は野党も大きく変わりました。社会民主党の支持者は少しずつ減りました。新進党は議員の大量離脱から1997年末になくなりました。旧新進党の議員は違う政党[自由党・新党平和・民主党]に入りました。1996年、鳩山由紀夫・菅直人が民主党を結成しました。その後、旧新進党議員も民主党へ入りました。さらに、新党平和・黎明クラブを公明党に戻しました。
こうして、自由民主党と日本社会党が長く争う55年体制も終わりました。55年体制が終わっても、自由民主党と民主党の保守二大政党制へ繋がりませんでした。自由民主党が再び政権へ戻っても、自由党・公明党と一緒に内閣を支えていました。
== 資料出所 ==
* 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年
* 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年
* 高埜利彦、高村直助ほか編著『日本史A 改訂版』株式会社山川出版社 2016年
* 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年
* 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年
* 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年
* 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年
* 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年
* 河合敦著『世界一わかりやすい河合敦の日本史B[近・現代]の特別講座』株式会社KADOKAWA 2014年(絶版本)
* 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年
* 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年
[[カテゴリ:高等学校日本史探究|あらたなせいきのにほんへ]]
[[カテゴリ:20世紀]]
ksmwriam6xihqxk09jik5487zfuzo2n
304961
304960
2026-10-21T11:06:26Z
Kwawe
68789
/* 政界再編と55年体制の終結 */ 1994年4月、新生党の羽田孜が内閣総理大臣になった。
304961
wikitext
text/x-wiki
[[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>新たな世紀の日本へⅡ
引き続き「新たな世紀の日本へ」の内容を解説します。第2回目では、政界再編から小渕恵三内閣までの国内政治を見ていきます。
== 政界再編と55年体制の終結 ==
1975年、国鉄職員などは大きなストライキ「スト権スト」を行って政府側に争議権の回復を求めても失敗しました。その後、官公庁労働組合はストライキなどをあまり行わなくなりました。民間大企業の労働組合も春闘で大幅な賃上げを求めにくくなりました。
その後、民間労働組合は1つにまとまり始めました。1987年、全日本民間労働組合連合会[民間連合]をつくりました。1989年の日本労働組合総評議会[総評]解散後、元日本労働組合総評議会[総評]は全日本民間労働組合連合会[民間連合]に合流しました。その後、全日本民間労働組合連合会[民間連合]と同盟などの労働組合は1つにまとまって日本労働組合総連合会[連合]をつくりました。日本労働組合総連合会[連合]は約800万人もいました。
1994年4月、新生党の羽田孜が内閣総理大臣になりました。しかし、日本社会党は新生党と一緒に内閣を支えなくなりました。羽田孜は国会議員の賛成を集められなくなり、約2か月で首相を辞めました。1994年6月、自由民主党は元野党側の日本社会党・新党さきがけと一緒に内閣を支えました[自社さ連立政権]。日本社会党の村山富市が内閣総理大臣になり、自由民主党も政権へ戻りました。一方、非自民連立政権側の新生党・日本新党・公明党・民社党などは1つにまとまって新進党をつくりました。
== バブルの崩壊 ==
プラザ合意後、大量のお金が土地購入・株式購入のために使われ、土地の値段・株価[資産価格]が次第に上がりました(資産インフレ)。1989(平成元)年、日本銀行は銀行へお金をあまり貸さなくなり、政府も土地の値段を上げすぎないようにしました(金融引き締め政策)。1990年代に入ってから、土地の値段・株価は下がり始めました。日経平均株価は、1989年12月末に3万8915円まで上がりました。しかし、その後は株式売却が増えて株価もいきなり下がり、1992年8月に1万4309円まで下がりました。土地の値段も1991年頃から下がり始め、1992年以後は日本各地で下がりました。2000年代半ばになると、大阪の一部商業地は一番高い時期の値段から約10分の1まで下がりました。こうして土地や株式の大幅な値上がりは終わり、1980年代後半のバブル経済は終わりました。
★日本の実質経済成長率の推移
[[ファイル:GDP_growth_rate_in_Japan.svg|代替文=日本の実質経済成長率の推移|フレームなし|924x924px]]
日本の景気は1991年から悪くなりました('''平成不況''')。実質経済成長率は1992年に1.3%、1993年に1%未満まで下がりました。1992年を3か月ずつに分けて見ると、4~6月は-3.3%となり、前の3か月より国内経済が小さくなりました。7~9月と10~12月もそれぞれ-0.1%となりました。第1次石油危機後に2期連続の経済縮小時期はあっても、3期連続の経済縮小は戦後初めてでした。僅かな景気回復時期も平成不況の途中にありました。しかしすぐに経済縮小となり、平成不況が長年続きました。
バブル経済当時の国民は金融機関からお金を借りて、株価と地価をより高い価格で買いました。金融機関は不動産会社にもお金を貸しました。バブル崩壊後、株価と地価が大きく下がりました。国民は株と土地を全て売っても借金を返せなくなりました。国民の借金も金融機関へ返ってこなくなりました(不良債権)。金融機関は株と土地を債権として持っており、不良債権から金融機関も大赤字になりました。
金融機関は不良債権処理にずっと追われて、さらに苦しくなりました。その結果、金融機関は不良債権の心配からお金を貸さなくなりました。企業は金融機関からお金を借りにくくなりました。国民も「この金融機関は大丈夫か」と不安を感じるようになり、金融機関はさらに苦しくなりました。その後、企業は新しい商品を作れなくなり、新しい工場を建てられなくなり、新しい機械も買えなくなりました。地価の下落・株価の下落・不良債権の増加・金融機関の経営悪化・金融機関の融資停止が全て重なって景気も次第に悪くなりました('''複合不況''')。
当時の政府と日本銀行はこれまでの不況と同じように、財政支出の拡大・低金利政策から数年で景気も回復するかもと思っていました。この誤対策は複合不況に一切効果ありません。住宅金融専門会社は1995年頃から相次いでつぶれました。1997年、北海道拓殖銀行と山一証券がつぶれました。1998年、日本債券信用銀行と日本長期信用銀行がつぶれました。このように大手金融機関がつぶれると、国民も他の金融機関も危ないのではないかと不安になりました。政府は金融システムまで止まらないように、倒産寸前の大手金融機関などに大量の公的資金を入れました。<gallery mode="nolines" widths="200" heights="200">
ファイル:The Hokkaido Takushoku Bank.JPG|旧北海道拓殖銀行本店
ファイル:Kayabacho Tower, at Shinkawa, Chuo, Tokyo (2019-01-02) 02.jpg|旧山一證券本社
ファイル:日債銀本店.jpg|旧日本債券信用銀行本店
ファイル:Shinsei Bank (head office 1).jpg|旧日本長期信用銀行本店
</gallery>1998年、小渕恵三が内閣総理大臣になりました。小渕恵三内閣も大型予算から景気を回復させしようとしました。小渕内閣が公共投資を増やして国民のお金を回そうとしても複合不況に一切効果ありません。こうして、公債発行残高は増えました。物価は1990年代後半からずっと下がり続けました(デフレスパイラル)。
[[ファイル:Unemployment Rate of Japan 1953-2009.jpg|サムネイル|395x395ピクセル|日本の失業率]]
企業は赤字なので、生き残るために経営の効率化[事業整理・人員削減・雇用調整・海外進出など]を進めました(リストラクチャリング)。中小企業の倒産も増えて、中高年労働者の解雇・中高年労働者の早期退職・新卒採用の削減から企業の人件費を大幅に減らしました。バブル景気の時期は労働者不足から「売り手市場」でも、バブル崩壊後から「買い手市場」へ変わりました。1990年代半ばから2000年代前半、企業は新卒採用を大幅に減らしました(就職氷河期)。1998年の完全失業率は4%を超え、2001年の完全失業率で5%になりました。
失業者が増えると労働者も「自分も仕事を失うかもしれない」と不安になり、個人消費を減らしました。消費者は同じような商品なら出来るだけ安い商品を選ぶようになり、ブランド品・高級品を買ってくれなくなりました。商品が売れなくなると、会社も少量生産・既存工場・既存機械だけで行うようになりました。その結果、会社の利益がさらに減って、人員削減・採用縮小もさらに進みました。株価と地価の下落から不良債権が増えて、金融機関の経営も苦しくなり、企業へお金を貸せなくなりました。
円高も国際分業も進みました。1994年、1ドルが100円を割り込みました。輸出主導・量産指向型産業[自動車・電子・家電・事務機器など]は海外で売れにくくなりました。また、バブル崩壊後の不景気から国内の購入者も減りました。生産費用を少しでも減らすため、労働者の給料が日本より低いアジア諸国[中国など]へ工場を移すようになりました[国内工場の閉鎖・国内工場の海外移転]。その結果、地元企業・周辺店舗の売り上げを減らし、失業者を増やしました(地域'''産業の空洞化''')。
繊維産業の事業所数は減り続けました。2015年の繊維産業の事業所数は1991年と比べて約4分の1になりました。国内衣料品市場のうち海外衣料品購入割合は1991年で52%になり、2017年で97%まで上がりました。多数の多国籍企業が1990年代後半に日本企業を合併したり、買収したりしました。企業が日本型雇用を取り入れていても競争力強化・経営効率化から人員削減・能力給の導入を進めました。その結果、働き方の不安定さが広がりました。
日本は技術面でも負けています。1980年代、日本企業はエレクトロニクス[電子機器]・新素材・バイオテクノロジーなどの技術でアメリカに追いつこうとしていました。1990年代から情報通信技術の活用や生産性の伸びでアメリカ合衆国に負けました。商品は日本国内で売れにくくなり、業務内容も変わっていきました。そのため、日本企業は海外企業に負けないような対策を取りました。
バブル崩壊後、銀行制度・企業制度も変えられました。「日本版金融ビッグバン」を1996年に打ち出して、銀行・証券会社などにも規制を緩めて金融の自由化・国際化を進めました。1997年の独占禁止法改正から禁止の持株会社を再度認めました。企業は持株会社からグループ内の会社をまとめ直したり、経営の進め方を変えたりしやすくなり、その後の企業再編・金融再編にもつながりました。
以前の大規模小売店舗法は店舗面積500平方メートル以上の大規模小売店舗出店条件として出店規模・営業時間・営業日数などを定めていました。しかし、大規模小売店舗は中小小売業者の近くにも自由に出店しており、中小小売業者のお客様まで消えました。そのため、政府は大規模小売店舗の立地場所を1998年から制限しました(大規模小売店舗立地法)。中小小売業者から流れすぎないように守りながら、大規模小売店舗も中小小売業者も商売を続けられるようにしました。2000年、大規模小売店舗法を廃止しました。[[ファイル:Asian Financial Crisis EN-2009-05-05.png|サムネイル|273x273px|アジア通貨危機の影響国]]企業再編・合併は政府の規制緩和から広がり、海外企業と国内企業の協力・合併も増えました。その流れから六大企業集団もまとまりました。金融業界でも銀行などが倒産したり、別の銀行と合併したりしました。その結果、日本の金融業界は三井住友グループ[旧三井系と旧住友系]・三菱UFJ[旧三菱系と三和系]・みずほグループ[旧第一勧銀系と旧富士系]の三大金融グループへまとまりました。
国内長期不況で苦しむ中、アジア諸国の経済は大成長しました。しかし短期海外資金の依存・金融機関の過剰な借入れ・企業の過剰な借入れ・金融制度の弱さ・投機資金の流入などから海外投資家が危機感を示して一斉に海外資金を回収・売却・国外移動を行いました。1997年、タイの通貨バーツの価値が大きく下がりました。海外投資家は東アジア・東南アジアから次々と海外資金を回収・売却・国外移動を行いました(アジア通貨危機)。その結果、東アジア・東南アジア諸国の金融と経済は大きな爪痕を残しました。債務問題は韓国などで大きくなり、国際通貨基金(International Monetary Fund:IMF)の支援を受けました。アジア通貨危機は日本経済と日本の金融機関にも大きな爪痕を残して、不良債権問題をさらに悪化させました。
日本政府はアジア通貨危機の発生から地域的な金融協力制度[アジア通貨基金構想]を出しました。しかし、アメリカ合衆国の反対から日本政府は二国間金融支援と新宮沢構想などに切り替えて、東アジア諸国を金銭面で助けました。
バブル経済崩壊後の平成不況はずっと続きました。景気は2002年初期に少しだけ上向きました。しかし、政府が公共事業中心の従来型景気対策を抑えながら不良債権処理と規制改革を進めました。その結果、企業は引き続き大規模なリストラと雇用調整を行いました。当初、バブル崩壊後の長期停滞は「失われた10年」とよばれました。その後も日本経済の停滞が強く、「失われた20年」「失われた30年」とよばれました。
== 行政改革と日米安保の変化 ==
1990年代後半、大規模災害の対策・重大事件への対策・行政改革・財政改革・金融改革・冷戦後の日米安全保障体制見直し・政党の組み直しを行いました。1995年1月17日、阪神・淡路地域でマグニチュード7.3の<span style="color:#f29100">'''阪神・淡路大震災[兵庫県南部地震]'''</span>が起こりました。神戸市を中心に6400人以上が亡くなり、建造物・高速道路までも大きく壊れました。当地震で大都市は自然災害に弱く、都市政策・耐震化基準・防災体制の見直しをしました。また、国民は被災地に入って、避難民[被災者]の生活を支えたり、被災地の後片付けを手伝ったりしました。この活動からボランティア活動が全国に広がりました。
1995年3月20日、オウム真理教集団は東京都の地下鉄でサリンを撒いて、多数の死傷者を出しました(<span style="color:#f29100">'''地下鉄サリン事件'''</span>)。このように阪神・淡路大震災と地下鉄サリン事件・少年犯罪の殺人事件・児童虐待などが何度も報道機関で取り上げられ、旧価値観的な安全神話も崩れて国民の意識も変わりました。<gallery mode="packed" widths="200" heights="200">
ファイル:Hanshin Expressway Nada b059.jpg|阪神淡路大震災被災後
ファイル:【地下鉄サリン事件】除染を行う自衛隊員と警察官.jpg|地下鉄サリン事件
ファイル:Ryutaro Hashimoto 19960111.jpg|橋本龍太郎
ファイル:Ryuhei Kawada 20240307.jpg|川田龍平
</gallery>1995年9月、自由民主党総裁選挙から<span style="color:#f29100">'''橋本龍太郎'''</span>が選ばれました。1996年1月、村山富市首相退陣後の内閣総理大臣指名選挙で橋本龍太郎が選ばれました。橋本内閣でも自民党・社会民主党・新党さきがけの3党が引き続き協力して、政策を進めました。なお日本社会党は自衛隊・日米安全保障条約の賛成側に回り、1996年に党名を社会民主党へ変えました。
薬害エイズ問題も大きく取り上げられました。橋本龍太郎内閣厚生大臣の菅直人は薬害エイズ被害者[川田龍平など]に謝罪しました。その後、国と製薬会社と被害者が話し合い、和解しました。
1996年、新しい選挙制度で初めて衆議院議員総選挙が行われ、自由民主党の議席を大きく増やしても、過半数を下回りました。社会民主党と新党さきがけは第2次橋本内閣から国務大臣を出さなくなり、閣外協力に変わりました。その結果、自由民主党単独政権に戻りました。
橋本龍太郎内閣は冷戦後の国際変化・国内経済・政府問題を解決するため、行政・財政・金融の各分野を見直しました。行政改革は政府組織を減らしたり、類似の政府組織を1つにまとめたりして、首相などの政策案を出しやすくしました。1998年、中央省庁等改革基本法が導入されて中央省庁等改革関連法から行政改革の方針を決めました。
2001年1月、政府はこの行政改革の方針から中央省庁を1府22省庁から1府12省庁に減らしました。その結果、内閣総理大臣は各省庁へ指示を出して、政府全体の政策を進めやすくしました。2007年、防衛庁を防衛省に上げました。
★省庁再編
{| class="wikitable"
!再編前
!再編後
!再編前
!再編後
|-
|内閣官房
|内閣官房
|大蔵省
|財務省
|-
| rowspan="2" |総理府
金融再生委員会
経済企画庁
沖縄開発庁
| rowspan="2" |内閣府
|科学技術庁
文部省
|文部科学省
|-
|厚生省
労働省
|厚生労働省
|-
|国家公安委員会
|国家公安委員会
|農林水産省
|農林水産省
|-
|防衛庁
|防衛庁(省)
|通商産業省
|経済産業省
|-
|総務庁
郵政省
自治省
|総務省
| rowspan="2" |北海道開発庁
国土庁
建設省
運輸省
| rowspan="2" |国土交通省
|-
|法務省
|法務省
|-
|外務省
|外務省
|環境庁
|環境省
|}
橋本龍太郎内閣は国債の発行額を減らそうとしました。1997年4月、財政構造改革法に従って消費税率を3%から5%に引き上げて公共事業費などを減らしました。国債発行額は1970年代後半から増えても1980年代末で一度減りました。1990年代に入り、公共投資を再拡大させてから大幅な国債発行額増加に向かいました。
しかし、国民は消費税率の引き上げなどから財布の紐もきつくなり、金融機関も生き残れなくなりました。さらにアジア通貨・金融危機も起きて、日本経済は再不況になりました。やがて、銀行同士は金融不安の拡大から合併して1つの銀行になりました。1997年度の実質経済成長率は-0.4%となり、1974年度[第1次石油危機直後]以来のマイナス成長になりました。1998年度の実質経済成長率は-2%まで下がり、平成不況の大きさを改めて物語りました。
[[ファイル:Official Portrait of President William Jefferson Clinton - DPLA - 4697184146b3b6e2d6791b8f3c297476.jpg|サムネイル|221x221ピクセル|ビル・クリントン大統領]]
冷戦後、橋本龍太郎内閣は日米安全保障体制を見直しました。アメリカのビル・クリントン大統領が1996年4月に日本を訪れ、橋本首相と話し合って<span style="color:#f29100">'''日米安全保障共同宣言'''</span>を発表しました。日米安全保障共同宣言から日本とアメリカは日本防衛以外にもアジア太平洋地域の戦争防止・紛争防止まで努めていくようになりました。
自衛隊がアメリカ軍に必要物資を運ぶなどの後方支援についても、日米防衛協力のための指針を見直しました。1997年、日本政府とアメリカ合衆国政府は「新しい日米防衛協力のための指針(新ガイドライン)」を作りました。
日本が外国から直接攻撃されても直接攻撃されていなくても、日本周辺国の戦争などから日本の平和と安全に大きく関わっていたらアメリカ合衆国側も新ガイドラインに従って助け合いました(周辺事態)。ただし日本から何キロ以内というような距離だけだとアメリカ合衆国側は何もしません。
地球温暖化防止京都会議は1997年に開かれ、温室効果ガスの削減目標などを盛り込む京都議定書を採択しました。また、橋本龍太郎内閣は従来のアイヌ民族政策を大きく変えました。
アイヌ民族は1946年2月に北海道アイヌ協会を作り、アイヌ民族の権利を政府に求めました。北海道旧土人保護法からアイヌ民族用の土地[給与地]を貰っても、農地改革で買収されたくありませんでした。しかしアイヌ民族をずっと厳しく人種差別しており、アイヌ民族の一部は北海道から逃げました。その後、北海道アイヌ協会は名前を北海道ウタリ協会に変えました。[[ファイル:UPOPOY 202608.jpg|サムネイル|民族共生象徴空間ウポポイ]]1980年代、世界各地の先住民族が先住民族の権利を政府に求めました。北海道ウタリ協会は政府に北海道旧土人保護法を廃止して新しい法律を作ってほしいと求めました。1997年、国会はアイヌ民族文化をずっと守っていくためにアイヌ文化振興法を作り、北海道旧土人保護法を廃止しました。
その後もアイヌ民族政策は変わりました。2008年、国会はアイヌ民族を日本の先住民族と認めて、内閣へアイヌ民族の権利・生活・文化なども認めてほしいとお願いしました。民族団体の名前も北海道ウタリ協会から北海道アイヌ協会に戻しました。
2019(令和元)年、政府はアイヌ施策推進法で日本の「先住民族」にアイヌ民族を初めて入れました。アイヌ施策推進法から北海道アイヌ協会側も話し合いに参加して、アイヌ民族向けの新しい政策を行っています。2020年、北海道白老町に民族共生象徴空間ウポポイが開かれました。アイヌ語講座・アイヌ文化活動・アイヌ語活動が日本各地で開かれてもいます。
[[ファイル:Keizo Obuchi 19980730.jpg|サムネイル|168x168ピクセル|小渕恵三]]
1998年7月の参議院議員選挙で自由民主党議席数は大きく減らし、この結果から橋本龍太郎も内閣総理大臣を辞めました。これを受けて、<span style="color:#f29100">'''小渕恵三'''</span>が内閣総理大臣に選ばれました。小渕恵三内閣はバブル崩壊に消費税増税・金融不安・アジア通貨危機なども重なり、橋本龍太郎の財政再建路線を修正しました。小渕恵三内閣は土木工事・公共施設建築工事の大型予算を組んでその潤いから複合不況まで立て直そうとしました。その結果、政府は赤字国債発行額を再び大幅に増やしました。
1999年、小渕恵三内閣は国会法案の賛成を増やしたいから自由党〔1月〕・公明党〔10月〕も自由民主党と一緒に内閣を支えていました[自自公連立政権の開始]。その結果、自由民主党・自由党・公明党は衆議院・参議院の両方で過半数の議席を持つようになりました。小渕恵三内閣から自由民主党と公明党は2025年10月まで一緒に内閣を支えました。
1999年、小渕恵三内閣は'''新ガイドライン関連法'''をまとめました。新ガイドライン関連法の<span style="color:#f29100">'''周辺事態安全確保法'''</span>は日本周辺国家の暴走で自国の平和と安全まで守れなくなったら、自衛隊を出してアメリカ軍へ必要物資を送りました。
[[ファイル:G8 2000 group photo (kremlin.ru).jpg|サムネイル|223x223px|第26回主要国首脳会議]]
1999年、小渕恵三内閣は日の丸と君が代を国旗・国歌法へ初めて記しました。また、国民は情報公開法に従って官公庁へ資料を見せてほしいとお願いしやすくなりました。国会は憲法調査会で憲法を変えるかどうか話し合いました。小渕恵三内閣は2000年に九州・沖縄で第26回主要国首脳会議[サミット]開くと決めました。
この時期は野党も大きく変わりました。社会民主党の支持者は少しずつ減りました。新進党は議員の大量離脱から1997年末になくなりました。旧新進党の議員は違う政党[自由党・新党平和・民主党]に入りました。1996年、鳩山由紀夫・菅直人が民主党を結成しました。その後、旧新進党議員も民主党へ入りました。さらに、新党平和・黎明クラブを公明党に戻しました。
こうして、自由民主党と日本社会党が長く争う55年体制も終わりました。55年体制が終わっても、自由民主党と民主党の保守二大政党制へ繋がりませんでした。自由民主党が再び政権へ戻っても、自由党・公明党と一緒に内閣を支えていました。
== 資料出所 ==
* 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年
* 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年
* 高埜利彦、高村直助ほか編著『日本史A 改訂版』株式会社山川出版社 2016年
* 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年
* 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年
* 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年
* 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年
* 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年
* 河合敦著『世界一わかりやすい河合敦の日本史B[近・現代]の特別講座』株式会社KADOKAWA 2014年(絶版本)
* 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年
* 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年
[[カテゴリ:高等学校日本史探究|あらたなせいきのにほんへ]]
[[カテゴリ:20世紀]]
qkvaswsuk3m74zhm02ibuycyjpi7kwi
304962
304961
2026-10-21T11:07:04Z
Kwawe
68789
/* 政界再編と55年体制の終結 */ 政党の結成・解党・合流まで活発になり、各政党のどこにも入らない無党派層も増えた。
304962
wikitext
text/x-wiki
[[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>新たな世紀の日本へⅡ
引き続き「新たな世紀の日本へ」の内容を解説します。第2回目では、政界再編から小渕恵三内閣までの国内政治を見ていきます。
== 政界再編と55年体制の終結 ==
1975年、国鉄職員などは大きなストライキ「スト権スト」を行って政府側に争議権の回復を求めても失敗しました。その後、官公庁労働組合はストライキなどをあまり行わなくなりました。民間大企業の労働組合も春闘で大幅な賃上げを求めにくくなりました。
その後、民間労働組合は1つにまとまり始めました。1987年、全日本民間労働組合連合会[民間連合]をつくりました。1989年の日本労働組合総評議会[総評]解散後、元日本労働組合総評議会[総評]は全日本民間労働組合連合会[民間連合]に合流しました。その後、全日本民間労働組合連合会[民間連合]と同盟などの労働組合は1つにまとまって日本労働組合総連合会[連合]をつくりました。日本労働組合総連合会[連合]は約800万人もいました。
1994年4月、新生党の羽田孜が内閣総理大臣になりました。しかし、日本社会党は新生党と一緒に内閣を支えなくなりました。羽田孜は国会議員の賛成を集められなくなり、約2か月で首相を辞めました。1994年6月、自由民主党は元野党側の日本社会党・新党さきがけと一緒に内閣を支えました[自社さ連立政権]。日本社会党の村山富市が内閣総理大臣になり、自由民主党も政権へ戻りました。一方、非自民連立政権側の新生党・日本新党・公明党・民社党などは1つにまとまって新進党をつくりました。
政党の結成・解党・合流まで活発になり、各政党のどこにも入らない無党派層も増えました。以降は単独政党のみで内閣を支えきれなくなり、複数政党と一緒に内閣を支えました。
== バブルの崩壊 ==
プラザ合意後、大量のお金が土地購入・株式購入のために使われ、土地の値段・株価[資産価格]が次第に上がりました(資産インフレ)。1989(平成元)年、日本銀行は銀行へお金をあまり貸さなくなり、政府も土地の値段を上げすぎないようにしました(金融引き締め政策)。1990年代に入ってから、土地の値段・株価は下がり始めました。日経平均株価は、1989年12月末に3万8915円まで上がりました。しかし、その後は株式売却が増えて株価もいきなり下がり、1992年8月に1万4309円まで下がりました。土地の値段も1991年頃から下がり始め、1992年以後は日本各地で下がりました。2000年代半ばになると、大阪の一部商業地は一番高い時期の値段から約10分の1まで下がりました。こうして土地や株式の大幅な値上がりは終わり、1980年代後半のバブル経済は終わりました。
★日本の実質経済成長率の推移
[[ファイル:GDP_growth_rate_in_Japan.svg|代替文=日本の実質経済成長率の推移|フレームなし|924x924px]]
日本の景気は1991年から悪くなりました('''平成不況''')。実質経済成長率は1992年に1.3%、1993年に1%未満まで下がりました。1992年を3か月ずつに分けて見ると、4~6月は-3.3%となり、前の3か月より国内経済が小さくなりました。7~9月と10~12月もそれぞれ-0.1%となりました。第1次石油危機後に2期連続の経済縮小時期はあっても、3期連続の経済縮小は戦後初めてでした。僅かな景気回復時期も平成不況の途中にありました。しかしすぐに経済縮小となり、平成不況が長年続きました。
バブル経済当時の国民は金融機関からお金を借りて、株価と地価をより高い価格で買いました。金融機関は不動産会社にもお金を貸しました。バブル崩壊後、株価と地価が大きく下がりました。国民は株と土地を全て売っても借金を返せなくなりました。国民の借金も金融機関へ返ってこなくなりました(不良債権)。金融機関は株と土地を債権として持っており、不良債権から金融機関も大赤字になりました。
金融機関は不良債権処理にずっと追われて、さらに苦しくなりました。その結果、金融機関は不良債権の心配からお金を貸さなくなりました。企業は金融機関からお金を借りにくくなりました。国民も「この金融機関は大丈夫か」と不安を感じるようになり、金融機関はさらに苦しくなりました。その後、企業は新しい商品を作れなくなり、新しい工場を建てられなくなり、新しい機械も買えなくなりました。地価の下落・株価の下落・不良債権の増加・金融機関の経営悪化・金融機関の融資停止が全て重なって景気も次第に悪くなりました('''複合不況''')。
当時の政府と日本銀行はこれまでの不況と同じように、財政支出の拡大・低金利政策から数年で景気も回復するかもと思っていました。この誤対策は複合不況に一切効果ありません。住宅金融専門会社は1995年頃から相次いでつぶれました。1997年、北海道拓殖銀行と山一証券がつぶれました。1998年、日本債券信用銀行と日本長期信用銀行がつぶれました。このように大手金融機関がつぶれると、国民も他の金融機関も危ないのではないかと不安になりました。政府は金融システムまで止まらないように、倒産寸前の大手金融機関などに大量の公的資金を入れました。<gallery mode="nolines" widths="200" heights="200">
ファイル:The Hokkaido Takushoku Bank.JPG|旧北海道拓殖銀行本店
ファイル:Kayabacho Tower, at Shinkawa, Chuo, Tokyo (2019-01-02) 02.jpg|旧山一證券本社
ファイル:日債銀本店.jpg|旧日本債券信用銀行本店
ファイル:Shinsei Bank (head office 1).jpg|旧日本長期信用銀行本店
</gallery>1998年、小渕恵三が内閣総理大臣になりました。小渕恵三内閣も大型予算から景気を回復させしようとしました。小渕内閣が公共投資を増やして国民のお金を回そうとしても複合不況に一切効果ありません。こうして、公債発行残高は増えました。物価は1990年代後半からずっと下がり続けました(デフレスパイラル)。
[[ファイル:Unemployment Rate of Japan 1953-2009.jpg|サムネイル|395x395ピクセル|日本の失業率]]
企業は赤字なので、生き残るために経営の効率化[事業整理・人員削減・雇用調整・海外進出など]を進めました(リストラクチャリング)。中小企業の倒産も増えて、中高年労働者の解雇・中高年労働者の早期退職・新卒採用の削減から企業の人件費を大幅に減らしました。バブル景気の時期は労働者不足から「売り手市場」でも、バブル崩壊後から「買い手市場」へ変わりました。1990年代半ばから2000年代前半、企業は新卒採用を大幅に減らしました(就職氷河期)。1998年の完全失業率は4%を超え、2001年の完全失業率で5%になりました。
失業者が増えると労働者も「自分も仕事を失うかもしれない」と不安になり、個人消費を減らしました。消費者は同じような商品なら出来るだけ安い商品を選ぶようになり、ブランド品・高級品を買ってくれなくなりました。商品が売れなくなると、会社も少量生産・既存工場・既存機械だけで行うようになりました。その結果、会社の利益がさらに減って、人員削減・採用縮小もさらに進みました。株価と地価の下落から不良債権が増えて、金融機関の経営も苦しくなり、企業へお金を貸せなくなりました。
円高も国際分業も進みました。1994年、1ドルが100円を割り込みました。輸出主導・量産指向型産業[自動車・電子・家電・事務機器など]は海外で売れにくくなりました。また、バブル崩壊後の不景気から国内の購入者も減りました。生産費用を少しでも減らすため、労働者の給料が日本より低いアジア諸国[中国など]へ工場を移すようになりました[国内工場の閉鎖・国内工場の海外移転]。その結果、地元企業・周辺店舗の売り上げを減らし、失業者を増やしました(地域'''産業の空洞化''')。
繊維産業の事業所数は減り続けました。2015年の繊維産業の事業所数は1991年と比べて約4分の1になりました。国内衣料品市場のうち海外衣料品購入割合は1991年で52%になり、2017年で97%まで上がりました。多数の多国籍企業が1990年代後半に日本企業を合併したり、買収したりしました。企業が日本型雇用を取り入れていても競争力強化・経営効率化から人員削減・能力給の導入を進めました。その結果、働き方の不安定さが広がりました。
日本は技術面でも負けています。1980年代、日本企業はエレクトロニクス[電子機器]・新素材・バイオテクノロジーなどの技術でアメリカに追いつこうとしていました。1990年代から情報通信技術の活用や生産性の伸びでアメリカ合衆国に負けました。商品は日本国内で売れにくくなり、業務内容も変わっていきました。そのため、日本企業は海外企業に負けないような対策を取りました。
バブル崩壊後、銀行制度・企業制度も変えられました。「日本版金融ビッグバン」を1996年に打ち出して、銀行・証券会社などにも規制を緩めて金融の自由化・国際化を進めました。1997年の独占禁止法改正から禁止の持株会社を再度認めました。企業は持株会社からグループ内の会社をまとめ直したり、経営の進め方を変えたりしやすくなり、その後の企業再編・金融再編にもつながりました。
以前の大規模小売店舗法は店舗面積500平方メートル以上の大規模小売店舗出店条件として出店規模・営業時間・営業日数などを定めていました。しかし、大規模小売店舗は中小小売業者の近くにも自由に出店しており、中小小売業者のお客様まで消えました。そのため、政府は大規模小売店舗の立地場所を1998年から制限しました(大規模小売店舗立地法)。中小小売業者から流れすぎないように守りながら、大規模小売店舗も中小小売業者も商売を続けられるようにしました。2000年、大規模小売店舗法を廃止しました。[[ファイル:Asian Financial Crisis EN-2009-05-05.png|サムネイル|273x273px|アジア通貨危機の影響国]]企業再編・合併は政府の規制緩和から広がり、海外企業と国内企業の協力・合併も増えました。その流れから六大企業集団もまとまりました。金融業界でも銀行などが倒産したり、別の銀行と合併したりしました。その結果、日本の金融業界は三井住友グループ[旧三井系と旧住友系]・三菱UFJ[旧三菱系と三和系]・みずほグループ[旧第一勧銀系と旧富士系]の三大金融グループへまとまりました。
国内長期不況で苦しむ中、アジア諸国の経済は大成長しました。しかし短期海外資金の依存・金融機関の過剰な借入れ・企業の過剰な借入れ・金融制度の弱さ・投機資金の流入などから海外投資家が危機感を示して一斉に海外資金を回収・売却・国外移動を行いました。1997年、タイの通貨バーツの価値が大きく下がりました。海外投資家は東アジア・東南アジアから次々と海外資金を回収・売却・国外移動を行いました(アジア通貨危機)。その結果、東アジア・東南アジア諸国の金融と経済は大きな爪痕を残しました。債務問題は韓国などで大きくなり、国際通貨基金(International Monetary Fund:IMF)の支援を受けました。アジア通貨危機は日本経済と日本の金融機関にも大きな爪痕を残して、不良債権問題をさらに悪化させました。
日本政府はアジア通貨危機の発生から地域的な金融協力制度[アジア通貨基金構想]を出しました。しかし、アメリカ合衆国の反対から日本政府は二国間金融支援と新宮沢構想などに切り替えて、東アジア諸国を金銭面で助けました。
バブル経済崩壊後の平成不況はずっと続きました。景気は2002年初期に少しだけ上向きました。しかし、政府が公共事業中心の従来型景気対策を抑えながら不良債権処理と規制改革を進めました。その結果、企業は引き続き大規模なリストラと雇用調整を行いました。当初、バブル崩壊後の長期停滞は「失われた10年」とよばれました。その後も日本経済の停滞が強く、「失われた20年」「失われた30年」とよばれました。
== 行政改革と日米安保の変化 ==
1990年代後半、大規模災害の対策・重大事件への対策・行政改革・財政改革・金融改革・冷戦後の日米安全保障体制見直し・政党の組み直しを行いました。1995年1月17日、阪神・淡路地域でマグニチュード7.3の<span style="color:#f29100">'''阪神・淡路大震災[兵庫県南部地震]'''</span>が起こりました。神戸市を中心に6400人以上が亡くなり、建造物・高速道路までも大きく壊れました。当地震で大都市は自然災害に弱く、都市政策・耐震化基準・防災体制の見直しをしました。また、国民は被災地に入って、避難民[被災者]の生活を支えたり、被災地の後片付けを手伝ったりしました。この活動からボランティア活動が全国に広がりました。
1995年3月20日、オウム真理教集団は東京都の地下鉄でサリンを撒いて、多数の死傷者を出しました(<span style="color:#f29100">'''地下鉄サリン事件'''</span>)。このように阪神・淡路大震災と地下鉄サリン事件・少年犯罪の殺人事件・児童虐待などが何度も報道機関で取り上げられ、旧価値観的な安全神話も崩れて国民の意識も変わりました。<gallery mode="packed" widths="200" heights="200">
ファイル:Hanshin Expressway Nada b059.jpg|阪神淡路大震災被災後
ファイル:【地下鉄サリン事件】除染を行う自衛隊員と警察官.jpg|地下鉄サリン事件
ファイル:Ryutaro Hashimoto 19960111.jpg|橋本龍太郎
ファイル:Ryuhei Kawada 20240307.jpg|川田龍平
</gallery>1995年9月、自由民主党総裁選挙から<span style="color:#f29100">'''橋本龍太郎'''</span>が選ばれました。1996年1月、村山富市首相退陣後の内閣総理大臣指名選挙で橋本龍太郎が選ばれました。橋本内閣でも自民党・社会民主党・新党さきがけの3党が引き続き協力して、政策を進めました。なお日本社会党は自衛隊・日米安全保障条約の賛成側に回り、1996年に党名を社会民主党へ変えました。
薬害エイズ問題も大きく取り上げられました。橋本龍太郎内閣厚生大臣の菅直人は薬害エイズ被害者[川田龍平など]に謝罪しました。その後、国と製薬会社と被害者が話し合い、和解しました。
1996年、新しい選挙制度で初めて衆議院議員総選挙が行われ、自由民主党の議席を大きく増やしても、過半数を下回りました。社会民主党と新党さきがけは第2次橋本内閣から国務大臣を出さなくなり、閣外協力に変わりました。その結果、自由民主党単独政権に戻りました。
橋本龍太郎内閣は冷戦後の国際変化・国内経済・政府問題を解決するため、行政・財政・金融の各分野を見直しました。行政改革は政府組織を減らしたり、類似の政府組織を1つにまとめたりして、首相などの政策案を出しやすくしました。1998年、中央省庁等改革基本法が導入されて中央省庁等改革関連法から行政改革の方針を決めました。
2001年1月、政府はこの行政改革の方針から中央省庁を1府22省庁から1府12省庁に減らしました。その結果、内閣総理大臣は各省庁へ指示を出して、政府全体の政策を進めやすくしました。2007年、防衛庁を防衛省に上げました。
★省庁再編
{| class="wikitable"
!再編前
!再編後
!再編前
!再編後
|-
|内閣官房
|内閣官房
|大蔵省
|財務省
|-
| rowspan="2" |総理府
金融再生委員会
経済企画庁
沖縄開発庁
| rowspan="2" |内閣府
|科学技術庁
文部省
|文部科学省
|-
|厚生省
労働省
|厚生労働省
|-
|国家公安委員会
|国家公安委員会
|農林水産省
|農林水産省
|-
|防衛庁
|防衛庁(省)
|通商産業省
|経済産業省
|-
|総務庁
郵政省
自治省
|総務省
| rowspan="2" |北海道開発庁
国土庁
建設省
運輸省
| rowspan="2" |国土交通省
|-
|法務省
|法務省
|-
|外務省
|外務省
|環境庁
|環境省
|}
橋本龍太郎内閣は国債の発行額を減らそうとしました。1997年4月、財政構造改革法に従って消費税率を3%から5%に引き上げて公共事業費などを減らしました。国債発行額は1970年代後半から増えても1980年代末で一度減りました。1990年代に入り、公共投資を再拡大させてから大幅な国債発行額増加に向かいました。
しかし、国民は消費税率の引き上げなどから財布の紐もきつくなり、金融機関も生き残れなくなりました。さらにアジア通貨・金融危機も起きて、日本経済は再不況になりました。やがて、銀行同士は金融不安の拡大から合併して1つの銀行になりました。1997年度の実質経済成長率は-0.4%となり、1974年度[第1次石油危機直後]以来のマイナス成長になりました。1998年度の実質経済成長率は-2%まで下がり、平成不況の大きさを改めて物語りました。
[[ファイル:Official Portrait of President William Jefferson Clinton - DPLA - 4697184146b3b6e2d6791b8f3c297476.jpg|サムネイル|221x221ピクセル|ビル・クリントン大統領]]
冷戦後、橋本龍太郎内閣は日米安全保障体制を見直しました。アメリカのビル・クリントン大統領が1996年4月に日本を訪れ、橋本首相と話し合って<span style="color:#f29100">'''日米安全保障共同宣言'''</span>を発表しました。日米安全保障共同宣言から日本とアメリカは日本防衛以外にもアジア太平洋地域の戦争防止・紛争防止まで努めていくようになりました。
自衛隊がアメリカ軍に必要物資を運ぶなどの後方支援についても、日米防衛協力のための指針を見直しました。1997年、日本政府とアメリカ合衆国政府は「新しい日米防衛協力のための指針(新ガイドライン)」を作りました。
日本が外国から直接攻撃されても直接攻撃されていなくても、日本周辺国の戦争などから日本の平和と安全に大きく関わっていたらアメリカ合衆国側も新ガイドラインに従って助け合いました(周辺事態)。ただし日本から何キロ以内というような距離だけだとアメリカ合衆国側は何もしません。
地球温暖化防止京都会議は1997年に開かれ、温室効果ガスの削減目標などを盛り込む京都議定書を採択しました。また、橋本龍太郎内閣は従来のアイヌ民族政策を大きく変えました。
アイヌ民族は1946年2月に北海道アイヌ協会を作り、アイヌ民族の権利を政府に求めました。北海道旧土人保護法からアイヌ民族用の土地[給与地]を貰っても、農地改革で買収されたくありませんでした。しかしアイヌ民族をずっと厳しく人種差別しており、アイヌ民族の一部は北海道から逃げました。その後、北海道アイヌ協会は名前を北海道ウタリ協会に変えました。[[ファイル:UPOPOY 202608.jpg|サムネイル|民族共生象徴空間ウポポイ]]1980年代、世界各地の先住民族が先住民族の権利を政府に求めました。北海道ウタリ協会は政府に北海道旧土人保護法を廃止して新しい法律を作ってほしいと求めました。1997年、国会はアイヌ民族文化をずっと守っていくためにアイヌ文化振興法を作り、北海道旧土人保護法を廃止しました。
その後もアイヌ民族政策は変わりました。2008年、国会はアイヌ民族を日本の先住民族と認めて、内閣へアイヌ民族の権利・生活・文化なども認めてほしいとお願いしました。民族団体の名前も北海道ウタリ協会から北海道アイヌ協会に戻しました。
2019(令和元)年、政府はアイヌ施策推進法で日本の「先住民族」にアイヌ民族を初めて入れました。アイヌ施策推進法から北海道アイヌ協会側も話し合いに参加して、アイヌ民族向けの新しい政策を行っています。2020年、北海道白老町に民族共生象徴空間ウポポイが開かれました。アイヌ語講座・アイヌ文化活動・アイヌ語活動が日本各地で開かれてもいます。
[[ファイル:Keizo Obuchi 19980730.jpg|サムネイル|168x168ピクセル|小渕恵三]]
1998年7月の参議院議員選挙で自由民主党議席数は大きく減らし、この結果から橋本龍太郎も内閣総理大臣を辞めました。これを受けて、<span style="color:#f29100">'''小渕恵三'''</span>が内閣総理大臣に選ばれました。小渕恵三内閣はバブル崩壊に消費税増税・金融不安・アジア通貨危機なども重なり、橋本龍太郎の財政再建路線を修正しました。小渕恵三内閣は土木工事・公共施設建築工事の大型予算を組んでその潤いから複合不況まで立て直そうとしました。その結果、政府は赤字国債発行額を再び大幅に増やしました。
1999年、小渕恵三内閣は国会法案の賛成を増やしたいから自由党〔1月〕・公明党〔10月〕も自由民主党と一緒に内閣を支えていました[自自公連立政権の開始]。その結果、自由民主党・自由党・公明党は衆議院・参議院の両方で過半数の議席を持つようになりました。小渕恵三内閣から自由民主党と公明党は2025年10月まで一緒に内閣を支えました。
1999年、小渕恵三内閣は'''新ガイドライン関連法'''をまとめました。新ガイドライン関連法の<span style="color:#f29100">'''周辺事態安全確保法'''</span>は日本周辺国家の暴走で自国の平和と安全まで守れなくなったら、自衛隊を出してアメリカ軍へ必要物資を送りました。
[[ファイル:G8 2000 group photo (kremlin.ru).jpg|サムネイル|223x223px|第26回主要国首脳会議]]
1999年、小渕恵三内閣は日の丸と君が代を国旗・国歌法へ初めて記しました。また、国民は情報公開法に従って官公庁へ資料を見せてほしいとお願いしやすくなりました。国会は憲法調査会で憲法を変えるかどうか話し合いました。小渕恵三内閣は2000年に九州・沖縄で第26回主要国首脳会議[サミット]開くと決めました。
この時期は野党も大きく変わりました。社会民主党の支持者は少しずつ減りました。新進党は議員の大量離脱から1997年末になくなりました。旧新進党の議員は違う政党[自由党・新党平和・民主党]に入りました。1996年、鳩山由紀夫・菅直人が民主党を結成しました。その後、旧新進党議員も民主党へ入りました。さらに、新党平和・黎明クラブを公明党に戻しました。
こうして、自由民主党と日本社会党が長く争う55年体制も終わりました。55年体制が終わっても、自由民主党と民主党の保守二大政党制へ繋がりませんでした。自由民主党が再び政権へ戻っても、自由党・公明党と一緒に内閣を支えていました。
== 資料出所 ==
* 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年
* 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年
* 高埜利彦、高村直助ほか編著『日本史A 改訂版』株式会社山川出版社 2016年
* 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年
* 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年
* 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年
* 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年
* 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年
* 河合敦著『世界一わかりやすい河合敦の日本史B[近・現代]の特別講座』株式会社KADOKAWA 2014年(絶版本)
* 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年
* 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年
[[カテゴリ:高等学校日本史探究|あらたなせいきのにほんへ]]
[[カテゴリ:20世紀]]
othn0im8dr2nx2jseww4ohhcg6vt57k
304963
304962
2026-10-21T11:12:16Z
Kwawe
68789
/* 政界再編と55年体制の終結 */ 写真を追加。
304963
wikitext
text/x-wiki
[[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>新たな世紀の日本へⅡ
引き続き「新たな世紀の日本へ」の内容を解説します。第2回目では、政界再編から小渕恵三内閣までの国内政治を見ていきます。
== 政界再編と55年体制の終結 ==
[[ファイル:Sohyo Kaikan (headquarters of the Japanese Trade Union Confederation).jpg|サムネイル|220x220ピクセル|日本労働組合総連合会]]
1975年、国鉄職員などは大きなストライキ「スト権スト」を行って政府側に争議権の回復を求めても失敗しました。その後、官公庁労働組合はストライキなどをあまり行わなくなりました。民間大企業の労働組合も春闘で大幅な賃上げを求めにくくなりました。
その後、民間労働組合は1つにまとまり始めました。1987年、全日本民間労働組合連合会[民間連合]をつくりました。1989年の日本労働組合総評議会[総評]解散後、元日本労働組合総評議会[総評]は全日本民間労働組合連合会[民間連合]に合流しました。その後、全日本民間労働組合連合会[民間連合]と同盟などの労働組合は1つにまとまって日本労働組合総連合会[連合]をつくりました。日本労働組合総連合会[連合]は約800万人もいました。
1994年4月、新生党の羽田孜が内閣総理大臣になりました。しかし、日本社会党は新生党と一緒に内閣を支えなくなりました。羽田孜は国会議員の賛成を集められなくなり、約2か月で首相を辞めました。1994年6月、自由民主党は元野党側の日本社会党・新党さきがけと一緒に内閣を支えました[自社さ連立政権]。日本社会党の村山富市が内閣総理大臣になり、自由民主党も政権へ戻りました。一方、非自民連立政権側の新生党・日本新党・公明党・民社党などは1つにまとまって新進党をつくりました。
政党の結成・解党・合流まで活発になり、各政党のどこにも入らない無党派層も増えました。以降は単独政党のみで内閣を支えきれなくなり、複数政党と一緒に内閣を支えました。
== バブルの崩壊 ==
プラザ合意後、大量のお金が土地購入・株式購入のために使われ、土地の値段・株価[資産価格]が次第に上がりました(資産インフレ)。1989(平成元)年、日本銀行は銀行へお金をあまり貸さなくなり、政府も土地の値段を上げすぎないようにしました(金融引き締め政策)。1990年代に入ってから、土地の値段・株価は下がり始めました。日経平均株価は、1989年12月末に3万8915円まで上がりました。しかし、その後は株式売却が増えて株価もいきなり下がり、1992年8月に1万4309円まで下がりました。土地の値段も1991年頃から下がり始め、1992年以後は日本各地で下がりました。2000年代半ばになると、大阪の一部商業地は一番高い時期の値段から約10分の1まで下がりました。こうして土地や株式の大幅な値上がりは終わり、1980年代後半のバブル経済は終わりました。
★日本の実質経済成長率の推移
[[ファイル:GDP_growth_rate_in_Japan.svg|代替文=日本の実質経済成長率の推移|フレームなし|924x924px]]
日本の景気は1991年から悪くなりました('''平成不況''')。実質経済成長率は1992年に1.3%、1993年に1%未満まで下がりました。1992年を3か月ずつに分けて見ると、4~6月は-3.3%となり、前の3か月より国内経済が小さくなりました。7~9月と10~12月もそれぞれ-0.1%となりました。第1次石油危機後に2期連続の経済縮小時期はあっても、3期連続の経済縮小は戦後初めてでした。僅かな景気回復時期も平成不況の途中にありました。しかしすぐに経済縮小となり、平成不況が長年続きました。
バブル経済当時の国民は金融機関からお金を借りて、株価と地価をより高い価格で買いました。金融機関は不動産会社にもお金を貸しました。バブル崩壊後、株価と地価が大きく下がりました。国民は株と土地を全て売っても借金を返せなくなりました。国民の借金も金融機関へ返ってこなくなりました(不良債権)。金融機関は株と土地を債権として持っており、不良債権から金融機関も大赤字になりました。
金融機関は不良債権処理にずっと追われて、さらに苦しくなりました。その結果、金融機関は不良債権の心配からお金を貸さなくなりました。企業は金融機関からお金を借りにくくなりました。国民も「この金融機関は大丈夫か」と不安を感じるようになり、金融機関はさらに苦しくなりました。その後、企業は新しい商品を作れなくなり、新しい工場を建てられなくなり、新しい機械も買えなくなりました。地価の下落・株価の下落・不良債権の増加・金融機関の経営悪化・金融機関の融資停止が全て重なって景気も次第に悪くなりました('''複合不況''')。
当時の政府と日本銀行はこれまでの不況と同じように、財政支出の拡大・低金利政策から数年で景気も回復するかもと思っていました。この誤対策は複合不況に一切効果ありません。住宅金融専門会社は1995年頃から相次いでつぶれました。1997年、北海道拓殖銀行と山一証券がつぶれました。1998年、日本債券信用銀行と日本長期信用銀行がつぶれました。このように大手金融機関がつぶれると、国民も他の金融機関も危ないのではないかと不安になりました。政府は金融システムまで止まらないように、倒産寸前の大手金融機関などに大量の公的資金を入れました。<gallery mode="nolines" widths="200" heights="200">
ファイル:The Hokkaido Takushoku Bank.JPG|旧北海道拓殖銀行本店
ファイル:Kayabacho Tower, at Shinkawa, Chuo, Tokyo (2019-01-02) 02.jpg|旧山一證券本社
ファイル:日債銀本店.jpg|旧日本債券信用銀行本店
ファイル:Shinsei Bank (head office 1).jpg|旧日本長期信用銀行本店
</gallery>1998年、小渕恵三が内閣総理大臣になりました。小渕恵三内閣も大型予算から景気を回復させしようとしました。小渕内閣が公共投資を増やして国民のお金を回そうとしても複合不況に一切効果ありません。こうして、公債発行残高は増えました。物価は1990年代後半からずっと下がり続けました(デフレスパイラル)。
[[ファイル:Unemployment Rate of Japan 1953-2009.jpg|サムネイル|395x395ピクセル|日本の失業率]]
企業は赤字なので、生き残るために経営の効率化[事業整理・人員削減・雇用調整・海外進出など]を進めました(リストラクチャリング)。中小企業の倒産も増えて、中高年労働者の解雇・中高年労働者の早期退職・新卒採用の削減から企業の人件費を大幅に減らしました。バブル景気の時期は労働者不足から「売り手市場」でも、バブル崩壊後から「買い手市場」へ変わりました。1990年代半ばから2000年代前半、企業は新卒採用を大幅に減らしました(就職氷河期)。1998年の完全失業率は4%を超え、2001年の完全失業率で5%になりました。
失業者が増えると労働者も「自分も仕事を失うかもしれない」と不安になり、個人消費を減らしました。消費者は同じような商品なら出来るだけ安い商品を選ぶようになり、ブランド品・高級品を買ってくれなくなりました。商品が売れなくなると、会社も少量生産・既存工場・既存機械だけで行うようになりました。その結果、会社の利益がさらに減って、人員削減・採用縮小もさらに進みました。株価と地価の下落から不良債権が増えて、金融機関の経営も苦しくなり、企業へお金を貸せなくなりました。
円高も国際分業も進みました。1994年、1ドルが100円を割り込みました。輸出主導・量産指向型産業[自動車・電子・家電・事務機器など]は海外で売れにくくなりました。また、バブル崩壊後の不景気から国内の購入者も減りました。生産費用を少しでも減らすため、労働者の給料が日本より低いアジア諸国[中国など]へ工場を移すようになりました[国内工場の閉鎖・国内工場の海外移転]。その結果、地元企業・周辺店舗の売り上げを減らし、失業者を増やしました(地域'''産業の空洞化''')。
繊維産業の事業所数は減り続けました。2015年の繊維産業の事業所数は1991年と比べて約4分の1になりました。国内衣料品市場のうち海外衣料品購入割合は1991年で52%になり、2017年で97%まで上がりました。多数の多国籍企業が1990年代後半に日本企業を合併したり、買収したりしました。企業が日本型雇用を取り入れていても競争力強化・経営効率化から人員削減・能力給の導入を進めました。その結果、働き方の不安定さが広がりました。
日本は技術面でも負けています。1980年代、日本企業はエレクトロニクス[電子機器]・新素材・バイオテクノロジーなどの技術でアメリカに追いつこうとしていました。1990年代から情報通信技術の活用や生産性の伸びでアメリカ合衆国に負けました。商品は日本国内で売れにくくなり、業務内容も変わっていきました。そのため、日本企業は海外企業に負けないような対策を取りました。
バブル崩壊後、銀行制度・企業制度も変えられました。「日本版金融ビッグバン」を1996年に打ち出して、銀行・証券会社などにも規制を緩めて金融の自由化・国際化を進めました。1997年の独占禁止法改正から禁止の持株会社を再度認めました。企業は持株会社からグループ内の会社をまとめ直したり、経営の進め方を変えたりしやすくなり、その後の企業再編・金融再編にもつながりました。
以前の大規模小売店舗法は店舗面積500平方メートル以上の大規模小売店舗出店条件として出店規模・営業時間・営業日数などを定めていました。しかし、大規模小売店舗は中小小売業者の近くにも自由に出店しており、中小小売業者のお客様まで消えました。そのため、政府は大規模小売店舗の立地場所を1998年から制限しました(大規模小売店舗立地法)。中小小売業者から流れすぎないように守りながら、大規模小売店舗も中小小売業者も商売を続けられるようにしました。2000年、大規模小売店舗法を廃止しました。[[ファイル:Asian Financial Crisis EN-2009-05-05.png|サムネイル|273x273px|アジア通貨危機の影響国]]企業再編・合併は政府の規制緩和から広がり、海外企業と国内企業の協力・合併も増えました。その流れから六大企業集団もまとまりました。金融業界でも銀行などが倒産したり、別の銀行と合併したりしました。その結果、日本の金融業界は三井住友グループ[旧三井系と旧住友系]・三菱UFJ[旧三菱系と三和系]・みずほグループ[旧第一勧銀系と旧富士系]の三大金融グループへまとまりました。
国内長期不況で苦しむ中、アジア諸国の経済は大成長しました。しかし短期海外資金の依存・金融機関の過剰な借入れ・企業の過剰な借入れ・金融制度の弱さ・投機資金の流入などから海外投資家が危機感を示して一斉に海外資金を回収・売却・国外移動を行いました。1997年、タイの通貨バーツの価値が大きく下がりました。海外投資家は東アジア・東南アジアから次々と海外資金を回収・売却・国外移動を行いました(アジア通貨危機)。その結果、東アジア・東南アジア諸国の金融と経済は大きな爪痕を残しました。債務問題は韓国などで大きくなり、国際通貨基金(International Monetary Fund:IMF)の支援を受けました。アジア通貨危機は日本経済と日本の金融機関にも大きな爪痕を残して、不良債権問題をさらに悪化させました。
日本政府はアジア通貨危機の発生から地域的な金融協力制度[アジア通貨基金構想]を出しました。しかし、アメリカ合衆国の反対から日本政府は二国間金融支援と新宮沢構想などに切り替えて、東アジア諸国を金銭面で助けました。
バブル経済崩壊後の平成不況はずっと続きました。景気は2002年初期に少しだけ上向きました。しかし、政府が公共事業中心の従来型景気対策を抑えながら不良債権処理と規制改革を進めました。その結果、企業は引き続き大規模なリストラと雇用調整を行いました。当初、バブル崩壊後の長期停滞は「失われた10年」とよばれました。その後も日本経済の停滞が強く、「失われた20年」「失われた30年」とよばれました。
== 行政改革と日米安保の変化 ==
1990年代後半、大規模災害の対策・重大事件への対策・行政改革・財政改革・金融改革・冷戦後の日米安全保障体制見直し・政党の組み直しを行いました。1995年1月17日、阪神・淡路地域でマグニチュード7.3の<span style="color:#f29100">'''阪神・淡路大震災[兵庫県南部地震]'''</span>が起こりました。神戸市を中心に6400人以上が亡くなり、建造物・高速道路までも大きく壊れました。当地震で大都市は自然災害に弱く、都市政策・耐震化基準・防災体制の見直しをしました。また、国民は被災地に入って、避難民[被災者]の生活を支えたり、被災地の後片付けを手伝ったりしました。この活動からボランティア活動が全国に広がりました。
1995年3月20日、オウム真理教集団は東京都の地下鉄でサリンを撒いて、多数の死傷者を出しました(<span style="color:#f29100">'''地下鉄サリン事件'''</span>)。このように阪神・淡路大震災と地下鉄サリン事件・少年犯罪の殺人事件・児童虐待などが何度も報道機関で取り上げられ、旧価値観的な安全神話も崩れて国民の意識も変わりました。<gallery mode="packed" widths="200" heights="200">
ファイル:Hanshin Expressway Nada b059.jpg|阪神淡路大震災被災後
ファイル:【地下鉄サリン事件】除染を行う自衛隊員と警察官.jpg|地下鉄サリン事件
ファイル:Ryutaro Hashimoto 19960111.jpg|橋本龍太郎
ファイル:Ryuhei Kawada 20240307.jpg|川田龍平
</gallery>1995年9月、自由民主党総裁選挙から<span style="color:#f29100">'''橋本龍太郎'''</span>が選ばれました。1996年1月、村山富市首相退陣後の内閣総理大臣指名選挙で橋本龍太郎が選ばれました。橋本内閣でも自民党・社会民主党・新党さきがけの3党が引き続き協力して、政策を進めました。なお日本社会党は自衛隊・日米安全保障条約の賛成側に回り、1996年に党名を社会民主党へ変えました。
薬害エイズ問題も大きく取り上げられました。橋本龍太郎内閣厚生大臣の菅直人は薬害エイズ被害者[川田龍平など]に謝罪しました。その後、国と製薬会社と被害者が話し合い、和解しました。
1996年、新しい選挙制度で初めて衆議院議員総選挙が行われ、自由民主党の議席を大きく増やしても、過半数を下回りました。社会民主党と新党さきがけは第2次橋本内閣から国務大臣を出さなくなり、閣外協力に変わりました。その結果、自由民主党単独政権に戻りました。
橋本龍太郎内閣は冷戦後の国際変化・国内経済・政府問題を解決するため、行政・財政・金融の各分野を見直しました。行政改革は政府組織を減らしたり、類似の政府組織を1つにまとめたりして、首相などの政策案を出しやすくしました。1998年、中央省庁等改革基本法が導入されて中央省庁等改革関連法から行政改革の方針を決めました。
2001年1月、政府はこの行政改革の方針から中央省庁を1府22省庁から1府12省庁に減らしました。その結果、内閣総理大臣は各省庁へ指示を出して、政府全体の政策を進めやすくしました。2007年、防衛庁を防衛省に上げました。
★省庁再編
{| class="wikitable"
!再編前
!再編後
!再編前
!再編後
|-
|内閣官房
|内閣官房
|大蔵省
|財務省
|-
| rowspan="2" |総理府
金融再生委員会
経済企画庁
沖縄開発庁
| rowspan="2" |内閣府
|科学技術庁
文部省
|文部科学省
|-
|厚生省
労働省
|厚生労働省
|-
|国家公安委員会
|国家公安委員会
|農林水産省
|農林水産省
|-
|防衛庁
|防衛庁(省)
|通商産業省
|経済産業省
|-
|総務庁
郵政省
自治省
|総務省
| rowspan="2" |北海道開発庁
国土庁
建設省
運輸省
| rowspan="2" |国土交通省
|-
|法務省
|法務省
|-
|外務省
|外務省
|環境庁
|環境省
|}
橋本龍太郎内閣は国債の発行額を減らそうとしました。1997年4月、財政構造改革法に従って消費税率を3%から5%に引き上げて公共事業費などを減らしました。国債発行額は1970年代後半から増えても1980年代末で一度減りました。1990年代に入り、公共投資を再拡大させてから大幅な国債発行額増加に向かいました。
しかし、国民は消費税率の引き上げなどから財布の紐もきつくなり、金融機関も生き残れなくなりました。さらにアジア通貨・金融危機も起きて、日本経済は再不況になりました。やがて、銀行同士は金融不安の拡大から合併して1つの銀行になりました。1997年度の実質経済成長率は-0.4%となり、1974年度[第1次石油危機直後]以来のマイナス成長になりました。1998年度の実質経済成長率は-2%まで下がり、平成不況の大きさを改めて物語りました。
[[ファイル:Official Portrait of President William Jefferson Clinton - DPLA - 4697184146b3b6e2d6791b8f3c297476.jpg|サムネイル|221x221ピクセル|ビル・クリントン大統領]]
冷戦後、橋本龍太郎内閣は日米安全保障体制を見直しました。アメリカのビル・クリントン大統領が1996年4月に日本を訪れ、橋本首相と話し合って<span style="color:#f29100">'''日米安全保障共同宣言'''</span>を発表しました。日米安全保障共同宣言から日本とアメリカは日本防衛以外にもアジア太平洋地域の戦争防止・紛争防止まで努めていくようになりました。
自衛隊がアメリカ軍に必要物資を運ぶなどの後方支援についても、日米防衛協力のための指針を見直しました。1997年、日本政府とアメリカ合衆国政府は「新しい日米防衛協力のための指針(新ガイドライン)」を作りました。
日本が外国から直接攻撃されても直接攻撃されていなくても、日本周辺国の戦争などから日本の平和と安全に大きく関わっていたらアメリカ合衆国側も新ガイドラインに従って助け合いました(周辺事態)。ただし日本から何キロ以内というような距離だけだとアメリカ合衆国側は何もしません。
地球温暖化防止京都会議は1997年に開かれ、温室効果ガスの削減目標などを盛り込む京都議定書を採択しました。また、橋本龍太郎内閣は従来のアイヌ民族政策を大きく変えました。
アイヌ民族は1946年2月に北海道アイヌ協会を作り、アイヌ民族の権利を政府に求めました。北海道旧土人保護法からアイヌ民族用の土地[給与地]を貰っても、農地改革で買収されたくありませんでした。しかしアイヌ民族をずっと厳しく人種差別しており、アイヌ民族の一部は北海道から逃げました。その後、北海道アイヌ協会は名前を北海道ウタリ協会に変えました。[[ファイル:UPOPOY 202608.jpg|サムネイル|民族共生象徴空間ウポポイ]]1980年代、世界各地の先住民族が先住民族の権利を政府に求めました。北海道ウタリ協会は政府に北海道旧土人保護法を廃止して新しい法律を作ってほしいと求めました。1997年、国会はアイヌ民族文化をずっと守っていくためにアイヌ文化振興法を作り、北海道旧土人保護法を廃止しました。
その後もアイヌ民族政策は変わりました。2008年、国会はアイヌ民族を日本の先住民族と認めて、内閣へアイヌ民族の権利・生活・文化なども認めてほしいとお願いしました。民族団体の名前も北海道ウタリ協会から北海道アイヌ協会に戻しました。
2019(令和元)年、政府はアイヌ施策推進法で日本の「先住民族」にアイヌ民族を初めて入れました。アイヌ施策推進法から北海道アイヌ協会側も話し合いに参加して、アイヌ民族向けの新しい政策を行っています。2020年、北海道白老町に民族共生象徴空間ウポポイが開かれました。アイヌ語講座・アイヌ文化活動・アイヌ語活動が日本各地で開かれてもいます。
[[ファイル:Keizo Obuchi 19980730.jpg|サムネイル|168x168ピクセル|小渕恵三]]
1998年7月の参議院議員選挙で自由民主党議席数は大きく減らし、この結果から橋本龍太郎も内閣総理大臣を辞めました。これを受けて、<span style="color:#f29100">'''小渕恵三'''</span>が内閣総理大臣に選ばれました。小渕恵三内閣はバブル崩壊に消費税増税・金融不安・アジア通貨危機なども重なり、橋本龍太郎の財政再建路線を修正しました。小渕恵三内閣は土木工事・公共施設建築工事の大型予算を組んでその潤いから複合不況まで立て直そうとしました。その結果、政府は赤字国債発行額を再び大幅に増やしました。
1999年、小渕恵三内閣は国会法案の賛成を増やしたいから自由党〔1月〕・公明党〔10月〕も自由民主党と一緒に内閣を支えていました[自自公連立政権の開始]。その結果、自由民主党・自由党・公明党は衆議院・参議院の両方で過半数の議席を持つようになりました。小渕恵三内閣から自由民主党と公明党は2025年10月まで一緒に内閣を支えました。
1999年、小渕恵三内閣は'''新ガイドライン関連法'''をまとめました。新ガイドライン関連法の<span style="color:#f29100">'''周辺事態安全確保法'''</span>は日本周辺国家の暴走で自国の平和と安全まで守れなくなったら、自衛隊を出してアメリカ軍へ必要物資を送りました。
[[ファイル:G8 2000 group photo (kremlin.ru).jpg|サムネイル|223x223px|第26回主要国首脳会議]]
1999年、小渕恵三内閣は日の丸と君が代を国旗・国歌法へ初めて記しました。また、国民は情報公開法に従って官公庁へ資料を見せてほしいとお願いしやすくなりました。国会は憲法調査会で憲法を変えるかどうか話し合いました。小渕恵三内閣は2000年に九州・沖縄で第26回主要国首脳会議[サミット]開くと決めました。
この時期は野党も大きく変わりました。社会民主党の支持者は少しずつ減りました。新進党は議員の大量離脱から1997年末になくなりました。旧新進党の議員は違う政党[自由党・新党平和・民主党]に入りました。1996年、鳩山由紀夫・菅直人が民主党を結成しました。その後、旧新進党議員も民主党へ入りました。さらに、新党平和・黎明クラブを公明党に戻しました。
こうして、自由民主党と日本社会党が長く争う55年体制も終わりました。55年体制が終わっても、自由民主党と民主党の保守二大政党制へ繋がりませんでした。自由民主党が再び政権へ戻っても、自由党・公明党と一緒に内閣を支えていました。
== 資料出所 ==
* 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年
* 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年
* 高埜利彦、高村直助ほか編著『日本史A 改訂版』株式会社山川出版社 2016年
* 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年
* 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年
* 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年
* 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年
* 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年
* 河合敦著『世界一わかりやすい河合敦の日本史B[近・現代]の特別講座』株式会社KADOKAWA 2014年(絶版本)
* 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年
* 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年
[[カテゴリ:高等学校日本史探究|あらたなせいきのにほんへ]]
[[カテゴリ:20世紀]]
22d33a2ond2e6y8y3lrsswpqbw5ke8t
304964
304963
2026-10-21T11:17:36Z
Kwawe
68789
/* 政界再編と55年体制の終結 */ 重要用語を色太字化。
304964
wikitext
text/x-wiki
[[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>新たな世紀の日本へⅡ
引き続き「新たな世紀の日本へ」の内容を解説します。第2回目では、政界再編から小渕恵三内閣までの国内政治を見ていきます。
== 政界再編と55年体制の終結 ==
[[ファイル:Sohyo Kaikan (headquarters of the Japanese Trade Union Confederation).jpg|サムネイル|220x220ピクセル|日本労働組合総連合会]]
1975年、国鉄職員などは大きなストライキ「スト権スト」を行って政府側に争議権の回復を求めても失敗しました。その後、官公庁労働組合はストライキなどをあまり行わなくなりました。民間大企業の労働組合も春闘で大幅な賃上げを求めにくくなりました。
その後、民間労働組合は1つにまとまり始めました。1987年、全日本民間労働組合連合会[民間連合]をつくりました。1989年の日本労働組合総評議会[総評]解散後、元日本労働組合総評議会[総評]は全日本民間労働組合連合会[民間連合]に合流しました。その後、全日本民間労働組合連合会[民間連合]と同盟などの労働組合は1つにまとまって<span style="color:#f29100">'''日本労働組合総連合会[連合]'''</span>をつくりました。日本労働組合総連合会[連合]は約800万人もいました。
1994年4月、新生党の羽田孜が内閣総理大臣になりました。しかし、日本社会党は新生党と一緒に内閣を支えなくなりました。羽田孜は国会議員の賛成を集められなくなり、約2か月で首相を辞めました。1994年6月、自由民主党は元野党側の日本社会党・新党さきがけと一緒に内閣を支えました[自社さ連立政権]。日本社会党の村山富市が内閣総理大臣になり、自由民主党も政権へ戻りました。一方、非自民連立政権側の新生党・日本新党・公明党・民社党などは1つにまとまって新進党をつくりました。
政党の結成・解党・合流まで活発になり、各政党のどこにも入らない無党派層も増えました。以降は単独政党のみで内閣を支えきれなくなり、複数政党と一緒に内閣を支えました。
== バブルの崩壊 ==
プラザ合意後、大量のお金が土地購入・株式購入のために使われ、土地の値段・株価[資産価格]が次第に上がりました(資産インフレ)。1989(平成元)年、日本銀行は銀行へお金をあまり貸さなくなり、政府も土地の値段を上げすぎないようにしました(金融引き締め政策)。1990年代に入ってから、土地の値段・株価は下がり始めました。日経平均株価は、1989年12月末に3万8915円まで上がりました。しかし、その後は株式売却が増えて株価もいきなり下がり、1992年8月に1万4309円まで下がりました。土地の値段も1991年頃から下がり始め、1992年以後は日本各地で下がりました。2000年代半ばになると、大阪の一部商業地は一番高い時期の値段から約10分の1まで下がりました。こうして土地や株式の大幅な値上がりは終わり、1980年代後半のバブル経済は終わりました。
★日本の実質経済成長率の推移
[[ファイル:GDP_growth_rate_in_Japan.svg|代替文=日本の実質経済成長率の推移|フレームなし|924x924px]]
日本の景気は1991年から悪くなりました('''平成不況''')。実質経済成長率は1992年に1.3%、1993年に1%未満まで下がりました。1992年を3か月ずつに分けて見ると、4~6月は-3.3%となり、前の3か月より国内経済が小さくなりました。7~9月と10~12月もそれぞれ-0.1%となりました。第1次石油危機後に2期連続の経済縮小時期はあっても、3期連続の経済縮小は戦後初めてでした。僅かな景気回復時期も平成不況の途中にありました。しかしすぐに経済縮小となり、平成不況が長年続きました。
バブル経済当時の国民は金融機関からお金を借りて、株価と地価をより高い価格で買いました。金融機関は不動産会社にもお金を貸しました。バブル崩壊後、株価と地価が大きく下がりました。国民は株と土地を全て売っても借金を返せなくなりました。国民の借金も金融機関へ返ってこなくなりました(不良債権)。金融機関は株と土地を債権として持っており、不良債権から金融機関も大赤字になりました。
金融機関は不良債権処理にずっと追われて、さらに苦しくなりました。その結果、金融機関は不良債権の心配からお金を貸さなくなりました。企業は金融機関からお金を借りにくくなりました。国民も「この金融機関は大丈夫か」と不安を感じるようになり、金融機関はさらに苦しくなりました。その後、企業は新しい商品を作れなくなり、新しい工場を建てられなくなり、新しい機械も買えなくなりました。地価の下落・株価の下落・不良債権の増加・金融機関の経営悪化・金融機関の融資停止が全て重なって景気も次第に悪くなりました('''複合不況''')。
当時の政府と日本銀行はこれまでの不況と同じように、財政支出の拡大・低金利政策から数年で景気も回復するかもと思っていました。この誤対策は複合不況に一切効果ありません。住宅金融専門会社は1995年頃から相次いでつぶれました。1997年、北海道拓殖銀行と山一証券がつぶれました。1998年、日本債券信用銀行と日本長期信用銀行がつぶれました。このように大手金融機関がつぶれると、国民も他の金融機関も危ないのではないかと不安になりました。政府は金融システムまで止まらないように、倒産寸前の大手金融機関などに大量の公的資金を入れました。<gallery mode="nolines" widths="200" heights="200">
ファイル:The Hokkaido Takushoku Bank.JPG|旧北海道拓殖銀行本店
ファイル:Kayabacho Tower, at Shinkawa, Chuo, Tokyo (2019-01-02) 02.jpg|旧山一證券本社
ファイル:日債銀本店.jpg|旧日本債券信用銀行本店
ファイル:Shinsei Bank (head office 1).jpg|旧日本長期信用銀行本店
</gallery>1998年、小渕恵三が内閣総理大臣になりました。小渕恵三内閣も大型予算から景気を回復させしようとしました。小渕内閣が公共投資を増やして国民のお金を回そうとしても複合不況に一切効果ありません。こうして、公債発行残高は増えました。物価は1990年代後半からずっと下がり続けました(デフレスパイラル)。
[[ファイル:Unemployment Rate of Japan 1953-2009.jpg|サムネイル|395x395ピクセル|日本の失業率]]
企業は赤字なので、生き残るために経営の効率化[事業整理・人員削減・雇用調整・海外進出など]を進めました(リストラクチャリング)。中小企業の倒産も増えて、中高年労働者の解雇・中高年労働者の早期退職・新卒採用の削減から企業の人件費を大幅に減らしました。バブル景気の時期は労働者不足から「売り手市場」でも、バブル崩壊後から「買い手市場」へ変わりました。1990年代半ばから2000年代前半、企業は新卒採用を大幅に減らしました(就職氷河期)。1998年の完全失業率は4%を超え、2001年の完全失業率で5%になりました。
失業者が増えると労働者も「自分も仕事を失うかもしれない」と不安になり、個人消費を減らしました。消費者は同じような商品なら出来るだけ安い商品を選ぶようになり、ブランド品・高級品を買ってくれなくなりました。商品が売れなくなると、会社も少量生産・既存工場・既存機械だけで行うようになりました。その結果、会社の利益がさらに減って、人員削減・採用縮小もさらに進みました。株価と地価の下落から不良債権が増えて、金融機関の経営も苦しくなり、企業へお金を貸せなくなりました。
円高も国際分業も進みました。1994年、1ドルが100円を割り込みました。輸出主導・量産指向型産業[自動車・電子・家電・事務機器など]は海外で売れにくくなりました。また、バブル崩壊後の不景気から国内の購入者も減りました。生産費用を少しでも減らすため、労働者の給料が日本より低いアジア諸国[中国など]へ工場を移すようになりました[国内工場の閉鎖・国内工場の海外移転]。その結果、地元企業・周辺店舗の売り上げを減らし、失業者を増やしました(地域'''産業の空洞化''')。
繊維産業の事業所数は減り続けました。2015年の繊維産業の事業所数は1991年と比べて約4分の1になりました。国内衣料品市場のうち海外衣料品購入割合は1991年で52%になり、2017年で97%まで上がりました。多数の多国籍企業が1990年代後半に日本企業を合併したり、買収したりしました。企業が日本型雇用を取り入れていても競争力強化・経営効率化から人員削減・能力給の導入を進めました。その結果、働き方の不安定さが広がりました。
日本は技術面でも負けています。1980年代、日本企業はエレクトロニクス[電子機器]・新素材・バイオテクノロジーなどの技術でアメリカに追いつこうとしていました。1990年代から情報通信技術の活用や生産性の伸びでアメリカ合衆国に負けました。商品は日本国内で売れにくくなり、業務内容も変わっていきました。そのため、日本企業は海外企業に負けないような対策を取りました。
バブル崩壊後、銀行制度・企業制度も変えられました。「日本版金融ビッグバン」を1996年に打ち出して、銀行・証券会社などにも規制を緩めて金融の自由化・国際化を進めました。1997年の独占禁止法改正から禁止の持株会社を再度認めました。企業は持株会社からグループ内の会社をまとめ直したり、経営の進め方を変えたりしやすくなり、その後の企業再編・金融再編にもつながりました。
以前の大規模小売店舗法は店舗面積500平方メートル以上の大規模小売店舗出店条件として出店規模・営業時間・営業日数などを定めていました。しかし、大規模小売店舗は中小小売業者の近くにも自由に出店しており、中小小売業者のお客様まで消えました。そのため、政府は大規模小売店舗の立地場所を1998年から制限しました(大規模小売店舗立地法)。中小小売業者から流れすぎないように守りながら、大規模小売店舗も中小小売業者も商売を続けられるようにしました。2000年、大規模小売店舗法を廃止しました。[[ファイル:Asian Financial Crisis EN-2009-05-05.png|サムネイル|273x273px|アジア通貨危機の影響国]]企業再編・合併は政府の規制緩和から広がり、海外企業と国内企業の協力・合併も増えました。その流れから六大企業集団もまとまりました。金融業界でも銀行などが倒産したり、別の銀行と合併したりしました。その結果、日本の金融業界は三井住友グループ[旧三井系と旧住友系]・三菱UFJ[旧三菱系と三和系]・みずほグループ[旧第一勧銀系と旧富士系]の三大金融グループへまとまりました。
国内長期不況で苦しむ中、アジア諸国の経済は大成長しました。しかし短期海外資金の依存・金融機関の過剰な借入れ・企業の過剰な借入れ・金融制度の弱さ・投機資金の流入などから海外投資家が危機感を示して一斉に海外資金を回収・売却・国外移動を行いました。1997年、タイの通貨バーツの価値が大きく下がりました。海外投資家は東アジア・東南アジアから次々と海外資金を回収・売却・国外移動を行いました(アジア通貨危機)。その結果、東アジア・東南アジア諸国の金融と経済は大きな爪痕を残しました。債務問題は韓国などで大きくなり、国際通貨基金(International Monetary Fund:IMF)の支援を受けました。アジア通貨危機は日本経済と日本の金融機関にも大きな爪痕を残して、不良債権問題をさらに悪化させました。
日本政府はアジア通貨危機の発生から地域的な金融協力制度[アジア通貨基金構想]を出しました。しかし、アメリカ合衆国の反対から日本政府は二国間金融支援と新宮沢構想などに切り替えて、東アジア諸国を金銭面で助けました。
バブル経済崩壊後の平成不況はずっと続きました。景気は2002年初期に少しだけ上向きました。しかし、政府が公共事業中心の従来型景気対策を抑えながら不良債権処理と規制改革を進めました。その結果、企業は引き続き大規模なリストラと雇用調整を行いました。当初、バブル崩壊後の長期停滞は「失われた10年」とよばれました。その後も日本経済の停滞が強く、「失われた20年」「失われた30年」とよばれました。
== 行政改革と日米安保の変化 ==
1990年代後半、大規模災害の対策・重大事件への対策・行政改革・財政改革・金融改革・冷戦後の日米安全保障体制見直し・政党の組み直しを行いました。1995年1月17日、阪神・淡路地域でマグニチュード7.3の<span style="color:#f29100">'''阪神・淡路大震災[兵庫県南部地震]'''</span>が起こりました。神戸市を中心に6400人以上が亡くなり、建造物・高速道路までも大きく壊れました。当地震で大都市は自然災害に弱く、都市政策・耐震化基準・防災体制の見直しをしました。また、国民は被災地に入って、避難民[被災者]の生活を支えたり、被災地の後片付けを手伝ったりしました。この活動からボランティア活動が全国に広がりました。
1995年3月20日、オウム真理教集団は東京都の地下鉄でサリンを撒いて、多数の死傷者を出しました(<span style="color:#f29100">'''地下鉄サリン事件'''</span>)。このように阪神・淡路大震災と地下鉄サリン事件・少年犯罪の殺人事件・児童虐待などが何度も報道機関で取り上げられ、旧価値観的な安全神話も崩れて国民の意識も変わりました。<gallery mode="packed" widths="200" heights="200">
ファイル:Hanshin Expressway Nada b059.jpg|阪神淡路大震災被災後
ファイル:【地下鉄サリン事件】除染を行う自衛隊員と警察官.jpg|地下鉄サリン事件
ファイル:Ryutaro Hashimoto 19960111.jpg|橋本龍太郎
ファイル:Ryuhei Kawada 20240307.jpg|川田龍平
</gallery>1995年9月、自由民主党総裁選挙から<span style="color:#f29100">'''橋本龍太郎'''</span>が選ばれました。1996年1月、村山富市首相退陣後の内閣総理大臣指名選挙で橋本龍太郎が選ばれました。橋本内閣でも自民党・社会民主党・新党さきがけの3党が引き続き協力して、政策を進めました。なお日本社会党は自衛隊・日米安全保障条約の賛成側に回り、1996年に党名を社会民主党へ変えました。
薬害エイズ問題も大きく取り上げられました。橋本龍太郎内閣厚生大臣の菅直人は薬害エイズ被害者[川田龍平など]に謝罪しました。その後、国と製薬会社と被害者が話し合い、和解しました。
1996年、新しい選挙制度で初めて衆議院議員総選挙が行われ、自由民主党の議席を大きく増やしても、過半数を下回りました。社会民主党と新党さきがけは第2次橋本内閣から国務大臣を出さなくなり、閣外協力に変わりました。その結果、自由民主党単独政権に戻りました。
橋本龍太郎内閣は冷戦後の国際変化・国内経済・政府問題を解決するため、行政・財政・金融の各分野を見直しました。行政改革は政府組織を減らしたり、類似の政府組織を1つにまとめたりして、首相などの政策案を出しやすくしました。1998年、中央省庁等改革基本法が導入されて中央省庁等改革関連法から行政改革の方針を決めました。
2001年1月、政府はこの行政改革の方針から中央省庁を1府22省庁から1府12省庁に減らしました。その結果、内閣総理大臣は各省庁へ指示を出して、政府全体の政策を進めやすくしました。2007年、防衛庁を防衛省に上げました。
★省庁再編
{| class="wikitable"
!再編前
!再編後
!再編前
!再編後
|-
|内閣官房
|内閣官房
|大蔵省
|財務省
|-
| rowspan="2" |総理府
金融再生委員会
経済企画庁
沖縄開発庁
| rowspan="2" |内閣府
|科学技術庁
文部省
|文部科学省
|-
|厚生省
労働省
|厚生労働省
|-
|国家公安委員会
|国家公安委員会
|農林水産省
|農林水産省
|-
|防衛庁
|防衛庁(省)
|通商産業省
|経済産業省
|-
|総務庁
郵政省
自治省
|総務省
| rowspan="2" |北海道開発庁
国土庁
建設省
運輸省
| rowspan="2" |国土交通省
|-
|法務省
|法務省
|-
|外務省
|外務省
|環境庁
|環境省
|}
橋本龍太郎内閣は国債の発行額を減らそうとしました。1997年4月、財政構造改革法に従って消費税率を3%から5%に引き上げて公共事業費などを減らしました。国債発行額は1970年代後半から増えても1980年代末で一度減りました。1990年代に入り、公共投資を再拡大させてから大幅な国債発行額増加に向かいました。
しかし、国民は消費税率の引き上げなどから財布の紐もきつくなり、金融機関も生き残れなくなりました。さらにアジア通貨・金融危機も起きて、日本経済は再不況になりました。やがて、銀行同士は金融不安の拡大から合併して1つの銀行になりました。1997年度の実質経済成長率は-0.4%となり、1974年度[第1次石油危機直後]以来のマイナス成長になりました。1998年度の実質経済成長率は-2%まで下がり、平成不況の大きさを改めて物語りました。
[[ファイル:Official Portrait of President William Jefferson Clinton - DPLA - 4697184146b3b6e2d6791b8f3c297476.jpg|サムネイル|221x221ピクセル|ビル・クリントン大統領]]
冷戦後、橋本龍太郎内閣は日米安全保障体制を見直しました。アメリカのビル・クリントン大統領が1996年4月に日本を訪れ、橋本首相と話し合って<span style="color:#f29100">'''日米安全保障共同宣言'''</span>を発表しました。日米安全保障共同宣言から日本とアメリカは日本防衛以外にもアジア太平洋地域の戦争防止・紛争防止まで努めていくようになりました。
自衛隊がアメリカ軍に必要物資を運ぶなどの後方支援についても、日米防衛協力のための指針を見直しました。1997年、日本政府とアメリカ合衆国政府は「新しい日米防衛協力のための指針(新ガイドライン)」を作りました。
日本が外国から直接攻撃されても直接攻撃されていなくても、日本周辺国の戦争などから日本の平和と安全に大きく関わっていたらアメリカ合衆国側も新ガイドラインに従って助け合いました(周辺事態)。ただし日本から何キロ以内というような距離だけだとアメリカ合衆国側は何もしません。
地球温暖化防止京都会議は1997年に開かれ、温室効果ガスの削減目標などを盛り込む京都議定書を採択しました。また、橋本龍太郎内閣は従来のアイヌ民族政策を大きく変えました。
アイヌ民族は1946年2月に北海道アイヌ協会を作り、アイヌ民族の権利を政府に求めました。北海道旧土人保護法からアイヌ民族用の土地[給与地]を貰っても、農地改革で買収されたくありませんでした。しかしアイヌ民族をずっと厳しく人種差別しており、アイヌ民族の一部は北海道から逃げました。その後、北海道アイヌ協会は名前を北海道ウタリ協会に変えました。[[ファイル:UPOPOY 202608.jpg|サムネイル|民族共生象徴空間ウポポイ]]1980年代、世界各地の先住民族が先住民族の権利を政府に求めました。北海道ウタリ協会は政府に北海道旧土人保護法を廃止して新しい法律を作ってほしいと求めました。1997年、国会はアイヌ民族文化をずっと守っていくためにアイヌ文化振興法を作り、北海道旧土人保護法を廃止しました。
その後もアイヌ民族政策は変わりました。2008年、国会はアイヌ民族を日本の先住民族と認めて、内閣へアイヌ民族の権利・生活・文化なども認めてほしいとお願いしました。民族団体の名前も北海道ウタリ協会から北海道アイヌ協会に戻しました。
2019(令和元)年、政府はアイヌ施策推進法で日本の「先住民族」にアイヌ民族を初めて入れました。アイヌ施策推進法から北海道アイヌ協会側も話し合いに参加して、アイヌ民族向けの新しい政策を行っています。2020年、北海道白老町に民族共生象徴空間ウポポイが開かれました。アイヌ語講座・アイヌ文化活動・アイヌ語活動が日本各地で開かれてもいます。
[[ファイル:Keizo Obuchi 19980730.jpg|サムネイル|168x168ピクセル|小渕恵三]]
1998年7月の参議院議員選挙で自由民主党議席数は大きく減らし、この結果から橋本龍太郎も内閣総理大臣を辞めました。これを受けて、<span style="color:#f29100">'''小渕恵三'''</span>が内閣総理大臣に選ばれました。小渕恵三内閣はバブル崩壊に消費税増税・金融不安・アジア通貨危機なども重なり、橋本龍太郎の財政再建路線を修正しました。小渕恵三内閣は土木工事・公共施設建築工事の大型予算を組んでその潤いから複合不況まで立て直そうとしました。その結果、政府は赤字国債発行額を再び大幅に増やしました。
1999年、小渕恵三内閣は国会法案の賛成を増やしたいから自由党〔1月〕・公明党〔10月〕も自由民主党と一緒に内閣を支えていました[自自公連立政権の開始]。その結果、自由民主党・自由党・公明党は衆議院・参議院の両方で過半数の議席を持つようになりました。小渕恵三内閣から自由民主党と公明党は2025年10月まで一緒に内閣を支えました。
1999年、小渕恵三内閣は'''新ガイドライン関連法'''をまとめました。新ガイドライン関連法の<span style="color:#f29100">'''周辺事態安全確保法'''</span>は日本周辺国家の暴走で自国の平和と安全まで守れなくなったら、自衛隊を出してアメリカ軍へ必要物資を送りました。
[[ファイル:G8 2000 group photo (kremlin.ru).jpg|サムネイル|223x223px|第26回主要国首脳会議]]
1999年、小渕恵三内閣は日の丸と君が代を国旗・国歌法へ初めて記しました。また、国民は情報公開法に従って官公庁へ資料を見せてほしいとお願いしやすくなりました。国会は憲法調査会で憲法を変えるかどうか話し合いました。小渕恵三内閣は2000年に九州・沖縄で第26回主要国首脳会議[サミット]開くと決めました。
この時期は野党も大きく変わりました。社会民主党の支持者は少しずつ減りました。新進党は議員の大量離脱から1997年末になくなりました。旧新進党の議員は違う政党[自由党・新党平和・民主党]に入りました。1996年、鳩山由紀夫・菅直人が民主党を結成しました。その後、旧新進党議員も民主党へ入りました。さらに、新党平和・黎明クラブを公明党に戻しました。
こうして、自由民主党と日本社会党が長く争う55年体制も終わりました。55年体制が終わっても、自由民主党と民主党の保守二大政党制へ繋がりませんでした。自由民主党が再び政権へ戻っても、自由党・公明党と一緒に内閣を支えていました。
== 資料出所 ==
* 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年
* 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年
* 高埜利彦、高村直助ほか編著『日本史A 改訂版』株式会社山川出版社 2016年
* 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年
* 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年
* 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年
* 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年
* 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年
* 河合敦著『世界一わかりやすい河合敦の日本史B[近・現代]の特別講座』株式会社KADOKAWA 2014年(絶版本)
* 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年
* 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年
[[カテゴリ:高等学校日本史探究|あらたなせいきのにほんへ]]
[[カテゴリ:20世紀]]
fnpw0q7elc8jxroscwr9ikpzg6xdsb1
304965
304964
2026-10-21T11:33:19Z
Kwawe
68789
/* 政界再編と55年体制の終結 */ 一方、日本労働組合総連合会[連合]の敵側は全国労働組合総連合[全労連]をつくった。日本労働組合総連合会[連合]と全国労働組合総連合[全労連]の敵側は全国労働組合連絡協議会[全労協]をつくった。
304965
wikitext
text/x-wiki
[[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>新たな世紀の日本へⅡ
引き続き「新たな世紀の日本へ」の内容を解説します。第2回目では、政界再編から小渕恵三内閣までの国内政治を見ていきます。
== 政界再編と55年体制の終結 ==
[[ファイル:Sohyo Kaikan (headquarters of the Japanese Trade Union Confederation).jpg|サムネイル|220x220ピクセル|日本労働組合総連合会]]
1975年、国鉄職員などは大きなストライキ「スト権スト」を行って政府側に争議権の回復を求めても失敗しました。その後、官公庁労働組合はストライキなどをあまり行わなくなりました。民間大企業の労働組合も春闘で大幅な賃上げを求めにくくなりました。
その後、民間労働組合は1つにまとまり始めました。1987年、全日本民間労働組合連合会[民間連合]をつくりました。1989年の日本労働組合総評議会[総評]解散後、元日本労働組合総評議会[総評]は全日本民間労働組合連合会[民間連合]に合流しました。その後、全日本民間労働組合連合会[民間連合]と同盟などの労働組合は1つにまとまって<span style="color:#f29100">'''日本労働組合総連合会[連合]'''</span>をつくりました。約800万人が日本労働組合総連合会[連合]に入りました。
一方、日本労働組合総連合会[連合]の敵側は全国労働組合総連合[全労連]をつくりました。約140万人が全国労働組合総連合[全労連]に入りました。さらに日本労働組合総連合会[連合]と全国労働組合総連合[全労連]の敵側は全国労働組合連絡協議会[全労協]をつくりました。こうして、野党支持側の労働組合は日本労働組合総連合会[連合]・全国労働組合総連合[全労連]・全国労働組合連絡協議会[全労協]に分かれました。
1994年4月、新生党の羽田孜が内閣総理大臣になりました。しかし、日本社会党は新生党と一緒に内閣を支えなくなりました。羽田孜は国会議員の賛成を集められなくなり、約2か月で首相を辞めました。1994年6月、自由民主党は元野党側の日本社会党・新党さきがけと一緒に内閣を支えました[自社さ連立政権]。日本社会党の村山富市が内閣総理大臣になり、自由民主党も政権へ戻りました。一方、非自民連立政権側の新生党・日本新党・公明党・民社党などは1つにまとまって新進党をつくりました。
政党の結成・解党・合流まで活発になり、各政党のどこにも入らない無党派層も増えました。以降は単独政党のみで内閣を支えきれなくなり、複数政党と一緒に内閣を支えました。
== バブルの崩壊 ==
プラザ合意後、大量のお金が土地購入・株式購入のために使われ、土地の値段・株価[資産価格]が次第に上がりました(資産インフレ)。1989(平成元)年、日本銀行は銀行へお金をあまり貸さなくなり、政府も土地の値段を上げすぎないようにしました(金融引き締め政策)。1990年代に入ってから、土地の値段・株価は下がり始めました。日経平均株価は、1989年12月末に3万8915円まで上がりました。しかし、その後は株式売却が増えて株価もいきなり下がり、1992年8月に1万4309円まで下がりました。土地の値段も1991年頃から下がり始め、1992年以後は日本各地で下がりました。2000年代半ばになると、大阪の一部商業地は一番高い時期の値段から約10分の1まで下がりました。こうして土地や株式の大幅な値上がりは終わり、1980年代後半のバブル経済は終わりました。
★日本の実質経済成長率の推移
[[ファイル:GDP_growth_rate_in_Japan.svg|代替文=日本の実質経済成長率の推移|フレームなし|924x924px]]
日本の景気は1991年から悪くなりました('''平成不況''')。実質経済成長率は1992年に1.3%、1993年に1%未満まで下がりました。1992年を3か月ずつに分けて見ると、4~6月は-3.3%となり、前の3か月より国内経済が小さくなりました。7~9月と10~12月もそれぞれ-0.1%となりました。第1次石油危機後に2期連続の経済縮小時期はあっても、3期連続の経済縮小は戦後初めてでした。僅かな景気回復時期も平成不況の途中にありました。しかしすぐに経済縮小となり、平成不況が長年続きました。
バブル経済当時の国民は金融機関からお金を借りて、株価と地価をより高い価格で買いました。金融機関は不動産会社にもお金を貸しました。バブル崩壊後、株価と地価が大きく下がりました。国民は株と土地を全て売っても借金を返せなくなりました。国民の借金も金融機関へ返ってこなくなりました(不良債権)。金融機関は株と土地を債権として持っており、不良債権から金融機関も大赤字になりました。
金融機関は不良債権処理にずっと追われて、さらに苦しくなりました。その結果、金融機関は不良債権の心配からお金を貸さなくなりました。企業は金融機関からお金を借りにくくなりました。国民も「この金融機関は大丈夫か」と不安を感じるようになり、金融機関はさらに苦しくなりました。その後、企業は新しい商品を作れなくなり、新しい工場を建てられなくなり、新しい機械も買えなくなりました。地価の下落・株価の下落・不良債権の増加・金融機関の経営悪化・金融機関の融資停止が全て重なって景気も次第に悪くなりました('''複合不況''')。
当時の政府と日本銀行はこれまでの不況と同じように、財政支出の拡大・低金利政策から数年で景気も回復するかもと思っていました。この誤対策は複合不況に一切効果ありません。住宅金融専門会社は1995年頃から相次いでつぶれました。1997年、北海道拓殖銀行と山一証券がつぶれました。1998年、日本債券信用銀行と日本長期信用銀行がつぶれました。このように大手金融機関がつぶれると、国民も他の金融機関も危ないのではないかと不安になりました。政府は金融システムまで止まらないように、倒産寸前の大手金融機関などに大量の公的資金を入れました。<gallery mode="nolines" widths="200" heights="200">
ファイル:The Hokkaido Takushoku Bank.JPG|旧北海道拓殖銀行本店
ファイル:Kayabacho Tower, at Shinkawa, Chuo, Tokyo (2019-01-02) 02.jpg|旧山一證券本社
ファイル:日債銀本店.jpg|旧日本債券信用銀行本店
ファイル:Shinsei Bank (head office 1).jpg|旧日本長期信用銀行本店
</gallery>1998年、小渕恵三が内閣総理大臣になりました。小渕恵三内閣も大型予算から景気を回復させしようとしました。小渕内閣が公共投資を増やして国民のお金を回そうとしても複合不況に一切効果ありません。こうして、公債発行残高は増えました。物価は1990年代後半からずっと下がり続けました(デフレスパイラル)。
[[ファイル:Unemployment Rate of Japan 1953-2009.jpg|サムネイル|395x395ピクセル|日本の失業率]]
企業は赤字なので、生き残るために経営の効率化[事業整理・人員削減・雇用調整・海外進出など]を進めました(リストラクチャリング)。中小企業の倒産も増えて、中高年労働者の解雇・中高年労働者の早期退職・新卒採用の削減から企業の人件費を大幅に減らしました。バブル景気の時期は労働者不足から「売り手市場」でも、バブル崩壊後から「買い手市場」へ変わりました。1990年代半ばから2000年代前半、企業は新卒採用を大幅に減らしました(就職氷河期)。1998年の完全失業率は4%を超え、2001年の完全失業率で5%になりました。
失業者が増えると労働者も「自分も仕事を失うかもしれない」と不安になり、個人消費を減らしました。消費者は同じような商品なら出来るだけ安い商品を選ぶようになり、ブランド品・高級品を買ってくれなくなりました。商品が売れなくなると、会社も少量生産・既存工場・既存機械だけで行うようになりました。その結果、会社の利益がさらに減って、人員削減・採用縮小もさらに進みました。株価と地価の下落から不良債権が増えて、金融機関の経営も苦しくなり、企業へお金を貸せなくなりました。
円高も国際分業も進みました。1994年、1ドルが100円を割り込みました。輸出主導・量産指向型産業[自動車・電子・家電・事務機器など]は海外で売れにくくなりました。また、バブル崩壊後の不景気から国内の購入者も減りました。生産費用を少しでも減らすため、労働者の給料が日本より低いアジア諸国[中国など]へ工場を移すようになりました[国内工場の閉鎖・国内工場の海外移転]。その結果、地元企業・周辺店舗の売り上げを減らし、失業者を増やしました(地域'''産業の空洞化''')。
繊維産業の事業所数は減り続けました。2015年の繊維産業の事業所数は1991年と比べて約4分の1になりました。国内衣料品市場のうち海外衣料品購入割合は1991年で52%になり、2017年で97%まで上がりました。多数の多国籍企業が1990年代後半に日本企業を合併したり、買収したりしました。企業が日本型雇用を取り入れていても競争力強化・経営効率化から人員削減・能力給の導入を進めました。その結果、働き方の不安定さが広がりました。
日本は技術面でも負けています。1980年代、日本企業はエレクトロニクス[電子機器]・新素材・バイオテクノロジーなどの技術でアメリカに追いつこうとしていました。1990年代から情報通信技術の活用や生産性の伸びでアメリカ合衆国に負けました。商品は日本国内で売れにくくなり、業務内容も変わっていきました。そのため、日本企業は海外企業に負けないような対策を取りました。
バブル崩壊後、銀行制度・企業制度も変えられました。「日本版金融ビッグバン」を1996年に打ち出して、銀行・証券会社などにも規制を緩めて金融の自由化・国際化を進めました。1997年の独占禁止法改正から禁止の持株会社を再度認めました。企業は持株会社からグループ内の会社をまとめ直したり、経営の進め方を変えたりしやすくなり、その後の企業再編・金融再編にもつながりました。
以前の大規模小売店舗法は店舗面積500平方メートル以上の大規模小売店舗出店条件として出店規模・営業時間・営業日数などを定めていました。しかし、大規模小売店舗は中小小売業者の近くにも自由に出店しており、中小小売業者のお客様まで消えました。そのため、政府は大規模小売店舗の立地場所を1998年から制限しました(大規模小売店舗立地法)。中小小売業者から流れすぎないように守りながら、大規模小売店舗も中小小売業者も商売を続けられるようにしました。2000年、大規模小売店舗法を廃止しました。[[ファイル:Asian Financial Crisis EN-2009-05-05.png|サムネイル|273x273px|アジア通貨危機の影響国]]企業再編・合併は政府の規制緩和から広がり、海外企業と国内企業の協力・合併も増えました。その流れから六大企業集団もまとまりました。金融業界でも銀行などが倒産したり、別の銀行と合併したりしました。その結果、日本の金融業界は三井住友グループ[旧三井系と旧住友系]・三菱UFJ[旧三菱系と三和系]・みずほグループ[旧第一勧銀系と旧富士系]の三大金融グループへまとまりました。
国内長期不況で苦しむ中、アジア諸国の経済は大成長しました。しかし短期海外資金の依存・金融機関の過剰な借入れ・企業の過剰な借入れ・金融制度の弱さ・投機資金の流入などから海外投資家が危機感を示して一斉に海外資金を回収・売却・国外移動を行いました。1997年、タイの通貨バーツの価値が大きく下がりました。海外投資家は東アジア・東南アジアから次々と海外資金を回収・売却・国外移動を行いました(アジア通貨危機)。その結果、東アジア・東南アジア諸国の金融と経済は大きな爪痕を残しました。債務問題は韓国などで大きくなり、国際通貨基金(International Monetary Fund:IMF)の支援を受けました。アジア通貨危機は日本経済と日本の金融機関にも大きな爪痕を残して、不良債権問題をさらに悪化させました。
日本政府はアジア通貨危機の発生から地域的な金融協力制度[アジア通貨基金構想]を出しました。しかし、アメリカ合衆国の反対から日本政府は二国間金融支援と新宮沢構想などに切り替えて、東アジア諸国を金銭面で助けました。
バブル経済崩壊後の平成不況はずっと続きました。景気は2002年初期に少しだけ上向きました。しかし、政府が公共事業中心の従来型景気対策を抑えながら不良債権処理と規制改革を進めました。その結果、企業は引き続き大規模なリストラと雇用調整を行いました。当初、バブル崩壊後の長期停滞は「失われた10年」とよばれました。その後も日本経済の停滞が強く、「失われた20年」「失われた30年」とよばれました。
== 行政改革と日米安保の変化 ==
1990年代後半、大規模災害の対策・重大事件への対策・行政改革・財政改革・金融改革・冷戦後の日米安全保障体制見直し・政党の組み直しを行いました。1995年1月17日、阪神・淡路地域でマグニチュード7.3の<span style="color:#f29100">'''阪神・淡路大震災[兵庫県南部地震]'''</span>が起こりました。神戸市を中心に6400人以上が亡くなり、建造物・高速道路までも大きく壊れました。当地震で大都市は自然災害に弱く、都市政策・耐震化基準・防災体制の見直しをしました。また、国民は被災地に入って、避難民[被災者]の生活を支えたり、被災地の後片付けを手伝ったりしました。この活動からボランティア活動が全国に広がりました。
1995年3月20日、オウム真理教集団は東京都の地下鉄でサリンを撒いて、多数の死傷者を出しました(<span style="color:#f29100">'''地下鉄サリン事件'''</span>)。このように阪神・淡路大震災と地下鉄サリン事件・少年犯罪の殺人事件・児童虐待などが何度も報道機関で取り上げられ、旧価値観的な安全神話も崩れて国民の意識も変わりました。<gallery mode="packed" widths="200" heights="200">
ファイル:Hanshin Expressway Nada b059.jpg|阪神淡路大震災被災後
ファイル:【地下鉄サリン事件】除染を行う自衛隊員と警察官.jpg|地下鉄サリン事件
ファイル:Ryutaro Hashimoto 19960111.jpg|橋本龍太郎
ファイル:Ryuhei Kawada 20240307.jpg|川田龍平
</gallery>1995年9月、自由民主党総裁選挙から<span style="color:#f29100">'''橋本龍太郎'''</span>が選ばれました。1996年1月、村山富市首相退陣後の内閣総理大臣指名選挙で橋本龍太郎が選ばれました。橋本内閣でも自民党・社会民主党・新党さきがけの3党が引き続き協力して、政策を進めました。なお日本社会党は自衛隊・日米安全保障条約の賛成側に回り、1996年に党名を社会民主党へ変えました。
薬害エイズ問題も大きく取り上げられました。橋本龍太郎内閣厚生大臣の菅直人は薬害エイズ被害者[川田龍平など]に謝罪しました。その後、国と製薬会社と被害者が話し合い、和解しました。
1996年、新しい選挙制度で初めて衆議院議員総選挙が行われ、自由民主党の議席を大きく増やしても、過半数を下回りました。社会民主党と新党さきがけは第2次橋本内閣から国務大臣を出さなくなり、閣外協力に変わりました。その結果、自由民主党単独政権に戻りました。
橋本龍太郎内閣は冷戦後の国際変化・国内経済・政府問題を解決するため、行政・財政・金融の各分野を見直しました。行政改革は政府組織を減らしたり、類似の政府組織を1つにまとめたりして、首相などの政策案を出しやすくしました。1998年、中央省庁等改革基本法が導入されて中央省庁等改革関連法から行政改革の方針を決めました。
2001年1月、政府はこの行政改革の方針から中央省庁を1府22省庁から1府12省庁に減らしました。その結果、内閣総理大臣は各省庁へ指示を出して、政府全体の政策を進めやすくしました。2007年、防衛庁を防衛省に上げました。
★省庁再編
{| class="wikitable"
!再編前
!再編後
!再編前
!再編後
|-
|内閣官房
|内閣官房
|大蔵省
|財務省
|-
| rowspan="2" |総理府
金融再生委員会
経済企画庁
沖縄開発庁
| rowspan="2" |内閣府
|科学技術庁
文部省
|文部科学省
|-
|厚生省
労働省
|厚生労働省
|-
|国家公安委員会
|国家公安委員会
|農林水産省
|農林水産省
|-
|防衛庁
|防衛庁(省)
|通商産業省
|経済産業省
|-
|総務庁
郵政省
自治省
|総務省
| rowspan="2" |北海道開発庁
国土庁
建設省
運輸省
| rowspan="2" |国土交通省
|-
|法務省
|法務省
|-
|外務省
|外務省
|環境庁
|環境省
|}
橋本龍太郎内閣は国債の発行額を減らそうとしました。1997年4月、財政構造改革法に従って消費税率を3%から5%に引き上げて公共事業費などを減らしました。国債発行額は1970年代後半から増えても1980年代末で一度減りました。1990年代に入り、公共投資を再拡大させてから大幅な国債発行額増加に向かいました。
しかし、国民は消費税率の引き上げなどから財布の紐もきつくなり、金融機関も生き残れなくなりました。さらにアジア通貨・金融危機も起きて、日本経済は再不況になりました。やがて、銀行同士は金融不安の拡大から合併して1つの銀行になりました。1997年度の実質経済成長率は-0.4%となり、1974年度[第1次石油危機直後]以来のマイナス成長になりました。1998年度の実質経済成長率は-2%まで下がり、平成不況の大きさを改めて物語りました。
[[ファイル:Official Portrait of President William Jefferson Clinton - DPLA - 4697184146b3b6e2d6791b8f3c297476.jpg|サムネイル|221x221ピクセル|ビル・クリントン大統領]]
冷戦後、橋本龍太郎内閣は日米安全保障体制を見直しました。アメリカのビル・クリントン大統領が1996年4月に日本を訪れ、橋本首相と話し合って<span style="color:#f29100">'''日米安全保障共同宣言'''</span>を発表しました。日米安全保障共同宣言から日本とアメリカは日本防衛以外にもアジア太平洋地域の戦争防止・紛争防止まで努めていくようになりました。
自衛隊がアメリカ軍に必要物資を運ぶなどの後方支援についても、日米防衛協力のための指針を見直しました。1997年、日本政府とアメリカ合衆国政府は「新しい日米防衛協力のための指針(新ガイドライン)」を作りました。
日本が外国から直接攻撃されても直接攻撃されていなくても、日本周辺国の戦争などから日本の平和と安全に大きく関わっていたらアメリカ合衆国側も新ガイドラインに従って助け合いました(周辺事態)。ただし日本から何キロ以内というような距離だけだとアメリカ合衆国側は何もしません。
地球温暖化防止京都会議は1997年に開かれ、温室効果ガスの削減目標などを盛り込む京都議定書を採択しました。また、橋本龍太郎内閣は従来のアイヌ民族政策を大きく変えました。
アイヌ民族は1946年2月に北海道アイヌ協会を作り、アイヌ民族の権利を政府に求めました。北海道旧土人保護法からアイヌ民族用の土地[給与地]を貰っても、農地改革で買収されたくありませんでした。しかしアイヌ民族をずっと厳しく人種差別しており、アイヌ民族の一部は北海道から逃げました。その後、北海道アイヌ協会は名前を北海道ウタリ協会に変えました。[[ファイル:UPOPOY 202608.jpg|サムネイル|民族共生象徴空間ウポポイ]]1980年代、世界各地の先住民族が先住民族の権利を政府に求めました。北海道ウタリ協会は政府に北海道旧土人保護法を廃止して新しい法律を作ってほしいと求めました。1997年、国会はアイヌ民族文化をずっと守っていくためにアイヌ文化振興法を作り、北海道旧土人保護法を廃止しました。
その後もアイヌ民族政策は変わりました。2008年、国会はアイヌ民族を日本の先住民族と認めて、内閣へアイヌ民族の権利・生活・文化なども認めてほしいとお願いしました。民族団体の名前も北海道ウタリ協会から北海道アイヌ協会に戻しました。
2019(令和元)年、政府はアイヌ施策推進法で日本の「先住民族」にアイヌ民族を初めて入れました。アイヌ施策推進法から北海道アイヌ協会側も話し合いに参加して、アイヌ民族向けの新しい政策を行っています。2020年、北海道白老町に民族共生象徴空間ウポポイが開かれました。アイヌ語講座・アイヌ文化活動・アイヌ語活動が日本各地で開かれてもいます。
[[ファイル:Keizo Obuchi 19980730.jpg|サムネイル|168x168ピクセル|小渕恵三]]
1998年7月の参議院議員選挙で自由民主党議席数は大きく減らし、この結果から橋本龍太郎も内閣総理大臣を辞めました。これを受けて、<span style="color:#f29100">'''小渕恵三'''</span>が内閣総理大臣に選ばれました。小渕恵三内閣はバブル崩壊に消費税増税・金融不安・アジア通貨危機なども重なり、橋本龍太郎の財政再建路線を修正しました。小渕恵三内閣は土木工事・公共施設建築工事の大型予算を組んでその潤いから複合不況まで立て直そうとしました。その結果、政府は赤字国債発行額を再び大幅に増やしました。
1999年、小渕恵三内閣は国会法案の賛成を増やしたいから自由党〔1月〕・公明党〔10月〕も自由民主党と一緒に内閣を支えていました[自自公連立政権の開始]。その結果、自由民主党・自由党・公明党は衆議院・参議院の両方で過半数の議席を持つようになりました。小渕恵三内閣から自由民主党と公明党は2025年10月まで一緒に内閣を支えました。
1999年、小渕恵三内閣は'''新ガイドライン関連法'''をまとめました。新ガイドライン関連法の<span style="color:#f29100">'''周辺事態安全確保法'''</span>は日本周辺国家の暴走で自国の平和と安全まで守れなくなったら、自衛隊を出してアメリカ軍へ必要物資を送りました。
[[ファイル:G8 2000 group photo (kremlin.ru).jpg|サムネイル|223x223px|第26回主要国首脳会議]]
1999年、小渕恵三内閣は日の丸と君が代を国旗・国歌法へ初めて記しました。また、国民は情報公開法に従って官公庁へ資料を見せてほしいとお願いしやすくなりました。国会は憲法調査会で憲法を変えるかどうか話し合いました。小渕恵三内閣は2000年に九州・沖縄で第26回主要国首脳会議[サミット]開くと決めました。
この時期は野党も大きく変わりました。社会民主党の支持者は少しずつ減りました。新進党は議員の大量離脱から1997年末になくなりました。旧新進党の議員は違う政党[自由党・新党平和・民主党]に入りました。1996年、鳩山由紀夫・菅直人が民主党を結成しました。その後、旧新進党議員も民主党へ入りました。さらに、新党平和・黎明クラブを公明党に戻しました。
こうして、自由民主党と日本社会党が長く争う55年体制も終わりました。55年体制が終わっても、自由民主党と民主党の保守二大政党制へ繋がりませんでした。自由民主党が再び政権へ戻っても、自由党・公明党と一緒に内閣を支えていました。
== 資料出所 ==
* 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年
* 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年
* 高埜利彦、高村直助ほか編著『日本史A 改訂版』株式会社山川出版社 2016年
* 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年
* 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年
* 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年
* 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年
* 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年
* 河合敦著『世界一わかりやすい河合敦の日本史B[近・現代]の特別講座』株式会社KADOKAWA 2014年(絶版本)
* 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年
* 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年
[[カテゴリ:高等学校日本史探究|あらたなせいきのにほんへ]]
[[カテゴリ:20世紀]]
gnsw584taqtaavkohn89cbixq8hkbjl
利用者:Veracious/Sandbox
2
40094
304920
300223
2026-10-20T19:58:13Z
Veracious
42910
304920
wikitext
text/x-wiki
<!--
<gallery>
File:Adhisty zara sundari kusumawardhani jkt48 2 (cropped).jpg|Adhisty Zara
File:JKT48 K3 IMG 2928.jpg|Alicia Chanzia
File:Amanda Dwi Arista - 23062945165.jpg|Amanda Dwi Arista
File:20190810 JKT48 at KAI Esport Exhibition Goes to Jogja - Amanina Afiqah (Afiqah).jpg|Amanina Afiqah Ibrahim
File:Handshake Festival Saka Agari Surabaya IMG 9731 (Tasya).jpg|Anastasya Narwastu Tety Handuran
File:Supercell Gamer's Day 2019 IMG 4529.jpg|Andela Yuwono
File:JKT48 K3 IMG 2624.jpg|Angelina Christy
File:Aninditha Rahma Cahyadi (Anin) JKT48 1.jpg|Aninditha Rahma Cahyadi
File:Ariella Calista Ichwan JKT48 - Ariel 4.jpg|Ariella Calista Ichwan
File:20190810 JKT48 at KAI Esport Exhibition Goes to Jogja - Aurel Mayori (Yori).jpg|Aurel Mayori Putri
File:20190810 JKT48 at KAI Esport Exhibition Goes to Jogja - Azizi Asadel (Zee) 3.jpg|Azizi Shafaa Asadel
File:Ayana Shahab (Achan) JKT48 02 (cropped).jpg|Ayana Shahab
File:Ayu Safira Oktaviani (Okta) JKT48.jpg|Ayu Safira Oktaviani
File:JKT48 K3 IMG 2971 (Beby).jpg|Beby Chaesara Anadila
File:Team J & Akustik @ BCA Finhack 2019 - 9237.jpg|Cindy Hapsari Maharani Pujiantoro Putri
File:Cindy yuvia jkt48 4.jpg|Cindy Yuvia
File:JKT48 Devi Kinal Putri (22645433068).jpg|Devi Kinal Putri
File:Elaine Hartanto JKT48 IMG 5815 (cropped).jpg|Elaine Hartanto
File:Team J & Akustik @ BCA Finhack 2019 IMG 8815.jpg|Feni Fitriyanti
File:Fia at Circus Bandung 2018.jpg|Fidly Immanda Azzahra
File:20190810 JKT48 at KAI Esport Exhibition Goes to Jogja - Freya Jayawardana (Freya).jpg|Freya Jayawardana
File:Team J & Akustik @ BCA Finhack 2019 IMG 9003.jpg|Frieska Anastasia Laksani
File:Team J & Akustik @ BCA Finhack 2019 IMG 8731.jpg|Gabriela Margareth Warouw
File:Gabryela marcelina aby jkt48.jpg|Gabryela Marcelina
File:Hasyakyla utami kusumawardhani kyla jkt48.jpg|Hasyakyla Utami Kusumawardhani
File:Helisma Putri at Konser Tunggal KIII vs KIII.jpg|Helisma Putri
File:Jennifer Hanna Sutiono JKT48 1.jpg|Jennifer Hanna
File:Jessica Vania Widjaja (Jeje) JKT48 Megakonser RCTI Warnai Harimu Jakarta 17-02-2013 2b.jpg|Jessica Vania Widjaja
File:Jessica Veranda (22698400217).jpg|Jessica Veranda
File:Jinan safa safira jkt48 3.jpg|Jinan Safa Safira
File:Kathrina Irene Indarto Putri (Kathrin) JKT48.jpg|Kathrina Irene Indarto Putri
File:Lidya maulida djuhandar jkt48.jpg|Lidya Maulida Djuhandar
File:Maria Genoveva Natalia Desy Purnamasari Gunawan jkt48.jpg|Maria Genoveva Natalia Desy Purnamasari Gunawan
File:Marsha LL 01Dec19 IMG 3656.jpg|Marsha Lenathea
File:Michelle CK 18Jan20 IMG 7121.jpg|Michelle Christo Kusnadi
File:Melody Nurramdhani Laksani JKT48 2.jpg|Melody Nurramdhani Laksani
File:Nabilah ayu jkt48 1.jpg|Nabilah Ratna Ayu Azalia
File:Team J & Akustik @ BCA Finhack 2019 IMG 8666.jpg|Nadila Cindi Wantari
File:Wekwek (9652333713) (Natalia).jpg|Natalia
File:JKT48 K3 IMG 2980.jpg|Nurhayati
File:KIII (9673620350) (Octi cropped).jpg|Octi Sevpin
File:Priscillia sari dewi (sisil) jkt48.jpg|Priscillia Sari Dewi
File:Ratu vienny fitrilya viny jkt48 2.jpg|Ratu Vienny Fitrilya
File:Rezky Wiranti Dhike JKT48 Halloween Night Handshake Festival Jakarta 31-10-2015.jpg|Rezky Wiranti Dhike
File:Rica leyona jkt48 1 (cropped).jpg|Rica Leyona
File:Riska amelia putri amel jkt48 2.jpg|Riska Amelia Putri
File:Sendy Ariani JKT48.jpg|Sendy Ariani
File:JKT48 K3 IMG 2803.jpg|Shani Indira Natio
File:JKT48 Mahagita Handshake Festival 68.jpg|Saktia Oktapyani
File:Shania gracia jkt48.jpg|Shania Gracia
File:Shania Junianatha (Shanju) JKT48 2.jpg|Shania Junianatha
File:Shinta Naomi Prasetya JKT48.jpg|Shinta Naomi Prasetya
File:20190810 JKT48 at KAI Esport Exhibition Goes to Jogja - Sinka Juliani (Sinka) (cropped).jpg|Sinka Juliani
File:Team J & Akustik @ BCA Finhack 2019 IMG 8666.jpg|Sisca Saras
File:Stephanie Pricilla Indarto Putri (Stefi) JKT48 (cropped).jpg|Stephanie Pricilla Indarto Putri
File:20190810 JKT48 at KAI Esport Exhibition Goes to Jogja - Syahfira Angela Nurhaliza (Angel).jpg|Syahfira Angela Nurhaliza
File:Thalia Ivanka (23103118852).jpg|Thalia Ivanka Elizabeth
File:Viviyona Apriani (Yona) JKT48 2.jpg|Viviyona Apriani
file:Yessica Tamara Siallagan (Chika) JKT48 8.jpg|Yessica Tamara
File:20190810 JKT48 at KAI Esport Exhibition Goes to Jogja - Zahra Nur (Ara).jpg|Zahra Nur Khaulah
</gallery>
-->
<!--
<gallery>
File:J and K3 Team JKT48 Honda GIIAS 2016 IMG 2778 (29051348271).jpg
File:JKT48 K3 IMG 3172.jpg
File:JKT48 K3 IMG 3223.jpg
</gallery>
-->
6exfhcy8alcrqh6tsqf5vysnb1r5fxs
解析学基礎/ベクトル解析
0
45683
304923
304878
2026-10-21T02:45:40Z
~2026-55692-88
92812
/* 積分定理 */
304923
wikitext
text/x-wiki
{{Pathnav|数学|解析学|解析学基礎|frame=1}}
{{wikipedia|ベクトル解析}}
ここでは、ベクトル解析について解説する。[[物理数学I ベクトル解析]]も参照。
==前提知識==
ここでは、実数のみで考える。
===ベクトル===
[[高等学校数学C/ベクトル]]、[[線型代数学/ベクトル]]、[[解析学基礎/ベクトル]]などを参照。本項では、矢印を付した表記(<math>\vec{a}</math>など)と太字斜体による表記(<math>\boldsymbol{x}</math>など)を混用する。
===行列===
[[高等学校数学C/数学的な表現の工夫]]及び[[線形代数学]]・[[線型代数学続論]]の各ページを参照。本項では大文字の太字立体(<math>\mathbf{A}</math>など)で表記する。
===多変数解析===
[[解析学基礎/多変数関数の微積分]]を参照。
===領域===
<math>D\subset\mathbb{R}^n</math>と点<math>\boldsymbol{a}\in D</math>(位置ベクトル表記なので太文字斜体)に対し、集合<math>B_\varepsilon(\boldsymbol{a}) := \{ \boldsymbol{x} \in D \mid \| \boldsymbol{x} - \boldsymbol{a} \|<\varepsilon \}</math>を点<math>\boldsymbol{a}</math>の'''<math>\varepsilon</math>-開球'''という。不等号を<math>\leqq</math>に変えたときは開区間↔閉区間と同様に'''閉球'''と呼ぶ。このとき、<math>D</math>のように<math>\mathbb{R}^n</math>の部分集合であって<math>\varepsilon</math>-開球を含むものを点<math>\boldsymbol{a}</math>の'''<math>\varepsilon</math>-開近傍'''と呼ぶ。閉球を含むときは同様に'''閉近傍'''と呼ぶ。
<math>\forall \boldsymbol{a} \in U, \exist \varepsilon>0, B_\varepsilon(\boldsymbol{a})\subset U</math>を満たす<math>U\subset\mathbb{R}^n</math>を'''開集合'''と呼び、<math>V=\mathbb{R}^n\setminus U</math>を'''閉集合'''と呼ぶ。
注意点として、開集合と閉集合は排反ではない。則ち「開集合且つ閉集合」である集合が存在し(例えば<math>\mathbb{R}, \varnothing</math>)、「開集合でも閉集合でもない」集合も存在する(例えば<math>[0, 1)</math>)。
<math>M\subset\mathbb{R}^n</math>を含む最小の閉集合を<math>M</math>の'''閉包'''と呼び、<math>M^-, \bar{M}, \mathrm{Cl}(M)</math>などと表す。例えば有理数の稠密性より<math>\mathbb{Q}^-=\mathbb{R}</math>である。
閉包の性質として「閉包=集合の内部と境界の和集合(<math>M^- = \mathrm{Int}(M) \cup \partial{M}</math>)」がある。
集合<math>S\subset\mathbb{R}^n</math>に対して以下を満たす<math>\mathbb{R}^n</math>上開集合の組<math>(G_1, G_2)</math>が'''とれない'''とき、
#<math>G_1 \cap S = \varnothing \land G_2 \cap S = \varnothing</math>
#<math>S = (G_1 \cap S) \sqcup (G_2 \cap S)</math>
「<math>S</math>は'''連結'''である」または「<math>S</math>は'''連結集合'''」という(但し、<math>\sqcup</math>は[[w:非交和|非交和]])。
空でない開連結集合を'''領域'''という。
実は、高校数学や1年次の解析学で扱ってきた「領域」はこの定義を満たしていないことが多かった。これは、「領域」の歴史的な用法では「条件の解集合」という意味であって開性や連結性を要求しなかったためである。しかし、本項を含めた以降に登場する数学ではこの定義を満たしていることが前提条件となる。なお、ややこしいことに「積分領域」は従来通り「その上で積分を行う集合」という緩い意味で使われることが多いので、区別が必要である。
===右手系===
三次元空間の正規直交基底を<math>(\boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3)</math>と置く。螺子を<math>\boldsymbol{e}_1\to\boldsymbol{e}_2</math>の向きに回すと<math>\boldsymbol{e}_3</math>の正方向に進むように3つの軸をとった系を'''右手系'''という。負方向に進むようにとったものを'''左手系'''という。数学・物理に限らず理数系の約束事として、'''三次元空間は必ず右手系で考える'''という暗黙の了解が存在するので覚えておこう。
右手系・左手系は基底の一部または全ての符号を反転することで変換することができる。一つだけを反転する場合は'''鏡像変換'''、二つだけを反転する場合は'''半回転'''、全てを反転する場合は'''空間反転'''と呼ぶ。
外積の結果として得るベクトルは右手系・左手系のどちらを考えるかで向きが変わる。このように、右手系↔左手系の変換で向きが変わるベクトルを'''軸性ベクトル'''という。
系の取り方で向きが変わるということは基底の係数である'''成分は不変量'''である。つまり、観測者の動きにベクトルが追従し、このベクトルは「物理的な実体を有しているのではなく計算の都合上向きが定められた便宜的な(=観測者が勝手に決めた)ベクトル」ということである。そのため、軸性ベクトルは'''擬ベクトル'''(シュードベクトル)とも呼ばれる。
位置や速度、加速度のような右手系・左手系のどちらを考えても同じ向きを向くベクトルを'''極性ベクトル'''という。座標系を取り換えても向きが維持されるため'''成分は座標変換に応じて変化する'''。これは、「観測の仕方によって起こる現象は変わらない」ということである。つまり擬ベクトルに対し、極性ベクトルは'''物理的実体を有するベクトル'''である。
偶奇と同じように軸性・極性にも外積を通じた相互関係が存在する。
:(軸性)×(軸性)=(軸性)
:(軸性)×(極性)=(極性)
:(極性)×(極性)=(軸性)
==基礎事項==
===ベクトル関数===
関数<math>\boldsymbol{f} (x) = \sum_{i} f_i(x) \boldsymbol{e}_i</math>を'''ベクトル(値)関数'''(vector-valued function, vector function)という。
ただし、各<math>\boldsymbol{e}_i</math>は各座標軸方向の単位ベクトルであり、<math>\boldsymbol{f}(x)</math>の定義域は各<math>f_i(x)</math>の定義域の積集合である。
ベクトルの演算が成分ごとの演算結果を並べたベクトルで定義されたように、ベクトル関数の演算は(結果となる値が存在するならば)各成分の演算結果を並べたベクトルに等しい。これはベクトルの線型性による。
例えば、<math>\boldsymbol{f}(x) = \begin{pmatrix} \cos x \\ \sin x \end{pmatrix}</math>の<math>x\to0</math>の極限は、
:<math>\lim_{x\to0} \boldsymbol{f}(x) = \begin{pmatrix} \lim_{x\to0} \cos x \\ \lim_{x\to0} \sin x \end{pmatrix}</math> (<math>\because</math>線型性)
:<math>=\begin{pmatrix} 1 \\ 0 \end{pmatrix}</math>
:<math>=\boldsymbol{e}_x</math>
と求まる。
このとき、<math>\boldsymbol{e}_x</math>を<math>\begin{pmatrix} \cos x \\ \sin x \end{pmatrix}</math>の<math>x\to0</math>に於ける'''極限ベクトル'''という。
<math>\boldsymbol{f}(x)</math>が<math>x=\alpha</math>で連続であるとは<math>\lim_{x\to\alpha}\boldsymbol{f}(x)=\boldsymbol{f}(\alpha)</math>が成立することであり、区間<math>I</math>で連続であるとは<math>\forall \alpha \in I</math>で連続であることである。
また、ベクトル関数の導関数<math>\boldsymbol{f}'(x)</math>は
:<math>\frac{d}{dx} \boldsymbol{f} (x) = \frac{d}{dx} \left( \sum_i f_i(x) \boldsymbol{e}_i \right)</math>
:<math>= \sum_i \left( \frac{d}{dx} f_i (x) \boldsymbol{e}_i \right)</math>(<math>\because</math>線型性)
:<math>= \begin{pmatrix} f'_1(x) \\ f'_2(x) \\ \vdots \\ f'_i(x) \\ \vdots \end{pmatrix}</math>
である。
この結果は、ベクトル関数に於ける導関数の正式な定義 <math>\lim_{h\to0} \frac{\boldsymbol{f}(x+h) - \boldsymbol{f}(x)}{h}</math>からも導かれる。
<math>\boldsymbol{f}(x)</math>が<math>x=\alpha</math>で微分可能であるとは極限値<math>\boldsymbol{f}'(\alpha)=\lim_{x\to\alpha}\frac{\boldsymbol{f}(x)-\boldsymbol{f}(\alpha)}{x-\alpha}</math>が存在することであり、区間<math>I</math>で微分可能であるとは<math>\forall \alpha \in I</math>で微分可能であることである。
高階導関数・高階微分可能も同様にして定義される。
<math>\boldsymbol{f}(x)</math>が区間<math>I</math>で連続ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^0</math>級であるといい、<math>\boldsymbol{f}\in C^0(I)</math>と書く。<math>\boldsymbol{f}(x)</math>が<math>I</math>で微分可能で<math>\boldsymbol{f}'(x)\in C^0(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^1</math>級である(一階連続微分可能)といい、<math>\boldsymbol{f}\in C^1(I)</math>と書く。<math>\boldsymbol{f}(x)</math>が<math>I</math>で二階微分可能で<math>\boldsymbol{f}'\in C^1(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^2</math>級である(二階連続微分可能)といい、<math>\boldsymbol{f}\in C^2(I)</math>と書く。同様にして順々に<math>C^k</math>級が定義され、<math>\forall k \in \mathbb{N}, \boldsymbol{f}\in C^k(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>で<math>C^\infty</math>級(無限階連続微分可能)であるといい、<math>\boldsymbol{f}\in C^\infty(I)</math>と書く。<math>C^\infty</math>級である関数を'''滑らかな'''関数ともいう。
高校数学や高校物理で扱った平面(<math>\mathbb{R}^2</math>)上の運動は、実は2項ベクトル関数の理論に他ならない。
例えば、平面上の運動に於ける加速度・速度・変位の関係は<math>\boldsymbol{x}(t)= \begin{pmatrix} f(t) \\ g(t) \end{pmatrix}</math>として<math>\boldsymbol{a}(t) = \frac{d}{dt}\boldsymbol{v}(t) = \frac{d^2}{dt^2} \boldsymbol{x}(t)</math>と表すことができる。
曲線の媒介変数表示は、パラメータを変数とするベクトル関数とみることができる。
例えば、円の媒介変数表示<math>\begin{cases} x=r\cos\theta \\ y=r\sin\theta \end{cases}</math>は、<math>\boldsymbol{r}(\theta) = r\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}</math>という2次元ベクトル関数とみることができる。更に<math>\theta=\omega t</math>とすると、これは等速円運動の式である。
1変数ベクトル関数の微分に関して、以下の公式が成り立つ。
#定数倍の導関数:<math>\{k\boldsymbol{a}(x)\}'=k\boldsymbol{a}'(x)</math>
#和・差の導関数:<math>\{ \boldsymbol{a}(x)\pm\boldsymbol{b}(x) \}' = \boldsymbol{a}'(x)\pm\boldsymbol{b}'(x)</math>
#積の導関数:<math>\{ f(x)\boldsymbol{a}(x) \}' = f'(x)\boldsymbol{a}(x)+f(x)\boldsymbol{a}'(x)</math>
#商の導関数:<math>\left\{ \frac{\boldsymbol{a}(x)}{f(x)} \right\}' = \frac{f(x)\boldsymbol{a}'(x)-f'(x)\boldsymbol{a}(x)}{\{f(x)\}^2} \quad (f(x)\neq0)</math>
#内積の導関数:<math>\{\boldsymbol{a}(x)\cdot\boldsymbol{b}(x)\}' = \boldsymbol{a}'(x)\cdot\boldsymbol{b}(x)+\boldsymbol{a}(x)\cdot\boldsymbol{b}'(x)</math>
#外積の導関数:<math>\{\boldsymbol{a}(x)\times\boldsymbol{b}(x)\}' = \boldsymbol{a}'(x)\times\boldsymbol{b}(x)+\boldsymbol{a}(x)\times\boldsymbol{b}'(x)</math>
#スカラー三重積の導関数:<math>[\boldsymbol{a}(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}]' = \boldsymbol{a}'(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\cdot\{\boldsymbol{b}'(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}'(x)\}</math>
#ベクトル三重積の導関数:<math>[\boldsymbol{a}(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}]' = \boldsymbol{a}'(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\times\{\boldsymbol{b}'(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}'(x)\}</math>
#連鎖律(チェイン・ルール):<math>[\boldsymbol{a}\{f(x)\}]'=\boldsymbol{a}'\{f(x)\}f'(x)</math>
ベクトル関数の'''ノルム'''(大きさ、長さ)は、通常のベクトルと同様に
:<math>\| \boldsymbol{f}(x) \| = \sqrt{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)} = \sqrt{\sum_{i} \{f_i (x)\}^2}</math>
で与えられる。
つまり、ノルムは元のベクトル関数と同一変数のスカラー関数である。
ここで、このスカラー関数が定数関数である条件に就て見てみよう。
:<math>\| \boldsymbol{f}(x) \|= c \quad (c\in\mathbb{R}_{>0})</math>の両辺を2乗して
:<math>\| \boldsymbol{f}(x) \|^2 = \boldsymbol{f}(x)\cdot\boldsymbol{f}(x) = c^2</math>
:両辺微分すると内積の微分より
:<math>\{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'=\boldsymbol{f}'(x)\cdot\boldsymbol{f}(x)+\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=2\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0</math>
:<math>\therefore \boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0</math>
:逆に、
:<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0 \iff 2\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\boldsymbol{f}'(x)\cdot\boldsymbol{f}(x)+\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'=0</math>
:<math>\int \{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'dx= \int 0 dx</math>
:<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)=C_1</math>(<math>C_1\geq0</math>は積分定数)
:<math>\| \boldsymbol{f}(x) \|^2=C_1</math>より
:<math>\| \boldsymbol{f}(x) \| = \sqrt{C_1} = \mathrm{const}.</math>
よって、以下が成り立つ。
{{定理|(直交条件の定理)}}
:<math>\| \boldsymbol{f}(x) \|= \mathrm{const}. \iff \boldsymbol{f}(x) \cdot \boldsymbol{f}'(x) = 0</math>
{{定理終わり}}
これは、物理的には「位置ベクトルと速度ベクトルが直交する」ことを表す。則ち、<math>\boldsymbol{f}(x)</math>の終点が始点を中心とする円運動(球面運動)をするということである。
また、ベクトル関数が変数に依らず常に同一方向を向く条件も見てみよう(但し<math>\boldsymbol{f}(x)\neq\boldsymbol{0}</math>)。
:所与の条件は零ベクトルでない定ベクトル<math>\boldsymbol{c}</math>を用いて<math>\boldsymbol{f}(x) = f(x)\boldsymbol{c}</math>と表される。
:両辺微分して<math>\boldsymbol{f}'(x)=\{f(x)\boldsymbol{c}\}=f'(x)\boldsymbol{c}</math>
:ここで元のベクトル関数との外積をとると
:<math>\boldsymbol{f}(x)\times\boldsymbol{f}'(x)=\{f(x)\boldsymbol{c}\}\times\{f'(x)\boldsymbol{c}\}=f(x)f'(x) (\boldsymbol{c}\times\boldsymbol{c})=f(x)f'(x)\boldsymbol{0}=\boldsymbol{0}</math>
:逆に、
:<math>\boldsymbol{f}(x)\times\boldsymbol{f}'(x)=\boldsymbol{0}</math>とすると一次従属なので
:<math>\boldsymbol{f}'(x)=g(x)\boldsymbol{f}(x)</math>という微分方程式が成り立つ。
:各成分ごとに微分方程式を解くと、
::これは変数分離型微分方程式なので第i成分は
::<math>\frac{df_i}{dx}=g(x)f_i(x)</math>
::<math>\int \frac{df_i}{f_i(x)}=\int g(x)dx</math>
::<math>G'(x)=g(x), C_i</math>を積分定数として<math>\log|f_i(x)|=G(x)+C_i</math>
::<math>C_i=\pm e^{C_i}</math>と改めておくと<math>f_i(x)=C_i e^{G(x)}</math>
:よって
:<math>\boldsymbol{f}(x)=\sum_i f_i(x) \boldsymbol{e}_i = \sum_i C_i e^{G(x)} \boldsymbol{e}_i = e^{G(x)} \sum_i C_i \boldsymbol{e}_i</math>
:ここで<math>f(x)=e^{G(x)}, \boldsymbol{c}=\sum_i C_i \boldsymbol{e}_i</math>と置くと
:<math>\boldsymbol{f}(x) = f(x) \boldsymbol{c}</math>となり、方向は変数に依らず一定であることが判る//
よって、以下が成り立つ。
{{定理|(平行条件の定理)}}
<math>\boldsymbol{c},\boldsymbol{f}(x)\neq\boldsymbol{0}</math>として
:<math>\boldsymbol{f}(x)=f(x)\boldsymbol{c} \iff \boldsymbol{f}(x) \times \boldsymbol{f}'(x) = \boldsymbol{0}</math>
{{定理終わり}}
ベクトル解析では三次元空間の場合を考えることが多いため上では外積を用いて証明したが、外積は3項ベクトル(または7項ベクトル)にしか定義されないのであった。
一般次元では外積に代わって次の関係式を用いる。
:<math>|\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)|=\|\boldsymbol{f}(x)\|\|\boldsymbol{f}'(x)\|</math>
これはCS不等式の等号成立の場合である。
実際、<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\|\boldsymbol{f}(x)\|\|\boldsymbol{f}'(x)\|\cos\{\theta(x)\}</math>より等号成立の必要十分条件は
:<math>\cos\{\theta(x)\}=\pm1\iff\theta(x) \equiv 0 \,(\mathrm{mod}\pi)</math>
であり、2ベクトル<math>\boldsymbol{f}(x), \boldsymbol{f}'(x)</math>は平行とわかる。<br/>
平行ということは一次従属ということなので先程のように変数分離形微分方程式を解くことで3次元と同じ結果を得る。//
補足として、力学への応用を考える。
:速さの二乗<math>\|\boldsymbol{v}(t)\|^2</math>を時間微分すると
:<math>\frac{d}{dt}\|\boldsymbol{v}(t)\|^2=\frac{d}{dt}(\boldsymbol{v}(t)\cdot\boldsymbol{v}(t))=\frac{d\boldsymbol{v}(t)}{dt}\cdot\boldsymbol{v}(t)+\boldsymbol{v}(t)\cdot\frac{d\boldsymbol{v}(t)}{dt}=2(\boldsymbol{v}(t)\cdot\boldsymbol{a}(t))</math>
:よって等速運動の条件<math>\|\boldsymbol{v}(t)\|=\mathrm{const}.</math>は直交条件の定理から<math>\boldsymbol{v}(t)\perp\boldsymbol{a}(t)</math>に同値である。
:これを力学的に解釈すると、「加速度ベクトルは速度ベクトル方向に仕事をしないから速度ベクトルの大きさを変えずに向きだけを変える」となる。
:平面上で等速円運動を考えると円運動条件から<math>\boldsymbol{r}(t)\perp\boldsymbol{v}(t)</math>、等速条件から<math>\boldsymbol{v}(t)\perp\boldsymbol{a}(t)</math>なので<math>\boldsymbol{r}(t) /\!/ \boldsymbol{a}(t)</math>が出てくる。
:円運動条件<math>\|\boldsymbol{r}(t)\|^2=r^2</math>を一階微分すると
::<math>2\boldsymbol{r}(t)\cdot\boldsymbol{r}'(t)=0</math>
:もう一度微分して
::<math>2(\boldsymbol{r}(t)\cdot\boldsymbol{r}''(t)+\boldsymbol{r}'(t)\cdot\boldsymbol{r}'(t))=0</math>
:則ち
::<math>\boldsymbol{r}(t)\cdot\boldsymbol{a}(t)+\boldsymbol{v}(t)\cdot\boldsymbol{v}(t)=0</math>
:位置ベクトルと加速度ベクトルが一次従属なので<math>\boldsymbol{a}(t)=\lambda\boldsymbol{r}(t)</math>であり、等速条件より<math>\|\boldsymbol{v}(t)\|=v</math>なので
::<math>\lambda r^2 + v^2 = 0</math>
::<math>\therefore \lambda = -\frac{v^2}{r^2}<0</math>
:則ち<math>\boldsymbol{r}(t)</math>と<math>\boldsymbol{a}(t)</math>は逆向きであり、円運動の中心は<math>\boldsymbol{r}(t)</math>の始点なので<math>\boldsymbol{a}(t)</math>は常に円運動の中心を向く'''向心加速度'''であることが証明された。//
なお、3次元以上では「<math>\boldsymbol{a}\perp\boldsymbol{b}\land\boldsymbol{b}\perp\boldsymbol{c}\implies\boldsymbol{a}/\!/\boldsymbol{c}</math>」が一般には成り立たないのでこの議論を成立させるには追加の条件が必要である。
<math>\boldsymbol{f}(x)</math>の不定積分は、各<math>f_i(x)</math>の原始関数を並べたベクトルを<math>\boldsymbol{F}(x)</math>として
:<math>\int \boldsymbol{f}(x) dx = \boldsymbol{F}(x)+\boldsymbol{C}</math>(<math>\boldsymbol{C}</math>は各積分定数を並べたベクトル)
と表される。
また、定積分は
:<math>\int^b_a \boldsymbol{f}(x) dx=\boldsymbol{F}(b)-\boldsymbol{F}(a)</math>
と表される。
1変数ベクトル関数の積分について、以下が成り立つ(不定積分表記だが定積分に就ても同様)。
#定数倍の原始関数:<math>\int \{k\boldsymbol{a}(x)\} dx = k\int\boldsymbol{a}(x)dx</math>
#和・差の原始関数:<math>\int \{\boldsymbol{a}(x)\pm\boldsymbol{b}(x)\}dx=\int\boldsymbol{a}(x)dx\pm\int\boldsymbol{b}(x)dx</math>
#内積の原始関数<math>\int \{\boldsymbol{k}\cdot\boldsymbol{a}(x)\}dx=\boldsymbol{k} \cdot \left( \int \boldsymbol{a}(x) dx \right)</math>
#外積の原始関数<math>\int \{\boldsymbol{k}\times\boldsymbol{a}(x)\}dx=\boldsymbol{k} \times \left( \int \boldsymbol{a}(x) dx \right)</math>
#スカラー倍の部分積分:<math>\int f(x)\boldsymbol{a}'(x)dx= f(x)\boldsymbol{a}(x)-\int f'(x)\boldsymbol{a}(x) dx \iff \int f'(x)\boldsymbol{a}(x)dx= f(x)\boldsymbol{a}(x)-\int f(x)\boldsymbol{a}'(x) dx</math>
#内積の部分積分:<math>\int \{ \boldsymbol{a}(x)\cdot\boldsymbol{b}'(x) \}dx = \boldsymbol{a}(x)\cdot\boldsymbol{b}(x) - \int \{\boldsymbol{a}'(x)\cdot\boldsymbol{b}(x)\}dx</math>
#外積の部分積分:<math>\int \{ \boldsymbol{a}(x)\times\boldsymbol{b}'(x) \}dx = \boldsymbol{a}(x)\times\boldsymbol{b}(x) - \int \{\boldsymbol{a}'(x)\times\boldsymbol{b}(x)\}dx</math>
#置換積分:<math>u=f(x)</math>として<math>\int \boldsymbol{a}'\{f(x)\}f'(x) dx = \int \boldsymbol{a}(u)du</math>
平行条件の定理の証明でベクトル関数の微分方程式を解いたように、成分毎に考えることで解空間ベクトルを求められる。
:1階線型常微分方程式<math>\boldsymbol{f}'(x)+a(x)\boldsymbol{f}(x)=\boldsymbol{b}(x)</math>の解に就て考える。
:第<math>i</math>成分を考えると<math>f'_i(x)+a(x)f_i(x)=b_i(x)</math>という1階線型常微分方程式を得るので、
:両辺に積分因子<math>\mu(x)=\exp\left(\int a(x) dx\right)</math>を掛けることで
:<math>f_i(x)=\frac{1}{\mu(x)} \left\{ \int \mu(x) b_i(x) dx + C_i \right\}</math>を得る。
:よって一般解は
:<math>\boldsymbol{f}(x) = \sum_i \frac{1}{\mu(x)} \left\{ \int \mu(x) b_i(x) dx + C_i \right\} \boldsymbol{e}_i=\frac{1}{\mu(x)}\left\{ \int \mu(x) \boldsymbol{b}(x) dx + \boldsymbol{C} \right\}</math>
ベクトル関数は必ずしもここで扱った<math>\boldsymbol{f}: \mathbb{R}\to\mathbb{R}^n</math>のみを指さない。
例えば、ベクトル変数 <math>\boldsymbol{x}= \sum_i g_i (x) \boldsymbol{e}_i</math>に対して
:<math>\boldsymbol{h}(\boldsymbol{x})=\sum_i (h_i \circ g_i) (x) \boldsymbol{e}_i</math>
と定義されるような関数<math>\boldsymbol{h}:\mathbb{R}^m \to \mathbb{R}^m</math>もベクトル関数である。
また、始域と終域の次元が異なる<math>\boldsymbol{i}: \mathbb{R}^m \to \mathbb{R}^n \, (m, n\neq1)</math>のようなベクトル関数も考えられる。
一般に、始域が<math>\mathbb{R}^n (n\neq1)</math>であっても終域が<math>\mathbb{R}</math>である関数はベクトル関数に対して'''スカラー関数'''(scalar function)と呼ばれる。スカラー関数は入力ベクトルを「変数の組」と見れば通常の多変数関数に一致する。
この節で述べた理論は、多くは一般のベクトル関数に対しても成り立つ。但し、後述のヤコビ行列のような拡張を必要とするものもある。
また、多変数ベクトル関数<math>\boldsymbol{f}(x_1, x_2,\cdots,x_n)</math>を考えたとき、多変数微積分の理論は一変数微積分と同様にしてベクトル関数にもそのまま拡張される。
===ベクトル場・スカラー場===
写像<math>\boldsymbol{a}: \mathbb{R}^m \to \mathbb{R}^n</math>を'''ベクトル場'''(vector field)という。
実際には<math>m=n</math>の場合を考えることが多い。
写像<math>\varphi: \mathbb{R}^n \to \mathbb{R}</math>を'''スカラー場'''(scalar field)という。
それぞれ上で述べたベクトル関数・スカラー関数に対応する。
もう少し具体的に述べると、空間の領域<math>V</math>が与えられたときその各点にスカラーまたはベクトルを割り当てたものが場である。要するに、<math>p\in V</math>とすると
:スカラー場:<math>\varphi=\varphi(p)</math>
:ベクトル場:<math>\boldsymbol{a}=\boldsymbol{a}(p)</math>
のように場は「点を入力とする<sup>※</sup>関数」である。
<small>※なお、ベクトル場を図示するときは「出力されたベクトルの'''始点は原点でなく入力された点'''」であることに注意が必要である。出力ベクトルの成分表示は「入力点を基準に据えたときの位置ベクトル」なので原点から目盛を数えることに意味はない。</small>
ここで<math>V</math>に何かしらの座標が設定されていれば、その座標系の変数の組をベクトルと見做すことで場を「通常のスカラー関数・ベクトル関数」として扱えるのである。
則ち、「滑らかな場」という概念は「滑らかな関数」として定義することができる。より具体的に言うと、スカラー場・ベクトル場が'''滑らか'''であるとは対応するスカラー関数・ベクトル関数が<math>C^\infty</math>級であることである。但し、滑らかさは任意の座標変換で保たれるわけではないことに注意が必要である(後述の座標変換テンソル及びその逆行列の全ての成分関数が滑らかである必要がある)。
ここで、二変数関数の極値を思い返してみる。
<math>z=f(x, y)</math>が<math>(a, b)</math>で極大であるとは<math>\begin{pmatrix} x \\ y \end{pmatrix}\neq\begin{pmatrix} a \\ b \end{pmatrix}</math>として
:<math>\exist \delta>0, \forall {\scriptstyle\left(\begin{array}{c} x \\[-6pt] y \end{array}\right)} \in \mathbb{R}^2, {\scriptstyle\left\| \left(\begin{array}{c} x \\[-6pt] y \end{array}\right) - \left(\begin{array}{c} a \\[-6pt] b \end{array}\right) \right\|} < \delta \implies f(x, y) \leq f(a, b)</math>
という定義だった。
<math>z=f(x, y)</math>は曲面を表すが、これを<math>z</math>軸正方向から<math>xy</math>平面に射影するとその陰が<math>(x, y)</math>の動く範囲となるのであった。
ここで<math>\boldsymbol{x}:=\begin{pmatrix} x \\ y \end{pmatrix}, \boldsymbol{\alpha}:=\begin{pmatrix} a \\ b \end{pmatrix}</math>とすると<math>z=f(x, y)</math>はスカラー場<math>z=\phi(\boldsymbol{x})</math>と解釈することができ、更に条件法の前件は<math>\boldsymbol{\alpha}</math>の<math>\delta</math>-開球(二次元なので開円板)である。
なので、極大値の定義式をベクトル解析的に解釈すると「<math>xy</math>平面の各点に<math>z</math>の値を割り当てた数分布に於いて、開円板<math>B_\delta(\boldsymbol{\alpha})</math>内部に於ける<math>z</math>の最大値が<math>\phi(\boldsymbol{\alpha})</math>となるような正数<math>\delta</math>が存在する」ということである。
ベクトル場の例としては、電場・磁場・重力場などが挙げられる。
スカラー場の例としては、電位分布・温度分布・圧力分布などが挙げられる。
例えば、ベクトル場<math>\boldsymbol{f}=(x, 0, 0)</math>は、<math>\mathbb{R}^3</math>内の平面<math>x=k</math>上の任意点に、その点を始点とするベクトル<math>\begin{pmatrix} k \\ 0 \\ 0 \end{pmatrix}</math>が存在する状態を表す。
ベクトル場の和は、出力ベクトルの型が同じならばベクトル場の成分の和をとったものに等しい。
例えば、<math>\boldsymbol{f}(x, y, z)=(y, z, x), \boldsymbol{g}(x, y, z)=(z, x, y)</math>について
:<math>(\boldsymbol{f}+\boldsymbol{g})(x, y, z)=(y, z, x)+(z, x, y)=(y+z, z+x, x+y)</math>である。
これは、ベクトル場の加法の定義が
:<math>\forall p \in V, (\boldsymbol{f}+\boldsymbol{g})(p):=\boldsymbol{f}(p)+\boldsymbol{g}(p)</math>
となっていて且つ<math>V</math>に座標を入れればベクトル関数の加法則をそのまま適用できるためである(入力点が異なるとき、場同士は足すことができない)。
曲線<math>\{\boldsymbol{x}\in\mathbb{R}^2 \mid \varphi(\boldsymbol{x})=\mathrm{const}.\}</math>を'''等高線'''(等高曲線)、曲面<math>\{\boldsymbol{x}\in\mathbb{R}^3 \mid \varphi(\boldsymbol{x})=\mathrm{const}.\}</math>を'''等位面'''(等位曲面)という。これらの詳細は後述する。
==曲線論・曲面論==
===曲線===
<math>xy</math>平面上の曲線は<math>y=f(x) (x\in[a, b])</math>という陽関数表示で扱うことが多かった。しかし、これだと自分自身と交わる('''自己交叉'''する)曲線や<math>x=x_0</math>に対して<math>f(x_0)</math>の値が複数存在する(<math>f</math>が'''多価関数''')場合に不都合が生じる。
例えば円を陽関数表示しようとすると
:<math>x^2+y^2=r^2</math>を<math>y</math>に就いて解いて
:<math>y=\pm\sqrt{r^2-x^2}</math>
則ち
:<math>y=\begin{cases} \sqrt{r^2-x^2} & (y\geq0) \\ -\sqrt{r^2-x^2} & (y<0) \end{cases}</math>
という多価関数が必要になる。
これだと端点の振舞を一々調べる必要があって曲線の連続性や接線の議論が煩雑になってしまう。
しかし、先程も述べたように曲線の媒介変数表示はベクトル関数として見れるのであった。
:<math>\boldsymbol{r}(\theta) = r\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}</math>(再掲)
こうすると一変数連続ベクトル関数によって曲線を表すことが可能である。物理的に捉えると「質点の運動の軌跡を原点からの位置ベクトルの時間変化で表す」ということである。
一般に、<math>\boldsymbol{r}\in\mathbb{R}^n, t \in I</math>としてベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>の解集合<math>\{\boldsymbol{r}(t) \mid t \in I \}</math>は<math>n</math>次元空間内の曲線<math>C</math>を表す。これを<math>C</math>の'''ベクトル表示'''という。
ベクトル表示は成分表示に直せば<math>\boldsymbol{r}(t)=\sum_i r_i(t)\boldsymbol{e}_i</math>となる。これは媒介変数表示<math>\begin{cases} x_1&=&r_1(t) \\ x_2&=&r_2(t) \\ &\,\,\vdots& \\ x_n&=&r_n(t) \end{cases}</math>をベクトル表記したものに一致する。
例えば、<math>\boldsymbol{r}(t)=\begin{pmatrix} a\cos t \\ a\sin t \\ bt \end{pmatrix}</math>は'''常螺旋'''(弦巻線)のベクトル表示である。
パラメータが増加するときの点の移動方向を曲線の'''正の向き'''と定める。曲線の'''負の向き'''はパラメータが減少するときの点の移動方向である。このとき、パラメータで'''向き付け'''された曲線という表現もなされる。曲線<math>C</math>に対し、同じパラメータを用いた逆向きの曲線を<math>-C</math>と表す。ベクトル表示では<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>に対して<math>-C:\boldsymbol{r}=\boldsymbol{r}(-t)</math>ということである。
パラメータに関する変数変換<math>u=\phi(t)</math>を考える。但し、<math>\phi</math>は広義単調関数とする<sup>※</sup>。このとき、<math>\frac{du}{dt}</math>が非負ならば曲線の向き付けが保たれ、非正ならば向き付けが反転する。<math>\frac{du}{dt}=0</math>となる領域では点の運動が停止する。
<small>※<math>\phi</math>が非単調関数のときは曲線上の点が行ったり来たりすることになるため曲線のパラメータ表示としては扱いづらい。</small>
<math>\boldsymbol{r}(t) \in C^1</math>且つ<math>\boldsymbol{r}'(t)\neq\boldsymbol{0}</math>であるとき、曲線<math>C</math>は'''滑らか'''であるという。
滑らかな曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>に対して<math>\boldsymbol{r}'(t)</math>を<math>C</math>の'''速度ベクトル'''という。
<math>\overrightarrow{\mathrm{OP}}=\boldsymbol{r}</math>として点<math>\mathrm{P}(t)</math>に於ける速度ベクトルは<math>\lim_{\Delta t\to0}\frac{\boldsymbol{r}(t+\Delta t)-\boldsymbol{r}(t)}{\Delta t}</math>の極限ベクトルであるが、<math>\boldsymbol{r}(t+\Delta t)-\boldsymbol{r}(t)</math>を図示することで速度ベクトルが曲線<math>C</math>の点<math>\mathrm{P}(t)</math>に於ける接線の方向ベクトルになっていることがわかる。よって、速度ベクトルを'''接線ベクトル'''(接ベクトル)ともいう。
速度ベクトルが非零である曲線を'''正則'''な曲線と呼ぶ。滑らかな曲線は正則曲線である。
なお、一般には陽関数表示が区分的であることとベクトル表示の成分関数が区分的であることに対応はないほか、パラメータの取り方で速度ベクトルが変わるので「曲線の幾何学的滑らかさ」と「ベクトル表示した関数の解析学的滑らかさ」は一致するとは限らない。
正則な曲線に対して曲線長('''弧長''')を考える。
二次元曲線の場合は数学Ⅲで既に扱った。
:<math>L=\int_a^b \sqrt{\left(\frac{dx}{dt}\right)^2+\left(\frac{dy}{dt}\right)^2}dt</math>
実は、これを一般の<math>n</math>次元にそのまま拡張することができる。
{{定理|(弧長公式)}}
曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>の点<math>\mathrm{P}(a)</math>から点<math>\mathrm{P}(b)</math>までの長さ(<math>a<b</math>)は
:<math>L=\int_a^b \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>
で与えられる。
{{定理終わり}}
*証明
:<math>a=t_0, b=t_m</math>として閉区間<math>[a, b]</math>を各<math>t_i</math>で等分割する。このとき小区間<math>[t_{k-1}, t_k]</math>の長さは<math>\Delta t=\frac{b-a}{m}</math>。
:<math>C</math>の点<math>\mathrm{P}(a)</math>から点<math>\mathrm{P}(b)</math>までの長さ<math>L</math>は折れ線の長さ<math>\overline{\mathrm{P}(t_{k-1})\mathrm{P}(t_k)}</math>の総和で近似される。
:ここで<math>\overrightarrow{\mathrm{OP}}=\boldsymbol{r}(t)</math>より
::<math>L_m=\sum_{k=1}^m \| \boldsymbol{r}(t_k)-\boldsymbol{r}(t_{k-1}) \| = \sum_{k=1}^m \left\| \frac{\boldsymbol{r}(t_{k-1}+\Delta t)-\boldsymbol{r}(t_{k-1})}{\Delta t-0} \right\|(\Delta t-0)</math>
:分割を限りなく細かくする極限をとると<math>m\to\infty</math>より<math>\Delta t\to0</math>なので
::<math>\lim_{m\to\infty} L_m = \sum_{k=1}^\infty \left\| \frac{d\boldsymbol{r}}{dt}(t_{k-1}) \right\|dt</math>
:区分求積法より最後の無限級数は収束して
:<math>L=\int_a^b \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>//
ここで、<math>dl:=\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>という微小量を'''線素'''と呼ぶ。
1を線素に関して積分したパラメータ<math>s:=\int_0^t dl</math>を'''弧長パラメータ'''(標準パラメータ)という。弧長パラメータは曲線上で「基準点からの符号付き距離」を表す。
曲線の弧長パラメータによるベクトル表示('''弧長パラメータ表示''')を考える。<math>s=\int_0^t \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>で正則よりノルムは正。則ち<math>\frac{ds}{dt}>0</math>より<math>s=\phi(t)</math>は狭義単調増加なので、逆関数<math>t=\phi^{-1}(s)</math>を考えることができる。よって、<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>に<math>t=\phi^{-1}(s)</math>を代入した<math>\boldsymbol{r}=\boldsymbol{r}(\phi^{-1}(s))</math>が弧長パラメータ表示である。これを<math>\boldsymbol{r}=\boldsymbol{r}(s)</math>と略記してしまうことも多いが、'''一般には元の<math>\boldsymbol{r}(t)</math>と成分関数が異なる'''ことに注意。
通常の媒介変数によるベクトル表示は「座標系が予め与えられた状況」での表示であるが、弧長パラメータは座標系を取り替えたとしても表す曲線そのものが変わらなければ不変である。よって、「座標系に依存しない表記」として弧長パラメータ表示は多く利用されている。
また、弧長パラメータ表示で連鎖律を適用すると
:<math>\frac{d\boldsymbol{r}(s)}{ds}=\frac{d\boldsymbol{r}(t)}{dt}\cdot\frac{dt}{ds}=\frac{d\boldsymbol{r}(t)}{dt}\cdot\frac{1}{\frac{ds}{dt}}</math>
ここで微分積分学の基本定理より
:<math>\frac{ds}{dt}=\frac{d}{dt} \int_0^t \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt = \left\| \frac{d\boldsymbol{r}}{dt} \right\|</math>
なので
:<math>\frac{d\boldsymbol{r}(s)}{ds}=\frac{\frac{d\boldsymbol{r}(t)}{dt}}{\left\| \frac{d\boldsymbol{r}}{dt} \right\|}</math>
であり、自身のノルムで割ってるので恒等的に<math>\left\| \frac{d\boldsymbol{r}}{ds} \right\|=1</math>である。
よって、弧長パラメータ表示された曲線の接ベクトルは常に単位ベクトルである。
弧長パラメータ表示された曲線で線素を考えると<math>s=\int_0^s \left\| \frac{d\boldsymbol{r}(s)}{ds} \right\| ds = \int_0^s dl</math>だが、常に<math>\left\| \frac{d\boldsymbol{r}}{ds} \right\|=1</math>なので<math>ds=dl</math>であり、弧長パラメータの微小量は線素に等しい(弧長パラメータそのものが1の線素に関する積分なので当たり前ではある)。
<math>\boldsymbol{e}_\dagger(s)=\frac{d\boldsymbol{r}}{ds}</math>と置くと、点<math>\mathrm{P}(s_0)</math>に於ける接線の方程式は
:<math>\boldsymbol{p}-\boldsymbol{r}(s_0)=\boldsymbol{e}_\dagger(s_0) (s-s_0)</math>
と表される。
ここで<math>\boldsymbol{r}(s)</math>の中心<math>s_0</math>に於けるテイラー展開は
:<math>\boldsymbol{r}(s)=\sum_{i=0}^\infty \frac{(s-s_0)^i}{i!} \frac{d^i}{ds^i}\boldsymbol{r}(s_0) </math>
であり、「接線が一次近似に対応する」という構造はベクトル関数でも維持されることが判った。
領域<math>\boldsymbol{D}</math>上の滑らかなベクトル場<math>\boldsymbol{a}</math>について、微分方程式<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{a}(\boldsymbol{r}(t)) (\boldsymbol{r} \in \boldsymbol{D})</math>で与えられる曲線<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>を<math>\boldsymbol{a}</math>の'''流線'''(streamline)という(入力点を位置ベクトルと同一視していることに注意)。流線の接線ベクトルは元のベクトル場そのものになるので、ベクトルの相等から得る方程式<math>\frac{dx_1}{a_1}=\frac{dx_2}{a_2}=\cdots=\frac{dx_n}{a_n}</math>を'''流線方程式'''という。
例えば、<math>\boldsymbol{f}(x, y)=(y, x)</math>の流線は、
:定義から<math>\frac{dx}{dt}=y, \frac{dy}{dt}=x</math>
:合成関数の微分公式から<math>\frac{dy}{dx}=\frac{\frac{dy}{dt}}{\frac{dx}{dt}}=\frac{x}{y}</math>
:<math>\int y dy=\int xdx</math>
:<math>\frac{1}{2}y^2=\frac{1}{2}x^2+C</math>
:よって双曲線<math>y^2-x^2=2C</math>//
この場合、<math>t</math>に関する2つの微分方程式を組み合わせることで
:<math>\frac{d^2x}{dt^2}=x, \frac{d^2y}{dt^2}=y</math>という二階線型常微分方程式となり、一般解が双曲線関数を用いて<math>\begin{cases} x=C_1\cosh t+C_2\sinh t \\ y=C_1\sinh t+C_2\cosh t \end{cases}</math>であることが容易に判る。<br>なお、流線方程式を用いても<math>\frac{dx}{y}=\frac{dy}{x}</math>から<math>\frac{dy}{dx}=\frac{x}{y}</math>が出てくる。
「流線の接線ベクトルが元のベクトル場になる」とはつまり、「接線が常にベクトル場と平行になるような曲線」を考えているということである。滑らかなベクトル場を考えているためそのような曲線は常に存在する。流線は「ベクトル場の流れを繋げていった曲線」と考えることができるので、「流れを簡潔に図示」するのにちょうどよい。
有名な例として、電気力線・磁力線はそれぞれ電場<math>\boldsymbol{E}</math>・磁束密度<math>\boldsymbol{B}</math>の流線である。
流線の微分方程式を弧長パラメータ表示を用いて変形する。
:<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{a}(\boldsymbol{r}(t))</math>の左辺に就いて
:<math>\frac{d\boldsymbol{r}}{ds}\cdot\frac{ds}{dt}=\frac{d\boldsymbol{r}}{ds}\cdot \|\boldsymbol{r}'(\phi^{-1}(s))\|</math>
元の方程式の両辺でノルムをとると
:<math>\left\|\frac{d\boldsymbol{r}}{dt}\right\|=\|\boldsymbol{a}(\boldsymbol{r}(t))\|</math>
代入して
:<math>\frac{d\boldsymbol{r}}{ds}\cdot\|\boldsymbol{r}'(\phi^{-1}(s))\|=\frac{d\boldsymbol{r}}{ds}\cdot\|\boldsymbol{a}(\boldsymbol{r}(t))\|</math>
:<math>\therefore \frac{d\boldsymbol{r}}{ds} = \boldsymbol{e}_{\boldsymbol{a}(\boldsymbol{r}(\phi^{-1}(s)))}</math>
ここから、流線の形状はノルムには関係なく方向場のみで決まることがわかる。
===フレネ標搆===
ここでは、三次元空間に於ける正則曲線について考える。
<math>C:\boldsymbol{r}=\boldsymbol{r}(s)</math>上の点<math>\mathrm{P}(s)</math>に於ける単位接線ベクトルを<math>\boldsymbol{t}</math>とおく。
先程の議論より<math>\boldsymbol{t}(s)=\frac{d\boldsymbol{r}(s)}{ds}</math>であり、<math>\left\| \frac{d\boldsymbol{r}(s)}{ds} \right\|=1 (=\mathrm{const}.)</math>なので直交条件の定理から<math>\boldsymbol{t}\cdot\frac{d\boldsymbol{t}}{ds}=0</math>、則ち<math>\boldsymbol{t} \perp \frac{d\boldsymbol{t}(s)}{ds}</math>である。この<math>\frac{d\boldsymbol{t}(s)}{ds}</math>を'''主法線ベクトル'''という。
主法線ベクトルを<math>\boldsymbol{n}</math>とおくとき、<math>\boldsymbol{b}=\boldsymbol{t}\times\boldsymbol{n}</math>を'''従法線ベクトル'''(陪法線ベクトル)という。ここで先程の結果より<math>\boldsymbol{t}\perp\boldsymbol{n}</math>であって<math>\boldsymbol{b}</math>の定義より<math>\boldsymbol{t}\perp\boldsymbol{b}, \boldsymbol{n}\perp\boldsymbol{b}</math>なので、この3ベクトルの組を正規化した<math>\{\boldsymbol{e}_t, \boldsymbol{e}_n, \boldsymbol{e}_b \}</math>は<math>\mathbb{R}^3</math>の正規直交基底である。これを<math>\mathbb{R}^3</math>の'''フレネ標搆'''という。外積の結果よりフレネ標搆は<math>\boldsymbol{e}_t, \boldsymbol{e}_n, \boldsymbol{e}_b</math>の順に右手系をなす。なお、接線ベクトル・主法線ベクトル・従法線ベクトルは全て曲線の位置ベクトル<math>\boldsymbol{r}(s)</math>を入力したベクトル場として捉えることができる。
<math>\{\boldsymbol{e}_n, \boldsymbol{e}_b \}</math>の張る平面を'''法平面'''、<math>\{\boldsymbol{e}_t, \boldsymbol{e}_b \}</math>の張る平面を'''展直平面'''、<math>\{\boldsymbol{e}_t, \boldsymbol{e}_n \}</math>の張る平面を'''接触平面'''という。
即ち、法平面・展直平面・接触平面は<math>tnb</math>空間の点<math>\mathrm{P}(s)</math>を原点とした基準面である。
平面の方程式の法線ベクトルに接ベクトル・主法線ベクトル・従法線ベクトルをそれぞれ代入することで
:法平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{t}(s)=0</math>
:展直平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{n}(s)=0</math>
:接触平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{b}(s)=0</math>
とわかる。
<math>\|\boldsymbol{t}\|=1</math>は常に成り立つが<math>\|\boldsymbol{n}\|, \|\boldsymbol{b}\|</math>は<math>1</math>とは限らない。そこで、主法線ベクトルの大きさ<math>\kappa(s)=\|\boldsymbol{n}(s)\|</math>を曲線<math>C</math>の'''曲率'''と呼ぶことにする。なお、<math>\|\boldsymbol{b}\|=\| \boldsymbol{t} \| \|\boldsymbol{n}\|\sin\frac{\pi}{2}</math>より<math>\|\boldsymbol{b}\|=\|\boldsymbol{n}\|=\kappa</math>が成り立つ。
主法線ベクトルの定義に立ち戻ると<math>\boldsymbol{n}(s)=\frac{d\boldsymbol{t}(s)}{ds}</math>であった。つまり、主法線ベクトルは接ベクトルの速度ベクトルなので「弧長パラメータを変化させたときに接ベクトルがどのくらい変化するか」という指標である。接ベクトルの変化の大小と<math>\kappa</math>の大小は対応し、接ベクトルの大小はカーブの緩急に対応することから<math>\kappa</math>の大小とカーブの緩急も対応する。これが「曲率」という名前の由来である。
なお、<math>\kappa(s)=0</math>の場合は<math>\boldsymbol{n}(s)=\boldsymbol{0}</math>なので<math>\boldsymbol{t}(s)=\boldsymbol{k}</math>(定ベクトル)であり、<math>\boldsymbol{r}(s)=s\boldsymbol{k}</math>という直線の場合に対応することがわかる。
単位接ベクトルの<math>s</math>を微分変数とする導関数(<math>s</math>-導関数)は主法線ベクトルだったが、単位主法線ベクトル・単位従法線ベクトルの<math>s</math>-導関数がどのように表されるか見ていく。
ここで、フレネ標搆が<math>\mathbb{R}^3</math>の正規直交基底であることから、<math>\frac{d\boldsymbol{e}_n}{ds}, \frac{d\boldsymbol{e}_b}{ds}</math>ともにフレネ標搆の一次結合で表現できると予想される。
単位従法線ベクトルに就いて
:<math>\frac{d\boldsymbol{e}_b}{ds}=\frac{d}{ds}(\boldsymbol{e}_t\times\boldsymbol{e}_n)=\frac{d\boldsymbol{e}_t}{ds}\times\boldsymbol{e}_n+\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds}</math>
<math>\boldsymbol{t}=\boldsymbol{e}_t</math>より<math>\frac{d\boldsymbol{e}_t}{ds}=\boldsymbol{n}=\kappa\boldsymbol{e}_n</math>則ち<math>\frac{d\boldsymbol{e}_t}{ds}\times\boldsymbol{e}_n=\kappa\boldsymbol{e}_n\times\boldsymbol{e}_n=\boldsymbol{0}</math>なので
:<math>\frac{d\boldsymbol{e}_b}{ds}=\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds}</math>
<math>\|\boldsymbol{e}_n\|=1</math>から直交条件の定理より<math>\boldsymbol{e}_n\perp\frac{d\boldsymbol{e}_n}{ds}</math>なので
:<math>\boldsymbol{e}_n\times\frac{d\boldsymbol{e}_b}{ds}=\boldsymbol{e}_n\times(\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds})=\left(\boldsymbol{e}_n\cdot\frac{d\boldsymbol{e}_n}{ds}\right)-(\boldsymbol{e}_n\cdot\boldsymbol{e}_t)\frac{d\boldsymbol{e}_n}{ds}=\boldsymbol{0}</math>
外積が零ベクトルなので<math>\frac{d\boldsymbol{e}_b}{ds} /\!\!/ \boldsymbol{e}_n</math>であり、一次従属より
:<math>\frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n</math>
となるスカラー関数<math>\tau(s)</math>が存在する。
この<math>\tau(s)</math>を曲線<math>C</math>の'''捩率'''と呼ぶ。捩率は接触平面の回転(捩れ)の率を表す。
<math>\tau=0</math>ならば<math>\frac{d\boldsymbol{e}_b}{ds}=0</math>より<math>\boldsymbol{e}_b</math>方向は変化しないので曲線は接触平面と平行な平面上に拘束される。即ち、<math>C</math>は平面曲線である。
単位主法線ベクトルに就いて
:<math>\frac{d\boldsymbol{e}_n}{ds}=\frac{d}{ds}(\boldsymbol{e}_b\times\boldsymbol{e}_t)=\frac{d\boldsymbol{e}_b}{ds}\times\boldsymbol{e}_t+\boldsymbol{e}_b\times\frac{d\boldsymbol{e}_t}{ds}</math>
ここで<math>\frac{d\boldsymbol{e}_t}{ds}=\kappa\boldsymbol{e}_n, \frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n</math>を代入して
:<math>\frac{d\boldsymbol{e}_n}{ds}=-\tau\boldsymbol{e}_n\times\boldsymbol{e}_t+\boldsymbol{e}_b\times\kappa\boldsymbol{e}_n=\tau\boldsymbol{e}_b-\kappa\boldsymbol{e}_t</math>
よって、フレネ標搆の弧長パラメータを微分変数とする導関数を以下のようにフレネ標搆の一次結合で表すことができた。
:<math>\begin{cases} \frac{d\boldsymbol{e}_t}{ds}=\kappa\boldsymbol{e}_n \\ \frac{d\boldsymbol{e}_n}{ds} = \tau\boldsymbol{e}_b-\kappa\boldsymbol{e}_t \\ \frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n \end{cases}</math>
これを一次変換で表記すると以下のようになる。但し、厳密にはベクトルを成分としている部分は列ではなく行に配置するのが正しいことに注意。
{{定理|(フレネ=セレーの公式)}}
:<math>\frac{d}{ds}\begin{pmatrix} \boldsymbol{e}_t \\ \boldsymbol{e}_n \\ \boldsymbol{e}_b \end{pmatrix} = \begin{pmatrix} 0 & \kappa & 0 \\ -\kappa & 0 & \tau \\ 0 & -\tau & 0 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_t \\ \boldsymbol{e}_n \\ \boldsymbol{e}_b \end{pmatrix}</math>
{{定理終わり}}
表現行列が反対称行列(歪対称行列)になっているが、これは「直交変換を一次近似すると反対称変換になる」という無限小回転の理論に対応する。
捩率を求めるときは「基底分解の係数は対応する基底ベクトルとの内積に等しい」という性質を利用すれば<math>\boldsymbol{e}_b\cdot\frac{d\boldsymbol{e}_n}{ds}=\tau</math>となるので左辺を計算すればよい。
例えば、円<math>\begin{cases} x^2+y^2=a^2 \\ z=b \end{cases}</math>の曲率と捩率は以下のように求まる。
:媒介変数表示して<math>\boldsymbol{r}(t)=\begin{pmatrix} a\cos t \\ a\sin t \\ b \end{pmatrix}</math>
:接線ベクトルは<math>\frac{d\boldsymbol{r}(t)}{dt}=\begin{pmatrix} -a\sin t \\ a\cos t \\ 0 \end{pmatrix}</math>
:弧長パラメータ<math>s</math>は<math>s=\int^t_0 \left\|\frac{d\boldsymbol{r}(t)}{dt}\right\|dt = \int_0^t a dt = at</math>
:<math>\therefore t=\frac{s}{a}</math>
:<math>\boldsymbol{r}(s)=\begin{pmatrix} a\cos\frac{s}{a} \\ a\sin\frac{s}{a} \\ b \end{pmatrix}</math>
:<math>\boldsymbol{t}=\frac{d\boldsymbol{r}(s)}{ds}=\begin{pmatrix} -\sin\frac{s}{a} \\ \cos\frac{s}{a} \\ 0 \end{pmatrix}</math>
:<math>\boldsymbol{n}=\frac{d\boldsymbol{t}(s)}{ds}=\frac{1}{a}\begin{pmatrix} -\cos\frac{s}{a} \\ -\sin\frac{s}{a} \\ 0 \end{pmatrix}</math>
:<math>\kappa=\|\boldsymbol{n}\|=\frac{1}{a}</math>
:<math>\boldsymbol{b}=\boldsymbol{t}\times\boldsymbol{n} = \begin{pmatrix} 0 \\ 0 \\ \frac{1}{a} \end{pmatrix}</math>
:<math>\boldsymbol{e}_n=\begin{pmatrix} -\cos\frac{s}{a} \\ -\sin\frac{s}{a} \\ 0 \end{pmatrix}</math>
:<math>\frac{d\boldsymbol{e}_n}{ds}=\frac{1}{a}\begin{pmatrix} \sin\frac{s}{a} \\ -\cos\frac{s}{a} \\ 0 \end{pmatrix}</math>
:<math>\boldsymbol{e}_b = \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}</math>
:<math>\tau = \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}\cdot\frac{1}{a}\begin{pmatrix} \sin\frac{s}{a} \\ -\cos\frac{s}{a} \\ 0 \end{pmatrix}=0</math>//
フレネ・セレーの公式は[[線型代数学続論/行列値関数|行列関数]]に関する一階常微分方程式である。そのため、微分方程式の基本定理(ピカール=リンデレーエフの定理)により初期条件(<math>s=0</math>に於けるフレネ標搆)を与えれば、滑らかな曲率関数・捩率関数の組<math>(\kappa, \tau)</math>を定めることで微分方程式の解として一般の<math>s</math>に対するフレネ標搆を一意に得る。このとき、曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(s)</math>は接ベクトルを出発点を選んで積分することで決定される。
従って、次の定理が成り立つ<!-- 厳密証明はhttps://sshmathgeom.private.coocan.jp/diffgeom/curvetheorem.htmlを参照 -->。
{{定理|(曲線の基本定理)}}
開区間<math>(a,b)</math>上の実数<math>s</math>を変数とする2つの滑らかな関数<math>\kappa(s),\tau(s)</math>を与える。但し、<math>\kappa(s)</math>は正とする。<br/>
このとき、<math>\kappa(s)</math>を曲率、<math>\tau(s)</math>を捩率、<math>s</math>を弧長パラメータとする三次元空間上の曲線<math>C</math>が剛体運動を除いて一意に定まる。
{{定理終わり}}
剛体運動とは「曲線の形を変えない」運動のことである(平行移動・回転など)。
<math>\kappa(s), \tau(s)</math>の定める曲線族を一般に<math>\mathcal{C}[\kappa, \tau]</math>と書く。
例えば、円を含む螺旋は<math>c_1, c_2=\mathrm{const}.</math>として<math>\mathcal{C}[c_1, c_2]</math>と書ける。
<math>R=\frac{1}{\kappa}</math>を'''曲率半径'''という。曲率半径は曲線の特定のカーブにおける曲がり具合の急さを表す指標であり、カーブを近似する真円('''密着円''')の半径でもある。高速道路の標識で<math>R=\circ\circ \mathrm{m}</math>は、そのカーブの曲率半径を示している。道路設計では、快適なドライブの為曲率半径がなるべく大きくなるように工夫を凝らしている。
ここで<math>\boldsymbol{r}(s)</math>の中心<math>s_0</math>に於けるテイラー展開は
:<math>\boldsymbol{r}(s)=\sum_{i=0}^\infty \frac{(s-s_0)^i}{i!} \frac{d^i}{ds^i}\boldsymbol{r}(s_0) </math>(再掲)
だったが、二次近似式(三次以降を切り捨てた式)を考えると
:<math>\boldsymbol{r}(s) \fallingdotseq \boldsymbol{r}(s_0)+\frac{d\boldsymbol{r}(s_0)}{ds}(s-s_0) + \frac{1}{2}\frac{d^2\boldsymbol{r}(s_0)}{ds^2}(s-s_0)^2 </math>
フレネ標搆を用いて書き直すと
:<math>\boldsymbol{r}(s) \fallingdotseq \boldsymbol{r}(s_0)+\boldsymbol{e}_t(s-s_0) + \frac{1}{2}\kappa(s_0)\boldsymbol{e}_n(s-s_0)^2 </math>
二次近似とは「曲線を円弧で近似する」ことだったので曲率<math>\kappa(s_0)</math>が近似に用いる円弧と関係ある量であることが予想される。<br/>
接触平面で密着円<math> \| \boldsymbol{r} - (\boldsymbol{r}(s_0)+R\boldsymbol{e}_n) \| = R </math>を考える。接触平面を<math>xy</math>平面と考えると円の方程式は
:<math>x^2+(y-R)^2=R^2</math>
:<math>y=R-\sqrt{R^2-x^2}</math>
テイラー展開して
:<math>y=\frac{x^2}{2R}+O(x^4)</math>
二次の項を比較すると
:<math>\frac{x^2}{2R}=\frac{(s-s_0)^2}{2}\kappa</math>
よって
:<math>R=\frac{1}{\kappa}</math>
と定義するのは妥当である。
なお、先ほど求めた円の曲率から、真円に関して「曲率半径=半径」であることが判る。
フレネ・セレーの公式で最初の二行二列のみを考えると<math>\mathbb{R}^2</math>内の曲線に対するフレネ・セレーの公式を得る。一般に<math>\mathbb{R}^n</math>上の曲線に対し、今回の議論と同様にして接ベクトル・主法線ベクトル・曲率を定義することができる。但し、三次元空間と異なって同じ曲率に対して異なる曲線を与えることができる(主法線ベクトルが接触平面内で接ベクトルに対して左右どちらを向くかがそのままでは定まらないため)。なお、4次元以上であっても平面拘束曲線ならば捩率は0であって従法線ベクトルは零ベクトルに定まる。
===単純閉曲線===
パラメータ区間を<math>I=[a, b]</math>とする。
このとき、曲線の端点はそれぞれ<math>\mathrm{P}(a), \mathrm{P}(b)</math>である。
端点が一致する、つまり<math>\mathrm{P}(a)=\mathrm{P}(b)</math>である連続曲線を'''閉曲線'''という。
自己交叉しない、つまり<math>\forall t_1, t_2 \in (a, b), t_1 \neq t_2 \iff \mathrm{P}(t_1)\neq\mathrm{P}(t_2)</math>となる閉曲線を'''単純閉曲線'''(ジョルダン曲線)という。閉曲線でない曲線に就いて「自己交叉しない」という条件は「曲線を表すベクトル関数が単射」と同値であるので、端点のみ単射性を外してやれば単純閉曲線の定義を得る。
幾何学的直観から、平面に拘束された単純閉曲線はその平面を単純閉曲線で囲まれた'''内部'''とそうでない'''外部'''の二つの領域に分割することが予想できる。
このことは以下の定理によって保証される。
{{定理|(ジョルダンの曲線定理)}}
平面<math>\Pi\subset\mathbb{R}^n</math>内の任意の単純閉曲線<math>\gamma</math>に対し、有界領域<math>I</math>・非有界領域<math>O</math>の組であって<math>\Pi\setminus\gamma=I \sqcup O</math>且つ<math>\partial{I}=\partial{O}=\gamma</math>であるものが唯一つに定まる。
{{定理終わり}}
この<math>I, O</math>をそれぞれ内部・外部と定義する。証明は[[位相幾何学]]で行う。なお、「<math>\partial{I}=\partial{O}=\gamma</math>」を態々明示しているのは、滑らかでない単純閉曲線に対しては「<math>\Pi\setminus\gamma=I \sqcup O \implies \partial{I}=\partial{O}=\gamma</math>」が自明でないためである。
正則単純閉曲線に対して「曲線の向き」の幾何学的意味を考える。
ジョルダンの曲線定理より単純閉曲線<math>\gamma:\boldsymbol{r}=\boldsymbol{r}(s) \quad(\boldsymbol{r}\in \Pi)</math>は平面<math>\Pi</math>を内部<math>I</math>と外部<math>O</math>に分割する。平面拘束曲線なので<math>\forall{s}, \tau(s)=0</math>であり、従法線ベクトルは零ベクトル且つ接触平面が常に<math>\Pi</math>に一致する。
主法線ベクトル<math>\boldsymbol{n}(s)</math>が接ベクトル<math>\boldsymbol{t}(s)</math>に対して左側を向いているとすると、<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0) \quad(\varepsilon>0)</math>が点<math>\mathrm{P}(s_0)</math>に於ける<math>\gamma</math>の進行方向左側にある点である。
ここで、<math>\mathrm{P}(s_0)</math>に於ける<math>\varepsilon</math>-開球<math>B_\varepsilon(s_0)</math>を考えると、平面<math>\Pi</math>上では<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0)</math>が左側の領域、<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0)</math>が右側の領域に入る。
<math>s=s_0</math>を動かすと各点で進行方向左は<math>I, O</math>のいずれかであり、<math>\gamma</math>の正則性と<math>I, O</math>の連結性から「<math>I, O</math>のどちらが左側であるかは曲線全体で変わらない」ことが言える。
ここで円の場合を考える。<math>\Pi</math>に直交座標<math>u, v</math>を入れると向心加速度の議論から「加速度ベクトル=主法線ベクトルは円の中心を向く」ので、「円の正の向きは円の内部を左手に見る進行方向」である。
任意の正則単純閉曲線<math>\gamma</math>に対して自己交叉を起こさないまま円へ連続変形する可逆写像が存在し、その変形に於いて「左側」と「<math>I, O</math>」の対応は変化しない。則ち、円で確認された「正の向きは囲まれた内部を左手に見る向き」は任意の正則単純閉曲線で成り立つ。
つまり、単純閉曲線の正の向きは点を動かしたときに'''自身の囲む領域の内部を左手に見る向き'''である。負の向きは左手に外部を見る向きである。
集合<math>A</math>に含まれる任意の2点に対してそれらを端点とする滑らかな曲線<math>C</math>をとれるとき、<math>A</math>は'''弧状連結'''であるという。
弧状連結集合<math>S</math>内の任意の閉曲線<math>\gamma</math>に対して1点に退化するような連続変形が可能なとき、<math>S</math>は'''単連結'''であるという。単連結でない集合は'''多重連結'''であるという。
平面<math>\Pi\subset\mathbb{R}^n</math>に含まれる単連結集合<math>S</math>に対し、<math>\hat{\Pi}:=\Pi\cup\{\infty\}</math>とすると集合<math>\hat{\Pi}\setminus{S}</math>は連結である。逆も成り立つ。
なお、「<math>A</math>が連結集合である」ことは「補集合<math>\overline{A}</math>が非連結集合である」ことを意味しない。そのため「単連結な連結集合」も考えられ、特に「単連結な領域」はこの先頻繁に登場する。
集合<math>A</math>に含まれる任意の2点を結んだ線分が<math>A</math>に包含されるとき、<math>A</math>は'''凸型'''であるという。凸型集合でない集合は'''凹型'''であるという。
集合<math>A</math>内の1点を固定してそこから<math>A</math>内任意点へ引いた線分が<math>A</math>に包含されるとき、<math>A</math>は'''星状'''(星型)であるという。このとき固定した点を'''星の中心'''という。凸型集合は全て星状集合である。
単純閉曲線<math>\gamma</math>を境界とする内部<math>I</math>に関して<math>I\cup\gamma</math>が凸型集合であるとき、<math>\gamma</math>を'''卵形線'''(凸単純閉曲線・オーヴァル)という。
曲線<math>C</math>の曲率関数<math>\kappa(s)</math>が<math>C^3</math>級であるとき、<math>\kappa'(s_0)=0</math>を満たす点<math>\mathrm{P}(s_0)</math>を<math>C</math>の'''頂点'''という。
例えば、標準楕円<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}=1</math>の頂点は4点<math>(\pm{a},0),(0,\pm{b})</math>である。このことは、<math>\mathbb{R}^2</math>上曲線<math>C:\boldsymbol{r}=x(t)\boldsymbol{e}_x(t)+y(t)\boldsymbol{e}_y(t)</math>に対する曲率の公式<math>\kappa(t)=\frac{\left|\frac{dx}{dt}\frac{d^2y}{dt^2}-\frac{dy}{dt}\frac{d^2x}{dt^2}\right|}{\left\{\left(\frac{dx}{dt}\right)^2+\left(\frac{dy}{dt}\right)^2\right\}^\frac{3}{2}}</math>と<math>\frac{ds}{dt}>0</math>を用いて確かめられる。
実は、この事実は楕円に限らないことが以下の定理で示される。
{{定理|(ムコパディヤーヤの定理・四頂点定理)}}
<math>\mathbb{R}^2</math>上の滑らかな卵形線は少なくとも4つの頂点を持つ。
{{定理終わり}}
*証明
:滑らかな卵形線<math>C:\boldsymbol{r}=\boldsymbol{r}(s)\quad(s\in[a, b])</math>に対して曲率関数<math>\kappa(s)</math>は滑らかであり、<math>\kappa\in C^3</math>を満たす。
:卵形線は単純閉曲線なので<math>\mathrm{P}(a)=\mathrm{P(b)}</math>であり、<math>\kappa(a)=\kappa(b)</math>。
:曲率関数が定数関数のときは<math>\kappa\in C^\infty</math>且つ常に<math>\kappa'(s)=0</math>なので曲線を構成するすべての点が頂点であり、明らかに定理を満たす。
:曲率関数が定数関数でないとする。
:ワイエルシュトラスの極値定理より<math>\kappa(s)</math>は<math>s\in[a, b]</math>のどこかで最大値・最小値をとり、その点で<math>\kappa'(s)=0</math>を満たす。
:従って少なくとも2つの頂点を持つ。
:ここで、頂点がこの2つのみと仮定する。
:曲率が最大値・最小値をとる点をそれぞれ<math>\mathrm{M, N}</math>と置く。
:線分<math>\mathrm{MN}</math>を含む直線を<math>x</math>軸とし、その垂直方向に<math>y</math>軸をとる。
:<math>s</math>が増加すると曲線上の点が<math>\mathrm{N}\to\mathrm{M}</math>のように動くとき、
:<math>\kappa(s)</math>は最小値から最大値に向かって増大し、他に頂点がないので狭義単調増加である。
:同様に、<math>\mathrm{M}\to\mathrm{N}</math>の向きでは<math>\kappa(s)</math>は狭義単調減少である。
:従って、<math>\kappa'(s)y(s)\neq0</math>の正の側だけ考えれば良い。
:<math>y(a)=y(b)=0</math>に注意すると部分積分して
:<math>0<\int_a^b \kappa'(s)y(s)ds=-\int_a^b \kappa(s)y'(s)ds</math>
:主法線ベクトル<math>\boldsymbol{n}(s)= \begin{pmatrix} \xi_1(s) \\ \xi_2(s) \end{pmatrix}</math>を考えると二次元版フレネ=セレーの公式から<math>\frac{d\boldsymbol{n}}{ds}=-\kappa\frac{d\boldsymbol{r}}{ds}</math>なので
:<math>\xi'_2(s)=-\kappa(s)y'(s)</math>
:よって
:<math>-\int_a^b \kappa(s)y'(s)ds=\int_a^b \xi_2(s)ds = \left[\xi_2(s)\right]_a^b=0</math>
:なので矛盾した不等式<math>0<0</math>を得る。
:則ち、<math>\mathrm{M, N}</math>と異なる点で<math>\kappa'(s)=0</math>を満たす点が少なくとも一つ存在する。
:そのような点を<math>\mathrm{L}</math>と置く。
:<math>\mathrm{L}</math>が<math>\mathrm{N}\to\mathrm{M}</math>という経路の途中にあるとする。
:このとき、<math>\mathrm{L}</math>以外に<math>\kappa'(s)=0</math>を満たす点が存在すると「<math>\mathrm{M}\to\mathrm{N}</math>という経路の途中にそのような点が無い」という最初の仮定に反するので
:<math>\mathrm{M, N, L}</math>以外では<math>\kappa'(s)y(s)>0</math>である。
:同様に部分積分を行うことで矛盾した不等式を得、<math>\mathrm{M, N, L}</math>と異なる点で<math>\kappa'(s)=0</math>を満たす点が少なくとも一つ存在することが判る。
:この時点で「<math>\mathrm{M, N}</math>間の二つの経路のいずれにも<math>\kappa'(s)=0</math>を満たす点が存在しない」という仮定が否定されたのでこれ以上背理法を適用することはできない。
:よって、頂点個数の最小値は<math>4</math>である。//
最小値4をとる卵形線が実際に存在することは楕円の例で確かめた。
この定理は「卵形線」を「(正則)単純閉曲線」に取り換えてもそのまま成り立つことが知られている。一般の閉曲線でこの定理を成り立たせるには追加の条件が必要となる。
先程も述べたように、接ベクトルと単位主法線ベクトルは2次元以上の空間内部にある曲線ならば定義することができる。そして、<math>\boldsymbol{t}\cdot\boldsymbol{n}=0</math>も必ず成り立つ。よって、<math>\boldsymbol{e}_t\cdot\boldsymbol{e}_n=0</math>の両辺を<math>s</math>で微分して
:<math>\frac{d\boldsymbol{e}_t}{ds}\cdot\boldsymbol{e}_n+\boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=0</math>
:<math>\therefore \boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=-\boldsymbol{n}\cdot\boldsymbol{e}_n=-\kappa</math>
ここで「基底分解に於ける成分はその基底との内積に等しい」という性質から、<br/>
一般次元に於いても「<math>\frac{d\boldsymbol{e}_n}{ds}</math>の接線方向成分は<math>-\kappa(s)</math>」であることが判る。
ここで<math>C^2</math>級曲線の位置ベクトル<math>\boldsymbol{r}(s)</math>に対して単位主法線<math>\boldsymbol{e}_n(s)</math>を対応させることを考える。この対応を'''ガウス表示'''という。
<math>\boldsymbol{e}_n(s)</math>を二次までテイラー展開すると<math>\Delta s>0</math>を微小量として
:<math>\boldsymbol{e}_n(s+\Delta s)=\boldsymbol{e}_n(s)+\frac{d\boldsymbol{e}_n(s)}{ds}\Delta s + O(\Delta s^2)</math>
ここで<math>\boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=-\kappa</math>より、<math>s</math>を<math>\Delta s</math>だけ動かしたときの接線方向の速さは<math>|\kappa(s)|\Delta s</math>である(<math>\kappa(s)</math>が正で正の向き、負で負の向きに動くとする)。
閉曲線に対してはガウス表示によって法線方向の変化を完全に捉えられるので、<math>\kappa(s)</math>を微小量<math>\Delta s</math>に関して積分した<math>\int_a^b \kappa(s)ds</math>を考えてみる。
ガウス表示では曲線を単位主法線ベクトルの描く単位円として考えることができる。閉曲線では<math>\mathrm{P}(a)=\mathrm{P}(b)</math>より明らかに<math>\boldsymbol{e}_n(a)=\boldsymbol{e}_n(b)</math>であり、閉曲線が一周する間にベクトル<math>\boldsymbol{e}_n(s)</math>はこの単位円を<math>m(\in\mathbb{Z})</math>周する<sup>※</sup>。
<small>※物理的には「円そのものが動いても円周上の質点は『この円をどっちの方向に何周したか』という情報しか持たない」ので、単位円が動くことは議論にあまり関係ない</small>
弧度法より単位円を<math>m</math>周する符号付き道のりは<math>2\pi{m}</math>であり、ガウス表示より<math>\int_a^b \kappa(s)ds=2\pi{m}</math>。
従って、<math>m=\frac{1}{2\pi}\int_a^b \kappa(s)ds</math>
この<math>m</math>を閉曲線の'''回転数'''と呼ぶことにする。
曲率が負の場合には積分値が途中で相殺されてしまうので、絶対値を付けて積分した
:<math>\mu:=\int_a^b |\kappa(s)|ds</math>
という量を考えることにする。
これを閉曲線の'''全曲率'''と呼ぶ。
全曲率に対して以下の定理が成り立つ。
{{定理|(フェンヒェルの定理)}}
滑らかな閉曲線の全曲率は<math>\mu\geq2\pi</math>を満たす。等号成立の場合は卵形線である。
{{定理終わり}}
証明は省略する。
===曲面===
多変数解析で既に扱った、三次元空間に於ける曲面の陽関数表示<math>z=f(x, y)</math>を'''モンジュ表示'''という。<math>f(x, y, z)=\mathrm{const}.</math>と陰関数表示された曲面は陰関数定理が成り立つ範囲でモンジュ表示に直すことができる。
一次式で陰関数表示される曲面を'''一次曲面'''という。平面の方程式より、一次曲面は全て平面である。
二次式で陰関数表示される曲面を'''二次曲面'''という。
以下、三次元空間に於ける二次曲面の例を挙げる。各係数は非退化条件を満たすとする。なお、「直線に平行な平面」は「直線を法線とする平面に垂直な平面」を意味することに注意。
*'''球面'''(sphere)
:高校数学で扱ったように、点<math>(a, b, c)</math>を中心とする半径<math>r</math>の球面の方程式は<math>(x-a)^2+(y-b)^2+(z-c)^2=r^2</math>である。この球面上の点の位置ベクトルは<math>\boldsymbol{r}=\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>なので、球面が満たすベクトル方程式は一般に<math>\|\boldsymbol{r}-\boldsymbol{a}\|=\mathrm{const}.</math>である。これは円のベクトル方程式の次元を上げたものである。
*'''楕円面'''(ellipsoid)
:楕円の方程式を拡張した方程式<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}+\frac{z^2}{c^2}=1</math>が表す曲面である。<math>xyz</math>空間の基本面で切った断面は全て楕円となる。
*'''楕円拋物面'''(elliptic paraboloid)
:楕円の平面拘束条件を外した方程式<math>z=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>が表す曲面である。<math>z</math>軸に垂直な平面で切った断面は楕円、平行な平面で切った断面は拋物線となる。
*'''双曲拋物面'''(hyperbolic paraboloid)
:双曲線の平面拘束条件を外した方程式<math>z=\frac{x^2}{a^2}-\frac{y^2}{b^2}</math>が表す曲面である。<math>z</math>軸に垂直な平面で切った断面は双曲線、平行な平面で切った断面は拋物線となる。また、原点は鞍点である。
*'''一葉双曲面'''(hyperboloid of one sheet)
:楕円面の方程式の一つの項の符号を変えた<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}-\frac{z^2}{c^2}=1</math>の表す曲面。<math>z</math>軸に垂直な平面で切った断面は楕円、平行な平面で切った断面は双曲線となる。
*'''二葉双曲面'''(hyperboloid of two sheet)
:楕円面の方程式の二つの項の符号を変えた<math>\frac{x^2}{a^2}-\frac{y^2}{b^2}-\frac{z^2}{c^2}=1</math>の表す曲面。断面の分類は一葉双曲面と同じだが、<math>m^2<c^2</math>のときは平面<math>z=m</math>と交わらないため「二葉」と名付けられている。
*'''錐面'''(conical surface)
:方程式<math>\frac{z^2}{c^2}=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>の表す曲面。<math>xy</math>平面との交点は原点のみであり、<math>yz</math>平面・<math>zx</math>平面で切った断面は直線である。
閉区間<math>I\subset\mathbb{R}</math>上の一変数ベクトル関数<math>\boldsymbol{r}(t)</math>を用いたベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t) \quad(t\in I)</math>の解集合は次元に依らず曲線を表した。
同様に、領域<sup>※</sup><math>D\subset\mathbb{R}^2</math>上の二変数ベクトル関数<math>\boldsymbol{r}(t, u)</math>を用いたベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t, u) \quad({\scriptstyle\left(\begin{array}{c} t \\[-6pt] u \end{array}\right)}\in D)</math>の解集合は次元に依らず曲面を表すと考えられる。
厳密には[[線型代数学/基底と次元|階数・退化次数の定理]]<!-- 次元定理・線型写像の基本定理 -->などを用いてこのことを確かめられる。
<small>※ここでいう「領域」は冒頭で厳密に定義した「領域」であることに注意。</small>
曲線と同様に、曲面の'''パラメータ表示'''と'''ベクトル表示'''は次のように定義される。
:パラメータ表示:<math>\begin{cases} x_1&=&r_1(t, u) \\ x_2&=&r_2(t, u) \\ &\,\,\vdots& \\ x_n&=&r_n(t, u) \end{cases}</math>
:ベクトル表示:<math>\left\{\boldsymbol{r}(t, u) \,\bigg|\, {\scriptstyle\left(\begin{array}{c} t \\[-6pt] u \end{array}\right)} \in D \right\}</math>
また、<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>のようにも表す。
例えば、<math>k>l>0</math>として<math>\boldsymbol{r}(t, u)=\begin{pmatrix} (k+l\cos u)\cos t \\ (k+l\cos u)\sin t \\ l\sin u \end{pmatrix} \quad(D=\left\{ \begin{pmatrix} t \\ u \end{pmatrix} \bigg| \begin{array}{c} 0 \leq t \leq 2\pi \\ 0 \leq u \leq 2\pi \end{array} \right\})</math>は'''トーラス'''のベクトル表示である。
<math>\mathbb{R}^3</math>上の平面の方程式は高校数学に於いて<math>\begin{pmatrix} a \\ b \\ c \end{pmatrix}\neq\boldsymbol{0}</math>として一次式<math>ax+by+cz+d=0</math>と表せることを学んだ。
これのベクトル方程式を求めてみよう。
:①<math>c=0</math>のとき
::平面の方程式は<math>\begin{cases} ax+by+d=0 \\ z=\mathrm{const}. \end{cases}</math>
::[1]<math>b=0</math>のとき
:::平面の方程式は<math>\begin{cases} ax+d=0 \\ y=\mathrm{const}. \\ z=\mathrm{const}. \end{cases}</math>
:::<math>\begin{pmatrix} a \\ b \\ c \end{pmatrix}\neq\boldsymbol{0}</math>より<math>a\neq0</math>
:::<math>y=t, z=u</math>と置換すると
:::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}=\begin{pmatrix} -\frac{d}{a} \\ t \\ u \end{pmatrix}</math>
:::<math>\boldsymbol{r} = t\begin{pmatrix} 0 \\ 1 \\ 0 \end{pmatrix}+u\begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}+\begin{pmatrix} -\frac{d}{a} \\ 0 \\ 0 \end{pmatrix}</math>
::[2]<math>b\neq0</math>のとき
:::<math>x=t, z=u</math>と置換すると
:::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}=\begin{pmatrix} t \\ -\frac{a}{b}t-\frac{d}{b} \\ u \end{pmatrix}</math>
:::<math>\boldsymbol{r} = t\begin{pmatrix} 1 \\ -\frac{a}{b} \\ 0 \end{pmatrix}+u\begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}+\begin{pmatrix} 0 \\ -\frac{d}{b} \\ 0 \end{pmatrix}</math>
:②<math>c\neq0</math>のとき
::<math>x=t, y=u</math>と置換すると
::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix} = \begin{pmatrix} t \\ u \\ -\frac{a}{c}t-\frac{b}{c}u-\frac{d}{c} \end{pmatrix}</math>
::<math>\boldsymbol{r}=t\begin{pmatrix} 1 \\ 0 \\ -\frac{a}{c} \end{pmatrix}+u\begin{pmatrix} 0 \\ 1 \\ -\frac{b}{c} \end{pmatrix} + \begin{pmatrix} 0 \\ 0 \\ -\frac{d}{c} \end{pmatrix}</math>
なお、ここから平面のベクトル方程式が一般に<math>\boldsymbol{r}=\boldsymbol{a}+t\boldsymbol{b}+u\boldsymbol{c}</math>という「直線のベクトル方程式を拡張した形」であることがわかる。
<math>\boldsymbol{r}(t, u)\in C^1</math>且つ<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \frac{\partial{\boldsymbol{r}}}{\partial{u}}\neq\boldsymbol{0}</math>である曲面を'''滑らか'''な曲面という。
曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>とその上の点<math>\mathrm{P}_0=(a, b)</math>に対し、曲線<math>\boldsymbol{r}=\boldsymbol{r}(a, u), \boldsymbol{r}=\boldsymbol{r}(t, b)</math>をそれぞれ点<math>\mathrm{P}_0</math>に於ける'''<math>t</math>曲線'''・'''<math>u</math>曲線'''という。
<math>\boldsymbol{r}(t, u)\in C^1</math>であるとき、偏導関数の定義から
:<math>\frac{\partial}{\partial{u}}\boldsymbol{r}(a, u)=\frac{d}{du}\boldsymbol{r}(a, u)</math>
:<math>\frac{\partial}{\partial{t}}\boldsymbol{r}(t, b)=\frac{d}{dt}\boldsymbol{r}(t, b)</math>
ここで<math>a, b</math>をそれぞれ<math>t</math>軸・<math>u</math>軸上で動かすことで<math>t</math>曲線・<math>u</math>曲線の接ベクトルがそれぞれ<math>\frac{\partial{\boldsymbol{r}}}{\partial{u}}, \frac{\partial{\boldsymbol{r}}}{\partial{t}}</math>であると判る。これらを曲面のパラメータ方向の'''接ベクトル'''という。
これらの接ベクトルが平行でないとき、曲面<math>S</math>上の任意の点<math>\mathrm{P}</math>に対して<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>の張る平面が定まる。これを曲面<math>S</math>の点<math>\mathrm{P}</math>に於ける'''接平面'''という。曲線の接線は一次元ベクトル空間<math>\left\{ \xi\frac{d\boldsymbol{r}}{dt} \bigg| \xi \in\mathbb{R} \right\}</math>で表されたが、曲面の接平面は二次元ベクトル空間<math>\left\{ \xi\frac{\partial{\boldsymbol{r}}}{\partial{t}}+\eta\frac{\partial{\boldsymbol{r}}}{\partial{u}} \bigg| \xi, \eta \in \mathbb{R} \right\}</math>で表される。このような接ベクトル全体が張るベクトル空間を一般に'''接空間'''と呼ぶ。
接ベクトルの組が一次独立である曲面を'''正則'''な曲面という。滑らかな曲面は正則曲面である。
曲面<math>S</math>の接平面に垂直なベクトルを<math>S</math>の'''法線ベクトル'''という。
三次元空間ならば接平面を張る2ベクトルの外積<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}} \times \frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>で求められる。
モンジュ表示された曲面<math>S:z=f(x, y)</math>に対して接平面の存在性(つまり曲面の正則性)は「二変数関数<math>f</math>の全微分可能」に対応した。ベクトル表示された曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>に対しては「ベクトル関数<math>\boldsymbol{r}</math>の全微分可能性」だけでは足りず、「ヤコビ行列<math>\frac{\partial{(\boldsymbol{r})}}{\partial{(t, u)}}</math>の階数が2」も要求される。
以下、正則曲面のみ扱う。
<math>\boldsymbol{r}(t, u)</math>の微小変化は全微分で与えられる。
:<math>d\boldsymbol{r}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+ \frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>
則ち、各パラメータを同時に<math>\begin{pmatrix} t \\ u \end{pmatrix}\to\begin{pmatrix} t+dt \\ u+du \end{pmatrix}</math>と単調に動かしたとき、対応する曲面上の点が描く領域は2ベクトル<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt, \frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>の張る微小平行四辺形として近似できる。その微小面積は線型代数の内容から
:<math>\sqrt{ \left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}}dt \right\|^2 \left\| \frac{\partial{\boldsymbol{r}}}{\partial{u}}du \right\|^2 - \left\{ \left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt\right)\cdot\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}du\right) \right\}^2 }=\sqrt{\left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}} \right\|^2\left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2 - \left( \frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \right)^2 } dtdu</math>
である。
これを領域<math>D=\mathrm{dom}\,S</math>で重積分してやれば曲面の表面積('''曲面積''')が求まると考えられる。
{{定理|(曲面積)}}
<math>E := \left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}} \right\|^2,\quad F := \frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}},\quad G := \left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2</math>とすると、<br>
曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>の領域<math>D</math>に於ける曲面積は
:<math>S=\iint_D \sqrt{EG-F^2}dtdu</math>
{{定理終わり}}
この<math>E, F, G</math>を<math>S</math>の'''第一基本量'''と呼ぶ。また、<math>dS:=\sqrt{EG-F^2}dtdu</math>を'''面素'''(面積素・面積要素)と呼ぶ。
<math>t, u</math>が共通のパラメータ<math>\theta</math>で媒介変数表示されるとき、曲面は曲線に退化するので線素を考えられる。
具体的には、
:<math>dl=\left\|\frac{d\boldsymbol{r}}{d\theta}\right\|d\theta</math>
より
:<math>\left\|\frac{d\boldsymbol{r}}{d\theta}\right\|^2=\frac{d\boldsymbol{r}}{d\theta}\cdot\frac{d\boldsymbol{r}}{d\theta}</math>
ここで合成関数の常微分公式より
:<math>\frac{d\boldsymbol{r}}{d\theta}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{d\theta}+ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{d\theta}</math>
なので
:<math>\frac{d\boldsymbol{r}}{d\theta}\cdot\frac{d\boldsymbol{r}}{d\theta}=\left\|\frac{d\boldsymbol{r}}{dt}\right\|^2\left(\frac{dt}{d\theta}\right)^2+2\left(\frac{d\boldsymbol{r}}{dt}\cdot\frac{d\boldsymbol{r}}{du}\right)\frac{dt}{d\theta}\frac{du}{d\theta}+\left\|\frac{d\boldsymbol{r}}{du}\right\|^2\left(\frac{du}{d\theta}\right)^2</math>
:<math>=E\left(\frac{dt}{d\theta}\right)^2+2F\frac{dt}{d\theta}\frac{du}{d\theta}+G\left(\frac{du}{d\theta}\right)^2</math>
よって
:<math>dl=\sqrt{E\left(\frac{dt}{d\theta}\right)^2+2F\frac{dt}{d\theta}\frac{du}{d\theta}+G\left(\frac{du}{d\theta}\right)^2}d\theta=\sqrt{E(dt)^2+2Fdtdu+G(du)^2}</math>
このように、線素は<math>\theta</math>のとり方に依存しない。
そこで、最後の式で右辺を二乗した
:<math>I:=E(dt)^2+2Fdtdu+G(du)^2</math>
を<math>S</math>の'''第一基本形式'''と定める。
第一基本形式は二次形式になっていることが見て取れるので、<math>\boldsymbol{v}:=\begin{pmatrix} dt \\ du \end{pmatrix}, \mathbf{K}:=\begin{pmatrix} E & F \\ F & G \end{pmatrix}</math>とおくと
:<math>I={}^t\!\boldsymbol{v} \mathbf{K} \boldsymbol{v}</math>
と行列表示できる。この<math>\mathbf{K}</math>を'''第一基本行列'''という。
ここで<math>I=dl^2>0</math>なので<math>\mathbf{K}</math>は正定値行列である。
また、<math>\boldsymbol{x}_i=\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \boldsymbol{x}_j=\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>と置いて第一基本量の定義を思い返してみると<math>\mathbf{K}_{ij}=\boldsymbol{x}_i \cdot \boldsymbol{x}_j</math>なのでこの行列は接ベクトルに関するグラム行列である。この意味でも、<math>\mathbf{K}</math>は正定値行列である。
また、面素の式で根号の中身が<math>\det\mathbf{K}</math>に等しいことも判る。
則ち、第一基本量が曲面の本質であると予想される。
<math>F=0 \land E=G=\lambda</math>であるとき、<math>\mathbf{K}=\lambda\mathbf{E}_2</math>である。このときのパラメータの組<math>(u, v)</math>を曲面の'''等温座標系'''という。
等温座標系で表示された曲面<math>S</math>に対し、第一基本形式は<math>I=\lambda(dt^2+du^2)</math>と二次形式の標準形となっている。則ち、等温座標系へのパラメータ変換は主軸変換である。
面素を考えると<math>dS=\lambda^2dtdu</math>と非常に単純な形となるほか、曲面上の角度計算が平面の場合と全く同じ式で与えられることも等温座標系の利点である。
曲面<math>S</math>上の各点<math>\mathrm{P}</math>に対して単位法線ベクトル<math>\boldsymbol{n}(\mathrm{P})</math>を考える。ベクトル表示の定義域<math>D</math>でベクトル場<math>\boldsymbol{n}(\mathrm{P})</math>が連続であるとき、<math>S</math>は'''向き付け可能'''であるという。
向き付け不能な曲面の例として<math>\boldsymbol{r}(t, u)=\begin{pmatrix} (u\cos t+2)\sin 2t \\ (u\cos t+2)\cos 2t \\ u\sin t \end{pmatrix} \quad(D=\left\{ \begin{pmatrix} t \\ u \end{pmatrix} \bigg| \begin{array}{c} 0 \leq t \leq \pi \\ -1 \leq u \leq 1 \end{array} \right\})</math>と表される'''メビウスの帯'''が挙げられる。
メビウスの帯が向き付け不能である証明を概説する。
:接ベクトルをそれぞれ求める。簡単のため<math>u=0</math>として考える。単位法線ベクトルは外積を正規化して得るが、向きの取り方で正負の符号が付く。どちらの符号を採用するにしろ<math>\boldsymbol{n}(\boldsymbol{r}(0, 0))\neq\boldsymbol{n}(\boldsymbol{r}(\pi, 0))</math>を得、<math>\boldsymbol{r}(0, 0)=\boldsymbol{r}(\pi, 0)</math>より同じ点に対して異なる法線ベクトルを出力するので<math>\boldsymbol{n}(\mathrm{P})</math>はwell-definedではなく、向き付け可能性の定義を満たさない。//
四次元以上の空間では法線ベクトルの方向を複数とれるため法線ベクトル場は扱いにくい。そこで、法線ベクトルに依らない定義を考えたい。
2つの滑らかな曲面<math>S_1, S_2</math>が以下を満たすとき、
#パラメータ<math>(t_1, u_1), (t_2, u_2)</math>の間に滑らかな全単射<math>\begin{cases}t_2 =\phi(t_1, u_1) \\ u_2=\psi(t_1, u_1) \end{cases}</math>が存在する。
#この変数変換のヤコビ行列<math>\frac{\partial{(\phi, \psi)}}{\partial{(t_1, u_1)}}</math>が正則。
#<math>\boldsymbol{r}_1(t_1, u_1)=\boldsymbol{r}_2(t_2, u_2)</math>
この2つは'''パラメータ変換で同値'''という。
このとき、ヤコビアンが正であるパラメータの組は'''同じ向き'''、負であるパラメータの組は'''逆向き'''であるという。
任意の<math>(t_1, u_1)</math>に対して開近傍<math>U \subset \mathrm{dom}\,S_1</math>をとったとき、どの<math>U</math>上でも<math>\det\frac{\partial{(\phi, \psi)}}{\partial{(t_1, u_1)}}>0</math>を満足するならば<math>S_1</math>は'''向き付け可能'''という。
向き付け可能な曲面の接空間に対して右手系を成すような向きの法線ベクトルを'''外向き法線ベクトル'''と呼ぶ。
外向き法線の向く側を曲面の'''表'''、その反対側を曲面の'''裏'''と定義する。
<math>\partial{S}=\varnothing</math>を満たす正則曲面<math>S</math>を'''閉曲面'''という。ジョルダンの曲線定理を拡張した定理('''ジョルダン・ブラウワーの分離定理''')によって閉曲面が空間を内部・外部に分割することが保証される。内部に面する向きを閉曲面の裏、外部に面する向きを閉曲面の表と定義する。
パラメータ空間の座標軸の向きの組み合わせが<math>xy</math>平面と同じとき、外向き法線で定義される閉曲面の表裏は内部・外部から定義される表裏に一致する。
===回転面===
ここでは三次元空間内の曲面について考える。
高校数学で回転体を扱ったが、領域の回転体の表面である曲面は元の領域の疆界である単純閉曲線を軸に関して回転したものである。そこで、平面上の任意の曲線を回転すると曲面('''回転面''')を得ると考えられる。
簡単な場合として、<math>x\geq0</math>で定義された<math>zx</math>平面上の曲線<math>z=f(x)</math>を<math>y</math>軸に関して回転させた回転面を考える。
:任意の<math>k\in[0,\infty)</math>に関して曲線上の点は<math>\begin{pmatrix} x \\ z \end{pmatrix}=\begin{pmatrix} k \\ f(k)\end{pmatrix}</math>と与えられる。
:領域<math>\left\{ {\scriptstyle\left(\begin{array}{c} x \\[-6pt] z \end{array}\right)} \big| x \leq k \right\}</math>を<math>y</math>軸に関して回転した回転体を平面<math>z=f(k)</math>で切った断面は半径<math>k</math>の閉円盤であり、疆界円周上の点を<math>\begin{pmatrix} x \\ y \\ f(k) \end{pmatrix}</math>とすると<math>k=\sqrt{x^2+y^2}</math>である。
:則ち回転体の疆界である回転面上の点<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>は方程式<math>z=f(\sqrt{x^2+y^2})</math>を満たし、逆にこの方程式を満たす<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>は回転面上にある。
纏めると以下のようになる。
{{定理|(回転面の方程式)}}
<math>zx</math>平面上の曲線<math>z=f(x)\quad(x\geq0)</math>を<math>y</math>軸に関して回転させた回転面の方程式は
:<math>z=f(\sqrt{x^2+y^2})</math>
{{定理終わり}}
<math>z</math>軸・<math>x</math>軸に関する回転面の方程式は変数を輪環の順に入れ替えることで得られる。
回転面に対し、元の曲線を'''母線'''という。
母線が直線である回転面は'''円錐'''である。
:<math>z=mx+n\quad(m\neq0,x\geq0)</math>とすれば<math>y</math>軸に関して回転した曲面の方程式は
:<math>z=m\sqrt{x^2+y^2}+n</math>
:<math>z-n = m\sqrt{x^2+y^2}</math>
これを両辺二乗すると
:<math>(z-n)^2=m^2x^2+m^2y^2</math>
であり、錐面の方程式<math>\frac{z^2}{c^2}=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>を満たしていることがわかる。
回転軸が傾いている場合、<math>xyz</math>空間の回転行列<math>\mathbf{R}</math>を利用することで各軸に関する回転に帰着することもできるが、ここでは曲面のベクトル表示を扱ったのでベクトル方程式で回転を記述することを考えたい。
点<math>\mathrm{O}</math>から<math>\boldsymbol{r}</math>とそれに平行でない単位ベクトル<math>\boldsymbol{e}</math>が伸びており、そのなす角が<math>\theta</math>であるとする。<math>\boldsymbol{r}</math>の終点<math>\mathrm{P}</math>を含み<math>\boldsymbol{e}</math>を法線とする平面を<math>\Pi</math>、<math>\Pi</math>と直線<math>\{k\boldsymbol{e} \mid k>0\}</math>の交点を<math>\mathrm{N}</math>、<math>\mathrm{P}</math>を<math>\Pi</math>内で<math>\mathrm{N}</math>を中心として<math>\phi</math>回転した点を<math>\mathrm{Q}</math>、<math>\mathrm{NQ}</math>から<math>\mathrm{NP}</math>へ降ろした垂足を<math>\mathrm{R}</math>と置く。但し、回転角<math>\phi</math>の正の向きは<math>\boldsymbol{e}</math>を右螺子の進む向きとする方向に定める。
このとき、<math>\boldsymbol{r}</math>を<math>\boldsymbol{e}</math>に関して<math>\phi</math>だけ回転させたベクトル<math>\boldsymbol{r}'</math>は以下のように表される。
{{定理|(ロドリゲスの公式)}}
:<math>\boldsymbol{r}'=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})\,\mathrm{versin}\,\phi\,\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math>
{{定理終わり}}
*証明
:<math>\boldsymbol{r}'=\overrightarrow{\mathrm{OQ}}=\overrightarrow{\mathrm{ON}}+\overrightarrow{\mathrm{NR}}+\overrightarrow{\mathrm{RQ}}</math>
:<math>\overrightarrow{\mathrm{ON}}</math>は<math>\boldsymbol{r}</math>の<math>\boldsymbol{e}</math>への正射影ベクトルなので
::<math>\overrightarrow{\mathrm{ON}}=\frac{\boldsymbol{r}\cdot\boldsymbol{e}}{\boldsymbol{e}\cdot\boldsymbol{e}}\boldsymbol{e}=(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}</math>
:<math>\triangle\mathrm{NQR}</math>を考えると<math>\|\overrightarrow{\mathrm{NQ}}\|=\|\overrightarrow{\mathrm{NP}}\|</math>と<math>\|\overrightarrow{\mathrm{NR}}\|=\|\overrightarrow{\mathrm{NQ}}\|\cos\phi</math>及び<math>\overrightarrow{\mathrm{NR}}/\!\!/\overrightarrow{\mathrm{NP}}</math>より
::<math>\overrightarrow{\mathrm{NR}}=\overrightarrow{\mathrm{NP}}\cos\phi=(\overrightarrow{\mathrm{OP}}-\overrightarrow{\mathrm{ON}})\cos\phi=\{\boldsymbol{r}-(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}\}\cos\phi</math>
:<math>\boldsymbol{r}\times\boldsymbol{e}</math>は外積の定義から<math>\overrightarrow{\mathrm{NP}}</math>を<math>\Pi</math>上で<math>-\phi</math>方向に<math>\frac{\pi}{2}</math>だけ回転させたベクトルになるので、
:<math>\boldsymbol{r}\times\boldsymbol{e}/\!\!/\overrightarrow{\mathrm{RQ}}</math>と<math>\|\overrightarrow{\mathrm{RQ}}\|=\|\overrightarrow{\mathrm{NQ}}\|\sin\phi</math>及び<math>\|\overrightarrow{\mathrm{NQ}}\|=\|\overrightarrow{\mathrm{NP}}\|</math>から
::<math>\overrightarrow{\mathrm{RQ}}=-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math>
:これらを足して
::<math>\boldsymbol{r}'=(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}+\{\boldsymbol{r}-(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}\}\cos\phi-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math>
::<math>=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})(1-\cos\phi)\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math>
::<math>=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})\,\mathrm{versin}\,\phi\,\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math>//
この証明ではベクトルの平行移動を用いているのでアフィン空間を前提とするが、この式そのものはアフィン構造に依存してないので一般のベクトル空間で成り立つ。
また、回転後のベクトルは母線のパラメータ<math>t</math>に加えて回転角<math>\phi</math>もパラメータとして有するので、<math>\boldsymbol{r}'(t, \phi)</math>という二変数ベクトル関数となって曲面を表すことになる。則ち、「曲線を回転すれば曲面を得る」という直感は正しい。
ロドリゲスの公式の応用として、例えば円錐のベクトル方程式が<math>\frac{(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}}{\|\boldsymbol{r}-\boldsymbol{p}\|}=\mathrm{const}.</math>であることが導ける。
:円錐頂点の位置ベクトルを<math>\boldsymbol{p}</math>、軸ベクトルを<math>\boldsymbol{a}</math>、<math>\boldsymbol{a}</math>と角度<math>\alpha</math>をなす単位ベクトルを<math>\boldsymbol{v}</math>とする。このとき直線<math>\{k\boldsymbol{v}\mid k>0\}</math>が円錐の母線であり、母線と交わる向きである軸の法線ベクトルを<math>\boldsymbol{b}</math>とおく。
:ロドリゲスの公式より<math>\boldsymbol{v}</math>を<math>\boldsymbol{a}</math>の周りに<math>\theta</math>だけ回転させたベクトル<math>\boldsymbol{v}'</math>は
::<math>\boldsymbol{v}'=\boldsymbol{v}\cos\theta+(\boldsymbol{v}\cdot\boldsymbol{e}_a)\,\mathrm{versin}\,\theta\,\boldsymbol{e}_a-(\boldsymbol{v}\times\boldsymbol{e}_a)\sin\theta</math>
:ここで<math>\boldsymbol{v}</math>を<math>\boldsymbol{a}, \boldsymbol{b}</math>方向に基底分解すると
::<math>\boldsymbol{v}=\cos\alpha\,\boldsymbol{e}_a+\sin\alpha\,\boldsymbol{e}_b</math>
:なので、
::<math>\boldsymbol{v}'=\cos\alpha\boldsymbol{e}_a+\sin\alpha\{\boldsymbol{e}_b\cos\theta+(\boldsymbol{e}_a\times\boldsymbol{e}_b)\sin\theta\}</math>
:円錐上の点<math>\boldsymbol{r}</math>の位置ベクトルは頂点から母線方向に<math>\rho</math>だけ進むので
::<math>\boldsymbol{r}=\boldsymbol{p}+\rho\boldsymbol{v}'</math>
:であり、
::<math>\boldsymbol{r}-\boldsymbol{p}=\rho\boldsymbol{v}'</math>
:ここで<math>\|\boldsymbol{v}'\|=\|\boldsymbol{v}\|=1</math>より
::<math>\rho=\|\boldsymbol{r}-\boldsymbol{p}\|</math>
:このベクトルと軸ベクトルの内積をとると
::<math>(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}=\rho\boldsymbol{v}'\cdot\boldsymbol{a}</math>
::<math>=\rho\{\cos\alpha(\boldsymbol{e}_a\cdot\boldsymbol{a})+\sin\alpha\cos\theta(\boldsymbol{e}_b\cdot\boldsymbol{a})+\sin\alpha\sin\theta(\boldsymbol{e}_a\times\boldsymbol{e}_b)\cdot\boldsymbol{a}\}</math>
:<math>\boldsymbol{e}_b, \boldsymbol{e}_a\times\boldsymbol{e}_b</math>とも<math>\boldsymbol{a}</math>に直交するので後ろの二項は消えて
::<math>(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}=\rho\cos\alpha(\boldsymbol{e}_a\cdot\boldsymbol{a})=\|\boldsymbol{r}-\boldsymbol{p}\|\|\boldsymbol{a}\|\cos\alpha</math>
:則ち
::<math>\frac{(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}}{\|\boldsymbol{r}-\boldsymbol{p}\|}=\|\boldsymbol{a}\|\cos\alpha=\mathrm{const}.</math>//
円錐が先に与えられている場合は「<math>\boldsymbol{r}-\boldsymbol{p}</math>が母線の方向ベクトルなのは図より自明」とできるが、ここでは「母線が先に与えられて回転によって円錐が構成される」という立場を採ったのでロドリゲスの公式が効くのである。
ロドリゲスの公式で微小回転<math>d\phi</math>の場合を考える。
正弦関数・余弦関数の部分を1項目までテイラー展開して<math>\cos(d\phi)=1+O(d\phi^2), \sin(d\phi)= d\phi+O(d\phi^3)</math>なので<math>\mathrm{versin}(d\phi)=O(d\phi^2)</math>であり、
:<math>\boldsymbol{r}' = \boldsymbol{r}-(\boldsymbol{r}\times\boldsymbol{e})d\phi+O(d\phi^2)</math>
ここで<math>d\boldsymbol{r}=\boldsymbol{r}'-\boldsymbol{r}</math>なので
:<math>d\boldsymbol{r}=-(\boldsymbol{r}\times\boldsymbol{e})d\phi+O(d\phi^2)</math>
則ち、ベクトル関数の全微分は微小回転で近似される。
オーダー記法の項を無視して<math>\boldsymbol{\omega}=\frac{d\phi}{dt}\boldsymbol{e}</math>と置くと
:<math>d\boldsymbol{r}=(d\phi\boldsymbol{e})\times\boldsymbol{r}</math>
これの両辺を<math>dt</math>で割って
:<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{\omega}\times\boldsymbol{r}</math>
これは剛体の速度公式である。
ロドリゲスの公式の一次変換表記を考える。
<math>\boldsymbol{r}=\begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}, \boldsymbol{r}'=\begin{pmatrix} r'_1 \\ r'_2 \\ r'_3 \end{pmatrix}, \boldsymbol{e}=\begin{pmatrix} a \\ b \\ c \end{pmatrix}</math>とすると、
:<math>\begin{pmatrix} r'_1 \\ r'_2 \\ r'_3 \end{pmatrix}=\cos\phi\begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}+(ar_1+br_2+cr_3)\mathrm{versin}\,\phi\begin{pmatrix} a \\ b \\ c \end{pmatrix} - \sin\phi \begin{pmatrix} cr_2-br_3 \\ ar_3-cr_1 \\ br_1-ar_2 \end{pmatrix}</math>
:<math>=\begin{pmatrix} (\cos\phi + a^2\,\mathrm{versin}\,\phi) r_1 + (ab\,\mathrm{versin}\,\phi -c\sin\phi) r_2 + (ca\,\mathrm{versin}\,\phi + b\sin\phi) r_3 \\ (ab\,\mathrm{versin}\,\phi + c\sin\phi) r_1 + (\cos\phi + b^2\,\mathrm{versin}\,\phi) r_2 + (bc\,\mathrm{versin}\,\phi -a\sin\phi) r_3 \\ (ca\,\mathrm{versin}\,\phi - b\sin\phi) r_1 + (bc\,\mathrm{versin}\,\phi+ a\sin\phi) r_2 + (\cos\phi + c^2\,\mathrm{versin}\,\phi) r_3 \end{pmatrix}</math>
:<math>=\begin{pmatrix} \cos\phi + a^2\,\mathrm{versin}\,\phi & ab\,\mathrm{versin}\,\phi -c\sin\phi & ca\,\mathrm{versin}\,\phi + b\sin\phi \\ ab\,\mathrm{versin}\,\phi + c\sin\phi & \cos\phi + b^2\,\mathrm{versin}\,\phi & bc\,\mathrm{versin}\,\phi -a\sin\phi \\ ca\,\mathrm{versin}\,\phi - b\sin\phi & bc\,\mathrm{versin}\,\phi+ a\sin\phi & \cos\phi + c^2\,\mathrm{versin}\,\phi \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math>
ここで<math>\mathrm{versin}\,\phi</math>を<math>1-\cos\phi</math>に戻して係数行列を<math>1, \cos\phi, \sin\phi</math>の項に分解してみると
:<math>=\begin{pmatrix} a^2+(1-a^2)\cos\phi & ab-ab\cos\phi -c\sin\phi & ca-ca\cos\phi + b\sin\phi \\ ab-ab\cos\phi + c\sin\phi & b^2+(1-b^2)\cos\phi & bc-bc\cos\phi -a\sin\phi \\ ca-ca\cos\phi - b\sin\phi & bc-bc\cos\phi+ a\sin\phi & c^2+(1-c^2)\cos\phi \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math>
:<math>=\left\{ \begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} + \cos\phi\begin{pmatrix} 1-a^2 & -ab & -ca \\ -ab & 1-b^2 & -bc \\ -ca & -bc & 1-c^2 \end{pmatrix} +\sin\phi\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \right\} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math>
:<math>=\left[ \begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} + \cos\phi \left\{ \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}-\begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} \right\} +\sin\phi\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \right] \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math>
ここで<math>\begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix}</math>は<math>\boldsymbol{e}</math>の第<math>i</math>成分と第<math>j</math>成分を掛けたものが<math>(i, j)</math>成分となる行列になっていることがわかる。これを<math>\boldsymbol{e}\otimes\boldsymbol{e}</math>と書くことにする。<math>\sin\phi</math>に係る行列を<math>\mathbf{N}</math>と置くと、
:<math>\boldsymbol{r}'=\{\boldsymbol{e}\otimes\boldsymbol{e}+\cos\phi(\mathbf{E}_3-\boldsymbol{e}\otimes\boldsymbol{e})+\sin\phi\mathbf{N}\}\boldsymbol{r}</math>
という表示を得る。
更に、<math>\mathbf{N}^2=\begin{pmatrix} -b^2-c^2 & ab & ca \\ ab & -c^2-a^2 & bc \\ ca & bc & -a^2-b^2 \end{pmatrix}</math>と<math>\|\boldsymbol{e}\|=\sqrt{a^2+b^2+c^2}=1</math>より
:<math>\boldsymbol{e}\otimes\boldsymbol{e}=\mathbf{N}^2+(a^2+b^2+c^2)\mathbf{E}_3=\mathbf{N}^2+\mathbf{E}_3</math>
が成り立つので、最終的に
:<math>\boldsymbol{r}'=(\mathbf{E}_3+\sin\phi\mathbf{N}+\mathrm{versin}\,\phi\mathbf{N}^2)\boldsymbol{r}</math>
と二次の行列多項式で表示される。
なお、<math>\otimes</math>は発展節で紹介する'''テンソル積'''を表している。
ここで、行列<math>\mathbf{N}</math>についてより具体的に考えてみる。
先ず、<math>{}^t\!\mathbf{N}=-\mathbf{N}</math>が成り立つので<math>\mathbf{N}</math>は反対称行列(歪対称行列・交代行列)である。
<math>\mathbf{N}\boldsymbol{r}</math>を計算すると
:<math>\mathbf{N}\boldsymbol{r}=\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}=\begin{pmatrix} br_3-cr_2 \\ cr_1-ar_3 \\ ar_2-br_1 \end{pmatrix}=\boldsymbol{e}\times\boldsymbol{r}</math>
則ち、<math>\mathbf{N}</math>は<math>\boldsymbol{e}</math>に関する外積(形式的には<math>\boldsymbol{e}\times</math>という左演算)を一次変換とみて表現行列に直したものである。
更に、成分計算により<math>\mathbf{N}^3=-\mathbf{N}</math>という性質が成り立つことも判る。外積を「ベクトルを90°回転させる演算」とみると、二回の演算によって180°回転するということなのでこの結果は妥当である。
ここで行列自然指数関数<math>\exp(\phi\mathbf{N})=\sum_{i=0}^\infty \frac{(\phi\mathbf{N})^i}{i!}</math>を考えてみると上の性質より三次以上の項は<math>\mathbf{N}^4=-\mathbf{N}^2, \mathbf{N}^5=\mathbf{N},\cdots</math>のように全て二次以下に帰着できる。<br>
また、自然指数関数のテイラー展開は絶対収束級数なので各項は可換であり、<math>\mathbf{N}</math>の二次式として纏め直すと
:<math>\exp(\phi\mathbf{N})=\mathbf{E}_3 + (\phi-\frac{\phi^3}{3!}+\frac{\phi^5}{5!}-\frac{\phi^7}{7!}+\cdots) \mathbf{N}+(\frac{\phi^2}{2!}-\frac{\phi^4}{4!}+\frac{\phi^6}{6!}-\frac{\phi^8}{8!}+\cdots)\mathbf{N}^2</math>
ここで一次・二次の係数はそれぞれ正弦関数・正矢関数のテイラー展開になっているので結局は
:<math>\exp(\phi\mathbf{N})=\mathbf{E}_3+\sin\phi\mathbf{N}+\mathrm{versin}\,\phi\mathbf{N}^2</math>
ここから、<math>\exp(\phi\mathbf{N})</math>は角度<math>\phi</math>に関する有限回転に対応することが判った。
このことは以下の考え方でも求まる。<br>
<math>\mathbf{N}</math>の最小方程式は<math>\mathbf{N}^3+\mathbf{N}=\mathbf{O}_3</math>より<math>x(x^2+1)=0</math>であり固有値は<math>0, \pm{i}</math>と求まるので、<math>\exp(\phi\mathbf{N})</math>の対角化行列は
:<math>\begin{pmatrix} e^{0\phi} & 0 & 0 \\ 0 & e^{i\phi} & 0 \\ 0 & 0 & e^{-i\phi} \end{pmatrix}</math>
ここで任意の解析関数<math>f</math>について<math>f(\mathbf{N})</math>のテイラー展開は二次以下の多項式になるので
:<math>\exp(\phi\mathbf{N})=\alpha\mathbf{E}_3+\beta\mathbf{N}+\gamma\mathbf{N}^2</math>
これを実多項式に戻した<math>\alpha+\beta{x}+\gamma{x^2}</math>が<math>e^{\phi{x}}</math>と任意の固有値で一致すればよい(二次補間)ので、
:<math>\begin{cases} e^0 = \alpha \\ e^{i\phi} = i\beta -\gamma \\ e^{-i\phi} = -i\beta-\gamma \end{cases}</math>
:<math>\iff \begin{cases} 1 = \alpha \\ \cos\phi+i\sin\phi = (\alpha -\gamma) + i\beta \end{cases}</math>
:<math>\therefore \begin{cases} \alpha=1 \\ \beta=\sin\phi \\ \gamma=1-\cos\phi=\mathrm{versin}\,\phi \end{cases}</math>
則ち、<math>\mathbf{N}^3=-\mathbf{N}</math>という構造は<math>\Psi_\mathbf{N}(x)=x(x^2+1)</math>という最小多項式に起因するということである。
更に[[表現論]]の観点から見ると、三次直交行列全体である回転群<math>SO(3)</math>に対し、<math>\mathbf{N}</math>は<math>SO(3)</math>の単位元に於ける接空間(三次反対称行列全体・則ちリー代数<math>\mathfrak{so}(3)</math>)の元であり、<math>\exp(\phi\mathbf{N})</math>はリー群<math>SO(3)</math>の元である。ここで行列自然指数関数は「リー代数からリー群へ引き戻す写像」なので'''指数写像'''と呼ばれる。
これが[[#フレネ標搆]]で述べた「直交変換の一次近似が反対称変換」という事実のより正確な表現である。
補足だが、力学で扱う[[w:オイラー角]]というものを導入するとロドリゲスの公式を各座標軸に関する回転の合成で表すこともできる。
===種々の曲率===
ここでは三次元空間内の正則曲面について考える。
曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>上で定義され弧長パラメータ表示された正則曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t(s), u(s))</math>を考える。
<math>C</math>の接ベクトルは合成関数微分公式より
:<math>\boldsymbol{t}=\frac{d\boldsymbol{r}}{ds}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}</math>
と表示される。
ここで両辺の<math>ds</math>を形式的に払うと
:<math>\boldsymbol{t}ds=\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>
これの自分自身との内積をとると
:<math>\|\boldsymbol{t}\|^2(ds)^2=\left\|\frac{d\boldsymbol{r}}{\partial{t}}\right\|^2(dt)^2+2\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}}dtdu+\left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2(du)^2</math>
弧長パラメトライズされた接ベクトルは単位ベクトルであり、右辺のベクトル演算の部分を第一基本量で置き換えると
:<math>ds^2=E(dt)^2+2Fdtdu+G(du)^2</math>
と、第一基本形式を別の方法で得られた。
<math>C</math>の主法線ベクトルは合成関数微分を繰り返し適用することで
:<math>\boldsymbol{n}_C=\frac{d\boldsymbol{t}}{ds}=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}\right)</math>
:<math>=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}\right)+\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}\right)</math>
:<math>=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\right)\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d}{ds}\left(\frac{dt}{ds}\right)+\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right)\frac{du}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d}{ds}\left(\frac{du}{ds}\right)</math>
:<math>=\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\frac{dt}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}\partial{t}}\frac{du}{ds}\right)\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d^2t}{ds^2}+\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\frac{dt}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\frac{du}{ds}\right)\frac{du}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d^2u}{ds^2}</math>
:<math>=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\left(\frac{dt}{ds}\right)^2+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d^2t}{ds^2}+2\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\frac{dt}{ds}\frac{du}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\left(\frac{du}{ds}\right)^2+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d^2u}{ds^2}</math>
ここで、<math>S</math>の法線ベクトル<math>\boldsymbol{n}_S=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\times\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>は一般に<math>\boldsymbol{n}_C</math>と一次従属とは限らない。
後の話を単純にするため<math>\boldsymbol{n}_S</math>を正規化したベクトルを<math>\boldsymbol{e}_S</math>と置いて<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S</math>を計算してみる。
:<math>\boldsymbol{e}_S\perp\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \boldsymbol{e}_S\perp\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>より
:<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S=\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S\right)\left(\frac{dt}{ds}\right)^2+2\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S\right)\frac{dt}{ds}\frac{du}{ds}+\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S\right)\left(\frac{du}{ds}\right)^2</math>
ここで各内積<math>L=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S,\quad M=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S,\quad N=\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S</math>を<math>S</math>の'''第二基本量'''と呼ぶ。
<math>\boldsymbol{n}_C, \boldsymbol{e}_S</math>のなす角を<math>\psi</math>とすると<math>C</math>の曲率を<math>\kappa_C</math>として
:<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S=\kappa_C \cos\psi</math>
なので<math>ds</math>に関して形式的に通分して
:<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{ds^2}</math>
右辺の分子<math>I\!I:=L(dt)^2+2Mdtdu+N(du)^2</math>を<math>S</math>の'''第二基本形式'''という。
<math>\begin{cases}\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\boldsymbol{e}_S=0 \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\boldsymbol{e}_S=0 \end{cases}</math>を<math>t</math>で偏微分すると
:<math>\begin{cases} \frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=0 \\ \frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=0 \end{cases}</math>
また、<math>u</math>で偏微分すると
:<math>\begin{cases} \frac{\partial^2{\boldsymbol{r}}}{\partial{u}\partial{t}}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}=0 \\ \frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}=0 \end{cases}</math>
ここから第二基本量は
:<math>L=-\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}},\quad M=-\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=-\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}},\quad N=-\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}</math>
とも表示され、第二基本形式の別表示
:<math>I\!I=-\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du\right)\cdot\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)</math>
を得る。
これは更に全微分から微小ベクトル同士の内積として
:<math>I\!I=-d\boldsymbol{r}\cdot{d}\boldsymbol{e}_S</math>
とも書ける。
第一基本形式は曲面上の微小変位の自身との内積だったが、第二基本形式は曲面上の微小変位と法線方向の微小変位の内積である。則ち、第一基本形式は曲面の内在的な量、第二基本形式は曲面の外在的な量である。
第一基本形式と同様に第二基本形式は二次形式なので、<math>\boldsymbol{v}:=\begin{pmatrix} dt \\ du \end{pmatrix}, \mathbf{H}=\begin{pmatrix} L & M \\ M & N \end{pmatrix}</math>と置くと
:<math>I\!I={}^t\!\boldsymbol{v}\mathbf{H}\boldsymbol{v}</math>
と行列表示できる。この<math>\mathbf{H}</math>を'''第二基本行列'''という。
ここで、モンジュ表示された曲面<math>z=f(x, y)</math>に対して第二基本行列を考えてみる。
:<math>\boldsymbol{r}(t, u)=\begin{pmatrix} t \\ u \\ f(t, u)\end{pmatrix}</math>なので[[解析学基礎/多変数関数の微積分#全微分]]の結果を参照すると直ちに
:<math>L=\frac{\frac{\partial^2{f}}{\partial{t}^2}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2},\quad M=\frac{\frac{\partial^2{f}}{\partial{t}\partial{u}}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2},\quad N=\frac{\frac{\partial^2{f}}{\partial{u}^2}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2}</math>
:が判るので、
:<math>\mathbf{H}=\frac{1}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2}\begin{pmatrix} \frac{\partial^2{f}}{\partial{t}^2} & \frac{\partial^2{f}}{\partial{tu}} \\ \frac{\partial^2{f}}{\partial{tu}} & \frac{\partial^2{f}}{\partial{u^2}} \end{pmatrix}</math>
これはヘッシアンを法線の長さで割った行列である。
則ち、任意の正則曲面に対して第二基本行列はヘッセ行列と同じ役割をすると考えられる。
実際、点<math>\mathrm{P}</math>の開近傍で<math>\det\mathbf{H}</math>が正である曲面は<math>\mathrm{P}</math>の開近傍で上下どちらかに凸であり、負である曲面は<math>\mathrm{P}</math>で鞍点となることが知られている。
このように第二基本形式は曲面の「曲がり方」を表す量と考えられるので、曲面に対する曲率も考えられる。
ここで第二基本形式を定義した式
:<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{ds^2}</math>
に立ち戻ると、右辺の分母は<math>s</math>に依存しない第一基本形式なので第一基本量を用いて
:<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{E(dt)^2+2Fdtdu+G(du)^2}</math>
右辺を形式的に<math>dt^2</math>で割ると
:<math>\kappa_C\cos\psi=\frac{L+2M\frac{du}{dt}+N\left(\frac{du}{dt}\right)^2}{E+2F\frac{du}{dt}+G\left(\frac{du}{dt}\right)^2}</math>
この右辺は<math>\boldsymbol{n}_C</math>に依存しない量なので<math>\boldsymbol{n}_S, \boldsymbol{n}_C</math>のなす角度である<math>\psi</math>にも依存しない。
そこで、この値を曲面<math>S</math>の'''法曲率'''と定義する。
:<math>\varkappa:=\frac{L+2M\frac{du}{dt}+N\left(\frac{du}{dt}\right)^2}{E+2F\frac{du}{dt}+G\left(\frac{du}{dt}\right)^2}</math>
法曲率の幾何学的意味を考える。
<math>\varkappa=\kappa_C\cos\psi</math>より、<math>\cos\psi=1</math>のとき<math>S</math>の法曲率と<math>C</math>の曲率が一致する。このとき<math>\boldsymbol{n}_S /\!\!/ \boldsymbol{n}_C</math>であり、<math>C</math>は曲面上の点<math>\mathrm{P}</math>とそこでの曲面の法線<math>\boldsymbol{n}_S(\mathrm{P})</math>を含む平面で曲面を切断した切り口('''法切り口''')に対応する曲線('''法曲線''')である。
則ち、法曲率は法曲線の曲率に対応する。
なお、法曲線<math>C</math>は切断に用いる平面に拘束されるので接ベクトル<math>\boldsymbol{t}_C</math>も平面に拘束される。則ち、拘束平面は<math>\{\boldsymbol{t}_C, \boldsymbol{n}_C\}</math>の張る接触平面である。
法切り口を齎す平面は法線を軸にして回転することができ、その回転角によって法曲率の値が異なることになる。この回転は具体的にはロドリゲスの公式によって記述されるが、法曲率の極大値・極小値は<math>\varkappa</math>を<math>k=\frac{du}{dt}</math>の関数とみることで以下のように考えることができる。
:法曲率の定義式より
::<math>\varkappa(E+2Fk+Gk^2)=L+2Mk+Nk^2</math>・・・(*)
:これが<math>k</math>の恒等式なので微分しても等号が成り立ち、
::<math>\frac{d\varkappa}{dk}(E+2Fk+Gk^2)+\varkappa(2F+2Gk)=2M+2Nk</math>
:フェルマーの定理より<math>\frac{d\varkappa}{dk}=0</math>を満たす<math>(k, \varkappa)</math>が極値点の候補なので
::<math>\varkappa(2F+2Gk)=2M+2Nk</math>・・・(@)
:が成り立つ必要がある。
:これを<math>k</math>倍して(*)を引くと
::<math>\varkappa(E+Fk)=L+Mk</math>・・・(#)
:これと(@)を連立して
::<math>k=-\frac{\varkappa{F}-M}{\varkappa{G}-N}</math>
:これを(#)に代入して
::<math>(EG-F^2)\varkappa^2-(GL+EN-2FM)\varkappa+(LN-M^2)=0</math>・・・($)
:という二次方程式を得る。
:($)が相異なる二つの実根<math>\kappa_1, \kappa_2</math>を持てばそれらは極小値・極大値である。
:逆に、極小値・極大値を持てばフェルマーの定理より($)を満たす。//
この<math>\kappa_1, \kappa_2</math>を<math>S</math>の'''主曲率'''という。
($)の左辺を変形してみると、
:<math>(EG-F^2)\varkappa^2-(GL+EN-2FM)\varkappa+(LN-M^2)</math>
:<math>=\{EG\varkappa^2-(GL+EN)\varkappa+LN\}-\{F^2\varkappa^2-2FM\varkappa+M^2\}</math>
:<math>=(L-\varkappa{E})(N-\varkappa{G})-(M-\varkappa{F})^2</math>
:<math>=\det\begin{pmatrix} L-\varkappa E & M - \varkappa F \\ M - \varkappa F & N - \varkappa G \end{pmatrix}</math>
:<math>=\det(\mathbf{H}-\varkappa\mathbf{K})</math>
という、第一基本行列と第二基本行列を用いた形が出てきた。
ここで<math>\varkappa=\frac{L(dt)^2+2Mdtdu+N(du)^2}{E(dt)^2+2Fdtdu+G(du)^2}</math>を変形して
:<math>(L-\varkappa{E})dt^2+2(M-\varkappa{F})dtdu+(N-\varkappa{G})du^2=0</math>
これを二次形式表示すると
:<math>\begin{pmatrix} dt & du \end{pmatrix}\begin{pmatrix} L-\varkappa E & M - \varkappa F \\ M - \varkappa F & N - \varkappa G \end{pmatrix}\begin{pmatrix} dt \\ du \end{pmatrix}=0</math>
と、同じ<math>\mathbf{H}-\varkappa\mathbf{K}</math>がここでも登場する。
この行列は法曲率を持つ方向を二次形式で判定しているが、主曲率を持つ場合はラグランジュの未定乗数法より<math>(\mathbf{H}-\varkappa\mathbf{K})\begin{pmatrix} dt \\ du \end{pmatrix}=\boldsymbol{0}</math>が成り立ち、これが<math>\det(\mathbf{H}-\varkappa\mathbf{K})=0</math>という式の正体である。更に言うと、<math>\mathbf{H}\boldsymbol{x}=\varkappa\mathbf{K}\boldsymbol{x}</math>という一般化固有値問題の解が主曲率<math>\kappa_1, \kappa_2</math>に対応している。このときの一般化固有ベクトル<math>\boldsymbol{x}_1, \boldsymbol{x}_2</math>を主曲率に対する'''主方向'''という。
二つの主方向の関係を調べる。
:主方向の定義より
::<math>\begin{cases} (\mathbf{H}-\kappa_1\mathbf{K}) \boldsymbol{x}_1=\boldsymbol{0} \\ (\mathbf{H}-\kappa_2\mathbf{K}) \boldsymbol{x}_2=\boldsymbol{0} \end{cases}</math>
:なので
::<math>\begin{cases} {}^t\!\boldsymbol{x}_2(\mathbf{H}-\kappa_1\mathbf{K})\boldsymbol{x}_1=\boldsymbol{0} \\ {}^t\!\boldsymbol{x}_1(\mathbf{H}-\kappa_2\mathbf{K})\boldsymbol{x}_2=\boldsymbol{0} \end{cases}</math>
::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_1\mathbf{H}\boldsymbol{x}_2=\kappa_2{}^t\!\boldsymbol{x}_1 \mathbf{K}\boldsymbol{x}_2 \end{cases}</math>
::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_1\mathbf{H}\boldsymbol{x}_2=\kappa_2{}^t\!\boldsymbol{x}_1 \mathbf{K}\boldsymbol{x}_2 \end{cases}</math>
:第一基本行列・第二基本行列とも対称行列なので第二式の転置をとって
::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_2{}^t\!\boldsymbol{x}_2 \mathbf{K}\boldsymbol{x}_1 \end{cases}</math>
:上下の式の差をとって
::<math>(\kappa_1-\kappa_2){}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1=\boldsymbol{0}</math>
:<math>\kappa_1=\kappa_2</math>のときは<math>\boldsymbol{x}_1, \boldsymbol{x}_2</math>に関する恒等式であるので、<math>\kappa_1\neq\kappa_2</math>のときを考える。
::<math>{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1=\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}t_2+\frac{\partial{\boldsymbol{r}}}{\partial{u}}u_2\right)\cdot\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}t_1+\frac{\partial{\boldsymbol{r}}}{\partial{u}}u_1\right)=0</math>
:この二つのベクトルは主方向を向くので2つの主方向は直交する。
<math>\kappa_1=\kappa_2</math>(法曲率<math>\varkappa(t, u)=\mathrm{const}.</math>)の場合、<math>S</math>の接平面内の任意の方向が主方向となるので「どの方向にも一様な曲がり方をする」と考えられる。このような主曲率を与える点を'''臍点'''という。任意の点が臍点である曲面は球面である。
上の結果から、'''臍点でない各点で2つの主方向は直交する'''。
主曲率に対して解と係数の関係から得る値
:<math>H=\frac{\kappa_1+\kappa_2}{2}=\frac{GL+ENN-2FM}{2EG-F^2},\quad K=\kappa_1\kappa_2=\frac{LN-M^2}{EG-F^2}</math>
をそれぞれ<math>S</math>の'''平均曲率'''・'''全曲率'''('''ガウス曲率''')という。
全曲率の式を見ると<math>K=\frac{LN-M^2}{EG-F^2}=\frac{\det\mathbf{H}}{\det\mathbf{K}}=\det(\mathbf{K}^{-1}\mathbf{H})</math>である。
そこで、<math>\mathbf{S}=\mathbf{K}^{-1}\mathbf{H}</math>と定義してみると行列式の性質より<math>K</math>は<math>\mathbf{S}</math>の固有値の積である。
ここで<math>\mathbf{S}</math>の固有方程式は
:<math>\det(\mathbf{S}-\lambda\mathbf{E})=\det(\mathbf{K}^{-1}\mathbf{H}-\lambda\mathbf{E})=\det\mathbf{K}^{-1}\det(\mathbf{H}-\lambda\mathbf{K})=0</math>
<math>\det\mathbf{K}^{-1}\neq0</math>より
:<math>\det(\mathbf{H}-\lambda\mathbf{K})=0</math>
これは主曲率を定義した二次方程式($)のことだったので、この方程式の解である固有値は<math>\lambda=\kappa_1, \kappa_2</math>である。
則ち、<math>K=\det\mathbf{S},\quad H=\frac{1}{2}\mathrm{tr}\,\mathbf{S}</math>が成り立つ。
更に、第一基本行列から第二基本行列への一次変換を考えると以下が成り立つことも判る。但し、こちらもフレネ=セレーと同様に厳密にはベクトルを列ではなく行に並べるのが正しいことに注意。
{{定理|(ヴァインガルテンの式)}}
:<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \end{pmatrix}=-\mathbf{S}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math>
{{定理終わり}}
*証明
:<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \end{pmatrix}=\mathbf{A}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math>と置く。
:両辺に<math>{}^t\!\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math>を右から掛けると行列積であることに注意して
:<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}=\mathbf{A}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}}\cdot\frac{\partial\boldsymbol{r}}{\partial{t}} & \frac{\partial\boldsymbol{r}}{\partial{t}}\cdot\frac{\partial\boldsymbol{r}}{\partial{u}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math>
:<math>\therefore -\mathbf{H}=\mathbf{A}\mathbf{K}</math>
:<math>\therefore \mathbf{A}=-\mathbf{H}\mathbf{K}^{-1}=-\mathbf{K}^{-1}\mathbf{H}=-\mathbf{S}</math>//
臍点で行列<math>\mathbf{H}-\varkappa\mathbf{K}</math>を考えると<math>\varkappa=\kappa_1=\kappa_2</math>及び「主方向が任意」から
:<math>\mathbf{H}-\varkappa\mathbf{K}=\mathbf{O}</math>
であり、これを成分で書き下せばヴァインガルテンの式より法曲率に関して
:<math>\begin{cases} \varkappa=\frac{L}{E}=\frac{M}{F}=\frac{N}{G} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} = \varkappa \frac{\partial{\boldsymbol{r}}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} = \varkappa \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{cases}</math>
を得る。
<math>\mathbf{S}=\mathbf{K}^{-1}\mathbf{H}</math>に於いて<math>\mathbf{K}</math>は正定値対称行列なので正則対称な主平方根<math>\mathbf{K}^{1/2}</math>が存在して
:<math>\mathbf{S}=\mathbf{K}^{-1/2}\mathbf{K}^{-1/2}\mathbf{H}</math>
ここで<math>\mathbf{T}=\mathbf{K}^{-1/2}\mathbf{H}\mathbf{K}^{-1/2}</math>という相似変換で表された行列を考えてみると
:<math>\mathbf{K}^{1/2}\mathbf{S}\mathbf{K}^{-1/2}</math>
:<math>=\mathbf{K}^{1/2}\mathbf{K}^{-1}\mathbf{H}\mathbf{K}^{-1/2}</math>
:<math>=\mathbf{K}^{-1/2}\mathbf{H}\mathbf{K}^{-1/2}</math>
:<math>=\mathbf{T}</math>
であり、<math>\mathbf{S}\sim\mathbf{T}</math>なのでこれらの2つの固有値の組は一致する。
:<math>\mathbf{H}={}^t\!\mathbf{H}</math>
より
:<math>{}^t\!\mathbf{T}=\mathbf{T}</math>
が成り立つので、<math>\mathbf{T}</math>は対称行列であり2つの固有値は実数である。
よって<math>\mathbf{S}</math>の二つの固有値はともに実数であるが、この固有値は($)の解<math>\kappa_1, \kappa_2</math>のことだったので($)は虚根を持たず、'''主曲率は必ず実数'''である。
モンジュ表示された曲面では先程求めた第二基本量の表式から直ちに
:<math>H=\frac{\left\{1+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}\frac{\partial^2{f}}{\partial{x}^2}+\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2\right\}\frac{\partial^2{f}}{\partial{y}^2}-2\frac{\partial{f}}{\partial{x}}\frac{\partial{f}}{\partial{y}}\frac{\partial^2{f}}{\partial{x}\partial{y}}}{{2\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}^\frac{3}{2}}},\quad K=\frac{\frac{\partial{f}}{\partial{x}}\frac{\partial{f}}{\partial{y}}-\left(\frac{\partial^2{f}}{\partial{x}\partial{y}}\right)^2}{\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}^2}</math>
を得る。
等温座標系では<math>\mathbf{K}^{-1}=\frac{1}{\lambda^2}\mathbf{E}_3</math>より<math>\mathbf{S}=\frac{1}{\lambda^2}\begin{pmatrix} L & M \\ M & N \end{pmatrix}</math>なので、平均曲率・ガウス曲率はそれぞれ<math>H=\frac{L+N}{2\lambda^2},\quad K=\frac{LN-M^2}{\lambda^4}</math>と簡単に求まる。
ある点に於ける2つの主曲率はそれぞれその点に於ける極大方向・極小方向の曲がり方を与えるので、<math>\kappa_1, \kappa_2</math>の符号の組み合わせがその点近傍に於ける曲面の曲がり方を与えることになる。
具体的には、両方とも正なら上に凸、負なら下に凸、異符号なら鞍点となる。主曲率が0ならばその主方向に対して曲がっていないということである。
主曲率の積である全曲率の符号を見ても良い。全曲率が正ならば上下どちらかに凸、負ならば鞍点である。第一基本行列が正定値行列であることから主曲率の符号は第二基本行列の行列式と一致するので先程の「第二基本行列がヘッセ行列の一般化」という話に繫がる。
任意点で<math>H=0</math>を満たす曲面を'''極小曲面'''という。極小曲面は曲面を連続変形させたときに曲面積の最小値を与える曲面であることが知られている。
平面は自明な極小曲面である。他にも<math>z=\ln\left(\frac{\cos y}{\cos x}\right)(-\frac{\pi}{2}<x, y<\frac{\pi}{2})</math>(シェルクの第一曲面)などが知られている。
極小曲面は表面張力の理論に応用されている。
例えば石鹼膜のつくる曲面について、膜上点での表裏の圧力差<math>P</math>・その点での表面張力<math>T</math>及び平均曲率<math>H</math>に対し<math>P=2TH</math>が成立する(ヤング=ラプラスの公式)ことが知られているが、閉曲線である枠に張った膜が割れずに安定して存在する条件は全ての点で<math>P=H=0</math>、則ち極小曲面のときである。
曲面<math>S</math>上の微小変位<math>d\boldsymbol{r}</math>、法線方向の微小変位<math>d\boldsymbol{e}_S</math>に対して第一基本形式は<math>I=d\boldsymbol{r}\cdot d\boldsymbol{r}</math>、第二基本形式は<math>I\!I=-d\boldsymbol{r}\cdot d\boldsymbol{e}_S</math>であった。
最後の組み合わせである<math>d\boldsymbol{e}_S\cdot d\boldsymbol{e}_S</math>を<math>S</math>の'''第三基本形式'''と定義する。
:<math>I\!I\!I:=\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)\cdot\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)</math>
:<math>=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2(dt)^2+2\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}dtdu+\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2(du)^2</math>
これを同様に二次形式の行列表示に直すと<math>\mathbf{W}:=\begin{pmatrix} \left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2 & \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}} & \left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2 \end{pmatrix}</math>として
:<math>I\!I\!I={}^t\!\boldsymbol{v}\mathbf{W}\boldsymbol{v}</math>
この<math>\mathbf{W}</math>を'''第三基本行列'''という。
見て判る通り、'''第三基本量'''は<math>P=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2,\quad Q=\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}},\quad R=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2</math>である。
臍点でないとき2つの主方向は直交するので、臍点を持たない曲面に対して主方向を直交基底としたパラメータ表示<math>\boldsymbol{r}=\boldsymbol{r}(p, q)</math>を考えられる。
このとき、各基本形式は
:<math>I=dp^2+dq^2</math>
:<math>I\!I=\kappa_1dp^2+\kappa_2dq^2</math>
:<math>I\!I\!I=\kappa^2_1dp^2+\kappa^2_2dq^2</math>
と表示されることが知られている。
第三基本形式は第一基本形式と第二基本形式の線型結合で表示される。
:<math>I\!I\!I=2HI\!I-KI</math>
このことはヴァインガルテンの式と平均曲率・全曲率の定義を用いて確かめられる。
これに関連し、第二基本量で定義された全曲率は第一基本量のみで表されることが知られている。つまり、曲率という外在的な量を第一基本形式という内在的な量のみで記述でき、言い換えると「曲面を考えるときに'''曲面の外側の空間を考える必要が無い'''」ということである。
この定理は発見者自身も驚愕したことから'''ガウスの驚異の定理'''と呼ばれている。詳しくは発展節で扱う。
なお、平均曲率を考えるときは外側の空間の情報が必要である。
==直交曲線座標系==
{{節stub}}
===円筒座標系===
平面の座標系として直交座標の他に斜交座標、極座標(円座標)、重心座標などがあったように、空間の座標系も複数通り考えられる。
空間座標を3つの実数の組<math>(r, \theta, z)</math>で表した座標系を'''円筒座標系'''('''円柱座標系'''、cylindrical coordinate system)という。ただし、<math>r</math>は原点からの(符号付き)距離、<math>\theta</math>は基準面に於ける始線からの正の回転角、<math>z</math>は基準面からの高さである。
円筒座標系は、円座標系の<math>r\theta</math>平面に<math>z</math>軸方向の次元を加えた3次元空間の座標と考えられる。
そのため、円筒座標系と直交座標系の対応は以下のようになる。
:<math>\begin{cases} x=r\cos\theta \\ y=r\sin\theta \\ z=z \end{cases} \iff \begin{cases} r=\sqrt{x^2+y^2} \\ \theta = \arctan\frac{y}{x} \\ z=z \end{cases}</math>
但し、<math>r</math>は基準面の裏側では負とする。
直交座標の<math>z</math>軸を基に円筒座標系の座標軸を決定する。一般に座標軸は直線とは限らないので、「軸」ではなく「曲線」と呼ぶことにする('''座標線''')。なお、「曲線」という語は一般に「直線」を包含する。
:<math>r</math>曲線:<math>z</math>軸上の点を通り<math>z</math>軸に垂直な半直線。
:<math>\theta</math>曲線:<math>z</math>軸を法線とする平面内にあり、中心が<math>z</math>軸上にある円周。
:<math>z</math>曲線:<math>z</math>軸に平行な直線。
ここで、各曲線に沿った微小変化がどのように表されるか見ていく。
<math>\boldsymbol{f}: (r,\theta,z)\to(x,y,z)</math>とする。
<math>\boldsymbol{f}</math>全体の微小変化は全微分<math>d\boldsymbol{f}=\frac{\partial{(x,y,z)}}{\partial{(r,\theta,z)}} \begin{pmatrix} dr \\ d\theta \\ dz \end{pmatrix}</math>で表される。
上で求めた関係式より
:<math>\boldsymbol{f}\begin{pmatrix} r \\ \theta \\ z\end{pmatrix}=\begin{pmatrix} x \\ y \\ z \end{pmatrix} = \begin{pmatrix} r\cos\theta \\ r\sin\theta \\ z \end{pmatrix}</math>
なので、
:<math>\frac{\partial{(x,y,z)}}{\partial{(r,\theta,z)}} = \begin{pmatrix} \frac{\partial}{\partial{r}}r\cos\theta & \frac{\partial}{\partial{\theta}}r\cos\theta & \frac{\partial}{\partial{z}}r\cos\theta \\ \frac{\partial}{\partial{r}}r\sin\theta & \frac{\partial}{\partial{\theta}}r\sin\theta & \frac{\partial}{\partial{z}}r\sin\theta \\ \frac{\partial}{\partial{r}}z & \frac{\partial}{\partial{\theta}}z & \frac{\partial}{\partial{z}}z \end{pmatrix} = \begin{pmatrix} \cos\theta & -r\sin\theta & 0 \\ \sin\theta & r\cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix}</math>
よって
:<math>d\boldsymbol{f}=\begin{pmatrix} \cos\theta & -r\sin\theta & 0 \\ \sin\theta & r\cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} dr \\ d\theta \\ dz \end{pmatrix}=\begin{pmatrix} \cos\theta \\ \sin \theta \\ 0 \end{pmatrix}dr + \begin{pmatrix} -\sin\theta \\ \cos\theta \\ 0 \end{pmatrix}rd\theta + \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}dz </math>
再右辺の各項を<math>d\vec{r}, d\vec{\theta}, d\vec{z}</math>と書くことにすると、<math>|d\vec{r}|, |d\vec{\theta}|, |d\vec{z}|</math>はそれぞれ<math>dr, rd\theta, dz</math>とわかる。<math>r, \theta, z</math>を物理量として捉えたとき<math>d\theta</math>の単位はラジアン(無次元量)であり、<math>rd\theta</math>の単位はメートル(長さの次元1)なので、次元の整合性が取れる。
纏めると以下のようになる。
{| class="wikitable"
| ||style="text-align:center;"| <math>\boldsymbol{e}_x</math>成分 ||style="text-align:center;"| <math>\boldsymbol{e}_y</math>成分 ||style="text-align:center;"| <math>\boldsymbol{e}_z</math>成分 ||style="text-align:center;"| ノルム
|-
|style="text-align:center;"| <math>d\vec{r}</math> ||style="text-align:center;"| <math>\cos\theta dr</math> ||style="text-align:center;"| <math>\sin\theta dr</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>dr</math>
|-
|style="text-align:center;"| <math>d\vec{\theta}</math> ||style="text-align:center;"| <math>-r\sin\theta d\theta</math> ||style="text-align:center;"| <math>r\cos\theta d\theta</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>rd\theta</math>
|-
|style="text-align:center;"| <math>d\vec{z}</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>1</math> ||style="text-align:center;"| <math>dz</math>
|}
ここで<math>d\vec{r}, d\vec{\theta}, d\vec{z}</math>は内積を取ればどの組も互いに直交することが容易にわかるので、この3つのベクトルは3次元ユークリッド空間の直交基底である。
そこで、それぞれのベクトルを正規化することで各軸曲線方向の基本ベクトルを得る。
:<math>\boldsymbol{e}_r = \frac{d\vec{r}}{dr} = \cos\theta \boldsymbol{e}_x + \sin\theta \boldsymbol{e}_y</math>
:<math>\boldsymbol{e}_\theta = \frac{d\vec{\theta}}{rd\theta} = -\sin\theta\boldsymbol{e}_x+\cos\theta\boldsymbol{e}_y</math>
:<math>\boldsymbol{e}_z=\frac{d\vec{z}}{dz}=\boldsymbol{e}_z</math>
これを一次変換の形式で表すと
:<math>\begin{pmatrix} \boldsymbol{e}_r \\ \boldsymbol{e}_\theta \\ \boldsymbol{e}_z \end{pmatrix} = \begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_x \\ \boldsymbol{e}_y \\ \boldsymbol{e}_z \end{pmatrix}</math>
となる。
このときの表現行列を、座標系または基底ベクトルを変換することから'''座標変換行列'''又は'''基底変換行列'''という。場合によっては'''変換テンソル'''とも呼ぶ。
なお、この直交座標⇒円筒座標の座標変換行列は、<math>xyz</math>空間に於ける<math>z</math>軸まわりの回転行列に等しい。
逆基底変換はこの座標変換行列の逆行列を求めれば定式化できる。
回転行列は直交行列なので
:<math>\begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} ^{-1}= {}^t \! \begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} </math>
であり、
:<math>\begin{pmatrix} \boldsymbol{e}_x \\ \boldsymbol{e}_y \\ \boldsymbol{e}_z \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_r \\ \boldsymbol{e}_\theta \\ \boldsymbol{e}_z \end{pmatrix}</math>
円筒座標系は、[[電磁気学]]の解析でよく使用される。
例えば、高校物理の公式<math>B(r)=\frac{\mu_0I}{\tau r}</math>は、円筒座標系を知っていれば「電流が<math>z</math>軸に平行であることから磁場は<math>z</math>方向に一葉且つ<math>\theta</math>方向に回転対称なので、<math>r</math>方向の項のみが寄与する」と理解される。
===極座標系===
高等学校までの地理で習ったように、球面上の位置は緯度<math>\theta</math>と経度<math>\phi</math>で定めることができる。
一般に三次元空間で球面上のある点の座標を定めるには、更に球の中心からの距離<math>r</math>が必要である。
このようにして定められる座標系を'''三次元極座標系'''(polar coordinate system in 3D)または'''球(面)座標系'''(spherical coordinate system)という。
xyz座標空間の点<math>\mathrm{P}(x, y, z)</math>の極座標表示を考える。
<math>r=|\overrightarrow{\mathrm{OP}}|=\sqrt{x^2+y^2+z^2}</math>は容易にわかる。
<math>\theta</math>は<math>z</math>軸からの'''天頂角'''(zenith angle)であり、<math>\overrightarrow{\mathrm{OP}}</math>の<math>z</math>軸への正射影ベクトルを<math>\overrightarrow{\mathrm{OH}}=\vec{h}</math>とすると<math>\tan\theta = \frac{|\vec{h}|}{z}</math>が成り立つ。<math>|\vec{h}|=\sqrt{x^2+y^2}</math>より、<math>\theta=\arctan \frac{\sqrt{x^2+y^2}}{z}</math>である。
<math>\phi</math>は<math>x</math>軸からの'''方位角'''(azimuth angle)であり、<math>\mathrm{P}</math>から<math>xy</math>平面に降ろした垂足<math>\mathrm{Q}</math>を考えると<math>\tan\phi=\frac{y}{x}</math>とわかる。よって、<math>\phi=\arctan\frac{y}{x}</math>である。
逆に、これを<math>\mathrm{P}(x, y, z)</math>に復元することを考える。
<math>\triangle\mathrm{OHP}</math>について<math>\angle\mathrm{HOP}=\theta</math>なので、<math>z=\overline{\mathrm{OH}}=r\cos\theta</math>。
また、<math>\triangle\mathrm{OPQ}</math>について<math>\angle\mathrm{OPQ}=\theta</math>なので、<math>\overline{\mathrm{OQ}}=r\sin\theta</math>。
よって<math>x=\overline{\mathrm{OQ}}\cos\phi=r\sin\theta\cos\phi, y=\overline{\mathrm{OQ}}\sin\phi=r\sin\theta\sin\phi</math>。
以上を纏めると、直交座標と球面座標の対応関係は
:<math>\begin{cases} x=r\sin\theta\cos\phi \\ y=r\sin\theta\sin\phi \\ z=r\cos\theta \end{cases} \iff \begin{cases} r=\sqrt{x^2+y^2+z^2} \\ \theta=\arctan\frac{\sqrt{x^2+y^2}}{z} \\ \phi=\arctan\frac{y}{x} \end{cases}</math>
一般に緯度は<math>-90^\circ \leqq \theta \leqq 90^\circ</math>、経度は<math>-180^\circ \leqq \phi \leqq 180^\circ</math>の範囲で表される(但し、符号の違いは東⇔西、南⇔北の違いである)。同様に、球面座標の天頂角<math>\theta</math>、方位角<math>\phi</math>は<math>\theta \in [-\frac{\pi}{4}, \frac{\tau}{4}], \phi \in [-\frac{\tau}{2}, \frac{\tau}{2}]</math>で考える。赤道面より下側(すなわち南半球)では<math>\theta<0</math>とする。
直交座標の<math>z</math>軸を基に極座標系の座標線を決定する。
:<math>r</math>曲線:原点を通る半直線。
:<math>\theta</math>曲線:原点中心で<math>z</math>軸上の一点から出る半円弧。
:<math>\phi</math>曲線:<math>z</math>軸を法線とする平面内で<math>z</math>軸上に中心を持つ円周。
各曲線に沿った微小変化は円柱座標系の場合と同様、ベクトル場の全微分を用いて
:<math>\begin{cases} d\vec{r}= \begin{pmatrix} \sin\theta\cos\phi \\ \sin\theta\sin\phi \\ \cos\theta \end{pmatrix} dr \\ d\vec{\theta}= \begin{pmatrix} \cos\theta\cos\phi \\ \cos\theta\sin\phi \\ -\sin\theta \end{pmatrix}rd\theta \\ d\vec{\phi} = \begin{pmatrix} -\sin\phi \\ \cos\phi \\ 0 \end{pmatrix} r\sin\theta d\phi \end{cases}</math>
と求まる。
これらは(内積の結果から)互いに直交するので、円柱座標の場合と同様の議論により
:<math>\begin{pmatrix} \sin\theta\cos\phi & \sin\theta\sin\phi & \cos\theta \\ \cos\theta\cos\phi & \cos\theta\sin\phi & -\sin\theta \\ -\sin\phi & \cos\phi & 0 \end{pmatrix}</math>
と変換テンソルが求まる。
これも直交行列であるので、逆変換テンソルは
:<math>\begin{pmatrix} \sin\theta\cos\phi & \cos\theta\cos\phi & \cos\phi \\ \sin\theta\sin\phi & \cos\theta\sin\phi & -\sin\phi \\ -\sin\theta & \cos\theta & 0 \end{pmatrix}</math>
と求まる。
球面座標系は、[[古典力学]]の解析でよく使用される。
例えば、赤道平面における角運動量保存則は<math>mr^2\frac{d\phi}{dt}=\mathrm{const}.</math>と表示されるが、これは<math>z</math>軸方向の角運動量を球面座標系の演算により取り出したものである。
球面座標系は特に機械制御に応用されている。
円柱座標系・球面座標系ともに各基底ベクトルが互いに直交しているので、そのことを明示して(且つ通常の直交座標系と区別して)'''直交曲線座標系'''(orthogonal curvilinear coordinate system)と呼ぶ場合がある。以下で扱う座標系たちも直交曲線座標系である。
===円環座標系===
===双極座標系===
===回転放物面座標系===
===放物柱座標系===
===回転楕円面座標系===
===楕円柱座標系===
===楕円体座標系===
==空間微分==
ここでは三次元ユークリッド空間で考える。
===勾配===
スカラー場<math>\varphi=\varphi(\boldsymbol{x})</math>が<math>x, y, z</math>の三変数関数であって<math>\varphi\in C^1</math>のとき、
:<math>\mathrm{grad}\,\varphi := \begin{pmatrix} \frac{\partial{\varphi}}{\partial{x}} \\ \frac{\partial{\varphi}}{\partial{y}} \\ \frac{\partial{\varphi}}{\partial{z}} \end{pmatrix}</math>
を<math>\varphi</math>の'''勾配'''(gradient)と定義する。
勾配の結果として得るベクトルを<math>\varphi</math>の'''勾配ベクトル'''ともいう。
勾配で定義される概念としては、電場が有名である。
:電位<math>\phi</math>に対する電場<math>\boldsymbol{E}</math>は
:<math>\boldsymbol{E}:=-\mathrm{grad}\,\phi</math>
勾配はベクトル量であるため、そのことを明示するため新たな演算子を導入する。
'''空間偏微分演算子'''(ハミルトン演算子)を
<math>\nabla:=\begin{pmatrix} \frac{\partial}{\partial{x}} \\ \frac{\partial}{\partial{y}} \\ \frac{\partial}{\partial{z}} \end{pmatrix}</math>
と定義する。
この演算子自体は偏微分作用素の対象を後接しないと意味を成さない。しかし、便宜的にベクトル量と考えてベクトルと同様の演算則が成り立つと見做す。そのため、この演算子に関する演算は[[w:記号の濫用]](symbol abuse)であることを註しておく。
<math>\nabla</math>の正式な読み方は'''ナブラ'''(nabla)であるが、<math>\Delta</math>(delta)を反転した形であることから'''エイトレッド'''(atled)とも読まれる。なお、ナブラの由来は「竪琴」を意味する古代ギリシャ語「νάβλα」である。
この演算子を用いれば勾配の表式は
:<math>\mathrm{grad}\,\varphi=\nabla\varphi</math>
となる。
<math>\varphi</math>はスカラー場なのでスカラー量であり、<math>\nabla</math>は便宜的にベクトル量と考えることから、その積<math>\nabla\varphi</math>はベクトル量のスカラー倍、すなわちベクトル量であることが見て取れる。
勾配はスカラー場に対する偏微分の結果を並べたベクトルであるため、偏微分の性質とベクトルの性質を組み合わせて以下が成り立つと判る。
#<math>\nabla(k\varphi+l\psi)=k\nabla\varphi+l\nabla\psi</math>(線型性)
#<math>\nabla(\varphi\psi)=(\nabla\varphi)\psi+\varphi(\nabla\psi)</math>(積の微分・ライプニッツ則)
#<math>\nabla\left(\frac{\varphi}{\psi}\right)=\frac{(\nabla\varphi)\psi-\varphi(\nabla\psi)}{\psi^2}</math>(商の微分)
#<math>\nabla(\varphi(\psi))=\frac{d\varphi(\psi)}{d\psi}\nabla\psi</math>(合成関数微分)
任意点に対して勾配ベクトルが非零であるスカラー場を'''正則'''なスカラー場という。
以下、正則なスカラー場に限って扱う。
等位面<math>\varphi(x, y, z)=k(\mathrm{const}.)</math>上の点<math>\mathrm{P}(x_0, y_0, z_0)</math>を考える。
:<math>\mathrm{P}</math>を通り等位面に拘束される曲線のベクトル表示を<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>とする。
:等位面の方程式を<math>t</math>で両辺微分して
::<math>\frac{\partial{\varphi}}{\partial{x}}\frac{dx}{dt}+\frac{\partial{\varphi}}{\partial{y}}\frac{dy}{dt}+\frac{\partial{\varphi}}{\partial{z}}\frac{dz}{dt}=0</math>
:<math>t=t_0</math>のとき
::<math>\frac{\partial{\varphi}}{\partial{x}}x'(t_0)+\frac{\partial{\varphi}}{\partial{y}}y'(t_0)+\frac{\partial{\varphi}}{\partial{z}}z'(t_0)=0</math>
::<math>\nabla\varphi(\mathrm{P})\cdot\boldsymbol{r}'(t_0)=0</math>
::<math>\nabla\varphi(\mathrm{P})\perp\boldsymbol{r}'(t_0)</math>
ここで<math>\mathrm{P}</math>に於ける等位面の接平面は接ベクトル<math>\boldsymbol{r}'(t_0)</math>を含むため、<math>\nabla\varphi(\mathrm{P})</math>は点<math>\mathrm{P}</math>に於ける等位面の法線ベクトルである。
よって等位面の接平面の方程式は
:<math>\nabla\varphi(\mathrm{P})\cdot(\boldsymbol{x}-\overrightarrow{\mathrm{OP}})=0</math>
である。
スカラー場<math>\varphi=\varphi(\boldsymbol{x})</math>の全微分は
:<math>d\varphi=\frac{\partial{\varphi}}{\partial{x}}dx+\frac{\partial{\varphi}}{\partial{y}}dy+\frac{\partial{\varphi}}{\partial{z}}dz</math>
これをベクトルの内積とみると
:<math>=\begin{pmatrix} \frac{\partial{\varphi}}{\partial{x}} \\ \frac{\partial{\varphi}}{\partial{y}} \\ \frac{\partial{\varphi}}{\partial{z}} \end{pmatrix}\cdot\begin{pmatrix} dx \\ dy \\ dz \end{pmatrix}</math>
:<math>=\nabla\varphi\cdot d\boldsymbol{x}</math>
ここで変位ベクトル<math>d\boldsymbol{x}</math>を任意の方向を向いた単位ベクトル<math>\boldsymbol{e}</math>に拡張することを考えたい。
<math>\varphi(\mathrm{P})</math>に対して<math>\mathrm{P}</math>を始点とする<math>\boldsymbol{e}</math>方向の直線を考え、その上の点を<math>\mathrm{Q}</math>とする。
このとき、ベクトル変数<math>\boldsymbol{e}</math>による微分係数
:<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\lim_{\mathrm{Q\to P}}\frac{\varphi(\mathrm{Q})-\varphi(\mathrm{P})}{\overline{\mathrm{QP}}}</math>
を、<math>\varphi</math>の<math>\mathrm{P}</math>に於ける<math>\boldsymbol{e}</math>方向の'''方向微分係数'''と定義する。
方向微分係数はスカラー場に対し<math>\boldsymbol{e}</math>方向の変化率を与えるものと考えられる。そこで、方向微分係数が最大となる方向を考える。
:<math>\overrightarrow{\mathrm{PQ}}=t\boldsymbol{e}</math>と置く。
::<math>\overrightarrow{\mathrm{OQ}}=\begin{pmatrix} x_0+te_1 \\ y_0+te_2 \\ z_0+te_3 \end{pmatrix}</math>
::<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\lim_{t\to0}\frac{\varphi(x_0+te_1, y_0+te_2, z_0+te_3)-\varphi(x_0, y_0, z_0)}{t}</math>
:ここで<math>\Phi(t):=\varphi(x_0+te_1, y_0+te_2, z_0+te_3)</math>とすれば
::<math>=\lim_{t\to0}\frac{\Phi(t)-\Phi(0)}{t}</math>
::<math>=\frac{d\Phi(t)}{dt}</math>
::<math>=\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{x}}\frac{d(x_0+te_1)}{dt}+\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{y}}\frac{d(y_0+te_2)}{dt}+\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{z}}\frac{d(z_0+te_3)}{dt}</math>
::<math>=\frac{\partial{\varphi}(\mathrm{P})}{\partial{x}}e_1+\frac{\partial{\varphi}(\mathrm{P})}{\partial{y}}e_2+\frac{\partial{\varphi}(\mathrm{P})}{\partial{z}}e_3</math>
::<math>=\nabla\varphi(\mathrm{P})\cdot\boldsymbol{e}</math>
よって、全微分の式の<math>d\boldsymbol{x}</math>をそのまま<math>\boldsymbol{e}</math>に取り替えたものが方向微分係数の表式である。
内積を書き下すと<math>\|\boldsymbol{e}\|=1</math>より
:<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\|\nabla\varphi(\mathrm{P})\|\cos\theta</math>
よって最大値をとるのは<math>\cos\theta=1</math>則ち'''<math>\boldsymbol{e}</math>が勾配方向のとき'''である。また、方向微分係数の最大値は'''勾配のノルム'''である。
このように、勾配はスカラー場の各点に於ける傾きを表す。これは最右辺の式が「各軸方向の傾きを表すベクトルの和」になっていることからも直観的にわかる。ここから、「gradient」の和訳として「勾配」が充当されたのは妥当である。
方向微分係数を'''方向導関数'''に拡張することを考える。
形式的には方向微分係数の定点<math>\mathrm{P}</math>を変数<math>\boldsymbol{x}</math>に置き換えればいいだけである。
:<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{\boldsymbol{e}}}:=\nabla\varphi(\boldsymbol{x})\cdot\boldsymbol{e}</math>
正式には極限を用いて
:<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{\boldsymbol{e}}}:=\lim_{t\to0}\frac{\varphi(\boldsymbol{x}+t\boldsymbol{e})-\varphi(\boldsymbol{x})}{t}</math>
と定義する。
内積を書き下すと
:<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{x}}e_1+\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{y}}e_2+\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{z}}e_3</math>
これを[[解析学基礎/多変数関数の微積分#極値]]で扱った方向偏微分作用素として書き直すと
:<math>\left(e_1\frac{\partial}{\partial{x}}+e_2\frac{\partial}{\partial{y}}+e_3\frac{\partial}{\partial{z}}\right)\varphi(\boldsymbol{x})</math>
:<math>=(\boldsymbol{e}\cdot\nabla)\varphi(\boldsymbol{x})</math>
となる。
則ち、形式的には空間偏微分演算子の微分方向ベクトルとの右内積が方向偏微分作用素である。
更に、多変数関数のテイラー二次近似は
:<math>f(\boldsymbol{x})\fallingdotseq f(\boldsymbol{a})+\nabla{f}(\boldsymbol{a})\cdot(\boldsymbol{x}-\boldsymbol{a})+\frac{1}{2}{}^t\!(\boldsymbol{x}-\boldsymbol{a})\mathbf{D}(\boldsymbol{x}-\boldsymbol{a})</math>
と書けることが判る。但し、<math>\mathbf{D}</math>はヘッセ行列である。
多変数解析で扱った停留点(臨界点)は<math>\nabla\varphi(\mathrm{P})=\boldsymbol{0}</math>なる点<math>\mathrm{P}</math>として正式に定義される。また、ラグランジュの未定乗数法に於ける連立方程式も勾配を用いれば<math>\nabla\varphi(\mathrm{P})=\lambda\nabla\psi(\mathrm{P})</math>と書き表される。
スカラー場の全微分は勾配で表せたが、同様にベクトル場の全微分をナブラを用いて表すことを考える。
ベクトル場の全微分は
:<math>d\boldsymbol{a}=\frac{\partial{(a_x,a_y,a_z)}}{\partial{(x,y,z)}} d\boldsymbol{x}</math>
で定義された。
ここで<math>n</math>次行列 <math>\mathbf{A}</math>と<math>n</math>項列ベクトル <math>\boldsymbol{a}</math>に対し、<math>(\mathbf{A} \circledast \boldsymbol{a})_{ij} = (\mathbf{A}_{ij}) a_i</math>となるような可換二項演算子 <math>\circledast</math>を定義する。これは本項独自の記法である。但し、<math>(\mathbf{P})_{ij}</math>は行列 <math>\mathbf{P}</math>の第ij成分を表す。
この記法を用いると、ヤコビ行列<math>\frac{\partial{(a_x,a_y,a_z)}}{\partial{(x,y,z)}}</math>は<math>\nabla \circledast \boldsymbol{a}</math>と表すことができる。
則ち、ベクトル場の全微分は
:<math>d\boldsymbol{a} = (\nabla \circledast \boldsymbol{a}) d\boldsymbol{x}</math>
と表される。
これを形式的に
:<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{x}}}=\nabla \circledast \boldsymbol{a}</math>
と書き表すことができる。
則ち、ヤコビ行列はベクトル場のベクトル変数による導関数と見做せる。
ヤコビ行列はベクトル場の成分スカラー場に対する勾配ベクトルを行に並べたものという解釈もできるので、この考え方は自然である。
ここでベクトル場に対してスカラー場と同様に方向微分係数・方向導関数を考えると、
:<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{x}}}\boldsymbol{v}</math>
が成り立つことが判る。
これもベクトル場の成分スカラー場に対する方向微分係数・方向導関数を列に並べたベクトルと解釈できる。
則ち、
:<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=(\nabla\circledast\boldsymbol{a})\boldsymbol{v}=(\boldsymbol{v}\cdot\nabla)\boldsymbol{a}</math>
である。
===発散===
ベクトル場<math>\boldsymbol{a}=\boldsymbol{a}(\boldsymbol{x})</math>が<math>x, y, z</math>の三変数関数であって<math>\boldsymbol{a}\in C^1</math>のとき、
:<math>\mathrm{div}\,\boldsymbol{a} := \frac{\partial{a_x}}{\partial{x}} + \frac{\partial{a_y}}{\partial{y}} + \frac{\partial{a_z}}{\partial{z}}</math>
を<math>\boldsymbol{a}</math>の'''発散'''(divergence)と定義する。
発散が用いられる概念としては、'''ガウスの法則'''が有名である。
:電荷密度<math>\rho</math>、電場<math>\boldsymbol{E}</math>、真空の誘電率<math>\varepsilon_0</math>として
:<math>\mathrm{div}\,\boldsymbol{E}=\frac{\rho}{\varepsilon_0}</math>
球面座標で考えることにより、この式の重要な性質「荷電粒子の座標を原点にとると原点以外では
<math>\mathrm{div}\,\boldsymbol{E}=0</math>」を証明することができる。
勾配と同様に発散をナブラで表すことを考えると、
:<math>\mathrm{div}\,\boldsymbol{a}=\nabla\cdot\boldsymbol{a}</math>
という表式を得る。
<math>\boldsymbol{a}</math>はベクトル場なのでベクトル量であり、<math>\nabla</math>は便宜的にベクトル量と考えることから、その内積<math>\nabla\cdot\boldsymbol{a}</math>はスカラー量であることが見て取れる。
発散に対しては以下が成り立つ。
#<math>\nabla\cdot(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\cdot\boldsymbol{a}+l\nabla\cdot\boldsymbol{b}</math>(線型性)
#<math>\nabla\cdot(\varphi\boldsymbol{a})=(\nabla\varphi)\cdot\boldsymbol{a}+\varphi\nabla\cdot\boldsymbol{a}</math>(積の微分・ライプニッツ則)
前者は内積の線型性より、後者は成分演算と勾配の定義より示される。
ヤコビ行列<math>\nabla\circledast\boldsymbol{a}</math>との関係を考える。
:<math>\nabla\circledast\boldsymbol{a}=\begin{pmatrix} \frac{\partial{\boldsymbol{a}}}{\partial{x}} & \frac{\partial{\boldsymbol{a}}}{\partial{y}} & \frac{\partial{\boldsymbol{a}}}{\partial{z}} \end{pmatrix}=\begin{pmatrix} \frac{\partial{a}_x}{\partial{x}} & \frac{\partial{a}_x}{\partial{y}} & \frac{\partial{a}_x}{\partial{z}} \\ \frac{\partial{a}_y}{\partial{x}} & \frac{\partial{a}_y}{\partial{y}} & \frac{\partial{a}_y}{\partial{z}} \\ \frac{\partial{a}_z}{\partial{x}} & \frac{\partial{a}_z}{\partial{y}} & \frac{\partial{a}_z}{\partial{z}} \end{pmatrix}</math>
ここで跡が発散そのものになっているので
:<math>\nabla\cdot\boldsymbol{a}=\mathrm{tr}(\nabla\circledast\boldsymbol{a})</math>
が成り立つ。
発散の物理的意味を考える。
:密度<math>\rho</math>が一定である流体の速度場<math>\boldsymbol{v}\in\mathbb{R}^3</math>に対し、微小直方体に出入りする流体の質量収支を考える。
:点<math>(x,y,z)</math>に於ける流速<math>\boldsymbol{v}(x,y,z)=(v_x,v_y,v_z)</math>、直方体の各辺の長さを<math>\delta x, \delta y, \delta z</math>とする。
:単位時間あたりに<math>yz</math>平面に平行な面を通過する流体の質量収支は流出量<math>-\rho v_x(x,y,z)\delta y\delta z</math>、流入量<math>\rho v_x(x+\delta x,y,z)\delta y\delta z</math>より
::<math>\rho(v_x(x+\delta x,y,z)-v_x(x,y,z))\delta y\delta z=\rho\frac{v_x(x+\delta x,y,z)-v_x(x,y,z)}{\delta x}\delta x\delta y\delta z</math>
:<math>\delta x\to0</math>の極限で
::<math>=\rho\frac{\partial{v_x}}{\partial{x}}dxdydz</math>
:他の面で考えると対称性から輪環の順に入れ替えた結果を得るので直方体全体では
::<math>\rho\left(\frac{\partial{v_x}}{\partial{x}}+\frac{\partial{v_y}}{\partial{y}}+\frac{\partial{v_z}}{\partial{z}}\right)dxdydz</math>
:よって単位体積当たりでは
::<math>\rho\nabla\cdot\boldsymbol{v}</math>
:を得る。
ここで質量を密度で割ると体積なので、<math>\nabla\cdot\boldsymbol{v}</math>は単位時間あたりの流体の体積の正味の流出率を表す。
この微小直方体の単位体積あたりで観測すると、発散が正であれば流体は膨脹して密度が下がり、負であれば圧縮されて密度が上がる。0であれば流体は膨脹も圧縮もしない。
発散が零であるベクトル場を'''非圧縮/湧出無し/管状/ソレノイダル ベクトル場'''(incompressible/solenoidal vector field)などと呼ぶ。
また、ベクトル場の発散を'''湧き出し'''(「沸き出し」とも書く)と呼ぶ場合もある。
ベクトル場の流線に沿う流れが流体の体積を保存する条件はベクトル場が非圧縮であることである。これを'''リウヴィルの定理'''という。これは多くの場合、[[解析力学]]のハミルトン形式で表示される。
位置ベクトル場<math>\boldsymbol{r}=\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>に対して<math>\nabla\cdot\frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^n}</math>を考える。
:<math>\frac{\partial}{\partial{x}}\frac{1}{\|\boldsymbol{r}\|^n}=\frac{\partial{\left(\frac{1}{\|\boldsymbol{r}\|^n}\right)}}{\partial{\|\boldsymbol{r}\|}}\frac{\partial{\|\boldsymbol{r}\|}}{\partial{x}}=-\frac{n}{\|\boldsymbol{r}\|^n+1}\frac{x}{\sqrt{x^2+y^2+z^2}}=-\frac{nx}{\|\boldsymbol{r}\|^{n+2}}</math>
<math>y, z</math>も同様なので
:<math>\nabla\frac{1}{\|\boldsymbol{r}\|^n}=-\frac{n\boldsymbol{r}}{\|\boldsymbol{r}\|^{n+1}}</math>
よって発散のライプニッツ則から
:<math>\nabla\cdot\frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^n}=\left(\nabla\frac{1}{\|\boldsymbol{r}\|^n}\right)\cdot\boldsymbol{r}+\frac{1}{\|\boldsymbol{r}\|^n}\nabla\cdot\boldsymbol{r}=-\frac{n\boldsymbol{r}\cdot\boldsymbol{r}}{\|\boldsymbol{r}\|^{n+2}}+\frac{1+1+1}{\|\boldsymbol{r}\|^n}=\frac{3-n}{\|\boldsymbol{r}\|^n}</math>
この結果から、<math>\boldsymbol{a}/\!\!/\boldsymbol{r}\land\|\boldsymbol{a}\|\propto \frac{1}{\|\boldsymbol{r}\|^2}\implies\nabla\cdot\boldsymbol{a}=0</math>(逆二乗則に従う場は非圧縮ベクトル場)が成り立つ。
ベクトル解析の黎明期では発散の逆符号で表される
:<math>\mathrm{conv}\,\boldsymbol{a}:=-\frac{\partial{a_x}}{\partial{x}} - \frac{\partial{a_y}}{\partial{y}} - \frac{\partial{a_z}}{\partial{z}}</math>
という量が用いられていた。これは'''吸い込み'''(convergence)と呼ばれる量である。
ベクトルが発明される以前、ベクトル演算に相当するものは[[多元数/四元数|四元数]]で記述されていた。純虚四元数同士の積をとると実部が現在で言う内積の-1倍、虚部が現在で言う外積に対応する。このことから、内積そのものである湧き出しではなく内積の-1倍である吸い込みが自然に出現する量として頻繁に扱われていたのである。
===回転===
回転運動は、以下の3つにより一意に定まる。
*回転軸の方向
*回転の速さ
*回転方向(軸に対して右回転か左回転か)
「回転方向」は暗黙の諒解として右手系の正の回転角で考える。すると、回転運動を表すのに必要な情報は「方向」と「速さ(=スカラー量)」のみとなる。
従って、'''任意の回転運動はベクトルで表示される'''(ベクトルの大きさは「回転の速さ」で定める)。このようなベクトルを'''角速度ベクトル'''という。
ベクトル場の'''回転'''(curl/rotation/rotor)を以下のように定義する。
:<math>\mathrm{curl} \, \boldsymbol{a} = \mathrm{rot} \, \boldsymbol{a} = \begin{pmatrix} \frac{\partial{a_z}}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}} \end{pmatrix}</math>
<math>\mathrm{curl}</math>は理学系、<math>\mathrm{rot}</math>は工学系が好んで使用する。
<math>z</math>軸方向の成分について考える。
<math>z</math>軸方向の回転はフレミングの左手の法則から<math>xy</math>平面内の成分のみが寄与すると考えられる。<math>z</math>軸の正方向の回転を生むには、<math>x</math>軸方向の変化率を大きくして<math>y</math>軸方向の変化率を小さくすればよい。
ある軸方向の変化率とはその軸の変数に関する偏導関数のことであったので、回転のz成分を<math>\frac{\partial{X_y}}{\partial{x}}-\frac{\partial{X_x}}{\partial{y}}</math>とすれば満足する。
対称性より輪環の順で入れ替えても同様であるので、回転は上の式で表されるとわかる。
これはより厳密には後述の線積分を用いて説明することになるので、ここでは定性的な説明に留めた。
回転を用いた概念として、ファラデーの電磁誘導の法則が有名である。
:電場<math>\boldsymbol{E}</math>、磁束密度<math>\boldsymbol{B}</math>として
:<math>\mathrm{rot} \, \boldsymbol{E} = -\frac{\partial{\boldsymbol{B}}}{\partial{t}}</math>
流体の渦の記述にも応用されており、回転を'''渦度ベクトル'''とも呼ぶ。流体力学的な渦の定義は「速度場の回転」である。
回転が零ベクトルであるベクトル場を'''非回転的/渦無し/層状/ラメラー ベクトル場'''(irrotational/lamella vector field)などと呼ぶ。
勾配・発散と同様に空間偏微分演算子による表記を考える。
成分に着目すると外積の形式なので、
:<math>\mathrm{curl} \, \boldsymbol{a}= \nabla \times \boldsymbol{a}</math>
と表されることが判る。
ベクトル場はベクトル量であり、ナブラは便宜的にベクトル量と見做すことから、その外積である回転はベクトル量であることが見て取れる。
外積の性質から、回転は行列式
:<math>\det \begin{pmatrix} \boldsymbol{e}_x & \boldsymbol{e}_y & \boldsymbol{e}_z \\ \frac{\partial}{\partial{x}} & \frac{\partial}{\partial{y}} & \frac{\partial}{\partial{z}} \\ a_x & a_y & a_z \end{pmatrix}</math>
でも表示される。
回転に対しては以下が成り立つ。
#<math>\nabla\times(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\times\boldsymbol{a}+l\nabla\times\boldsymbol{b}</math>(線型性)
#<math>\nabla\times(\varphi\boldsymbol{a})=(\nabla\varphi)\times\boldsymbol{a}+\varphi\nabla\times\boldsymbol{a}</math>(積の微分・ライプニッツ則)
前者は外積の線型性より、後者は成分演算と勾配の定義より示される。
回転は常に角速度ベクトルと一致するとは限らない。そのため、必ずしも回転運動そのものを記述しない。
回転は、ヤコビ行列を用いると以下のように表される。
:<math>\mathrm{rot} \, \boldsymbol{a} = 2 \,\mathrm{axl} \left( \frac{\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})}{2} \right)</math>
:ここで<math>\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})</math>は反対称行列であり、<math>\mathrm{axl}</math>は反対称行列を軸ベクトルに移す写像である。
===ラプラシアン===
上で見てきた勾配・発散・回転はいずれも一階の偏微分作用素であった。
二階偏微分作用素のうち最もよく使われているのがスカラー場に対して勾配の発散をとる演算である。
:<math>\nabla\cdot(\nabla\varphi) = \mathrm{div}(\mathrm{grad}\,\varphi)</math>
ここで<math>(\nabla\cdot\nabla)\varphi</math>を計算してみると成分計算から上の<math>\nabla\cdot(\nabla\varphi)</math>に等しいことが容易に判る。則ち、発散作用素<math>\nabla\cdot\,\,</math>、勾配作用素<math>\nabla</math>、スカラー場<math>\varphi</math>の間に結合法則が成り立ってると見做せる。
そこで、<math>\nabla\cdot\nabla</math>を独立した演算子として考えることにする。
以下のように定義される演算子を'''ラプラス演算子'''(ラプラス作用素)という。
:<math>\text{∆}:=\nabla\cdot\nabla=\frac{\partial^2}{\partial{x}^2}+\frac{\partial^2}{\partial{y}^2}+\frac{\partial^2}{\partial{z}^2}</math>
二項目は[[w:記号の濫用]]により<math>\nabla^2</math>と書かれることもある。
但し、<math>\text{∆}</math>は通常のデルタ(Unicode文字名: GREEK CAPITAL LETTER DELTA, U+394)ではなく'''増分記号'''(Unicode文字名:INCREMENT, U+2206)である(が通常のデルタで書かれることが多い)。
ラプラス演算子を<math>C^2</math>級スカラー場に作用させる操作(及びその結果として得るスカラー場)を'''ラプラシアン'''(Laplacian)という。
:<math>\text{∆}\varphi=\frac{\partial^2{\varphi}}{\partial{x}^2}+\frac{\partial^2{\varphi}}{\partial{y}^2}+\frac{\partial^2{\varphi}}{\partial{z}^2}</math>
スカラー場のラプラシアンは各成分方向の曲率の和、すなわちスカラー場の各点に於ける突出・沈み込みの度合いを表す。
勾配・発散・回転・ラプラシアンを総称して'''空間微分'''と呼ぶ。
ラプラシアンは[[解析学基礎/偏微分方程式|偏微分方程式]]の記述に用いられている。
:'''ラプラス方程式'''・'''ポテンシャル方程式''':<math>\text{∆}\varphi=0</math>
:'''ポアソン方程式''':<math>\text{∆}\varphi=f</math>
:'''熱伝導方程式'''・'''拡散方程式''':<math>\text{∆}\psi=k\frac{\partial{\psi}}{\partial{t}}+g</math>
:'''波動方程式''':<math>\text{∆}\psi=\frac{1}{\nu^2}\frac{\partial^2{\psi}}{\partial{t}^2}</math>
:'''ヘルツホルム方程式''':<math>\text{∆}\varphi=-l^2\varphi</math>
ここで<math>\varphi=\varphi(x,y,z),\,f=f(x,y,z),\,\psi=\psi(x,y,z,t),\,k>0,\,g=g(x,y,z,t),\,\nu>0,\,l\in\mathbb{R}</math>である。
なお、ラプラス方程式の解を'''調和関数'''という。
<math>C^2</math>級ベクトル場のラプラシアンは以下のように定義される。
:<math>\text{∆}\boldsymbol{a}=\begin{pmatrix} \text{∆}a_x \\ \text{∆}a_y \\ \text{∆}a_z \end{pmatrix}</math>
ここでスカラー場と同様に考えて<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})</math>としたいところではあるが、これは一般には成り立たない。
実際には以下のように表示される。
:<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})=\mathrm{grad}(\mathrm{div}\,\varphi)-\mathrm{rot}(\mathrm{rot}\,\varphi)</math>
*証明
:対称性より<math>x</math>成分のみ考えても輪環の順に入れ替えれば他の成分を得る。
::<math>\nabla\cdot\boldsymbol{a}=\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}}</math>
:より
::<math>\{\nabla(\nabla\cdot\boldsymbol{a})\}_x=\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_y}}{\partial{x}\partial{y}}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}</math>
:また、
::<math>\nabla\times\boldsymbol{a}=\begin{pmatrix} \frac{\partial{a_z}}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}} \end{pmatrix}</math>
:より
::<math>\{\nabla\times(\nabla\times\boldsymbol{a})\}_x=\frac{\partial}{\partial{y}}\left(\frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}}\right)-\frac{\partial}{\partial{z}}\left(\frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}}\right)</math>
::<math>=\frac{\partial^2{a_y}}{\partial{y}\partial{x}}-\frac{\partial^2{a_x}}{\partial{y}^2}+\frac{\partial^2{a_z}}{\partial{z}\partial{x}}-\frac{\partial^2{a_x}}{\partial{z}^2}</math>
:<math>\boldsymbol{a}\in{C^2}</math>より偏微分は可換(シュワルツの定理)なので、<math>\{\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})\}_x</math>を計算すると
::<math>\left(\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_y}}{\partial{x}\partial{y}}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}\right)-\left(\frac{\partial^2{a_y}}{\partial{x}\partial{y}}-\frac{\partial^2{a_x}}{\partial{y}^2}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}-\frac{\partial^2{a_x}}{\partial{z}^2}\right)</math>
::<math>=\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_x}}{\partial
{y}^2}+\frac{\partial^2{a_x}}{\partial{z}^2}</math>
::<math>=\text{∆}a_x</math>//
ここから判るように、ベクトル場<math>\boldsymbol{a}</math>に対して<math>\text{∆}=\nabla(\nabla\cdot)</math>が成り立つ条件は<math>\nabla\times(\nabla\times\boldsymbol{a})=\boldsymbol{0}</math>である。<math>\boldsymbol{a}</math>が非回転ベクトル場であれば回転が零ベクトルなのでこの形を必ず満足する。但し、この形を満たすベクトル場が全て非回転的ベクトル場であるとは限らない。
則ち、外積の反復と同様に回転演算子<math>\nabla\times\,\,</math>の反復に対して結合法則は不成立である。
歴史的な四元数表記では発散の代わりに吸い込みが用いられていたことからラプラシアンも現在とは反対の符号で計算されていた。ラプラシアンはユークリッド空間に限らず定義可能であるが、その中でも特に重要なのは[[特殊相対論#マクスウェルの方程式|相対性理論]]で用いられる'''ダランベール演算子'''(ダランベルシアン、クアブラ、波動演算子)である。
:<math>\text{⧠}:=\frac{1}{\nu^2}\frac{\partial^2}{\partial{t^2}}-\text{∆}</math>
これは標準座標系で表されるミンコフスキー空間上のラプラシアンに相当する。<math>\text{∆}</math>は上で扱ってきた通常のラプラシアンのことである。
これを用いると波動方程式は<math>\text{⧠}\psi=0</math>というミンコフスキー空間上のラプラス方程式と解釈される。つまり、波動関数はミンコフスキー空間で見れば調和関数なのである。
また、[[w:クライン=ゴルドン方程式]]と呼ばれる偏微分方程式は
:<math>\text{⧠}\psi=-\mu^2\psi</math>
というミンコフスキー空間上のヘルツホルム方程式と解釈される。
===微分定理===
ここでは、ナブラに関する公式を見ていく。以下、シュワルツの定理が成り立っているものとする。また、成分計算をすればいいだけなので証明は省略する。
既に紹介したものを以下に並べる。
#勾配
#:<math>\nabla(k\varphi+l\psi)=k\nabla\varphi+l\nabla\psi</math>
#:<math>\nabla(\varphi\psi)=(\nabla\varphi)\psi+\varphi(\nabla\psi)</math>(
#:<math>\nabla\left(\frac{\varphi}{\psi}\right)=\frac{(\nabla\varphi)\psi-\varphi(\nabla\psi)}{\psi^2}</math>
#:<math>\nabla(\varphi(\psi))=\frac{d\varphi(\psi)}{d\psi}\nabla\psi</math>
#:<math>\frac{\partial{\varphi}}{\partial{\boldsymbol{e}}}=(\boldsymbol{e}\cdot\nabla)\varphi</math>
#:<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=(\nabla\circledast\boldsymbol{a})\boldsymbol{v}=(\boldsymbol{v}\cdot\nabla)\boldsymbol{a}</math>
#発散
#:<math>\nabla\cdot(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\cdot\boldsymbol{a}+l\nabla\cdot\boldsymbol{b}</math>
#:<math>\nabla\cdot(\varphi\boldsymbol{a})=(\nabla\varphi)\cdot\boldsymbol{a}+\varphi\nabla\cdot\boldsymbol{a}</math>
#:<math>\nabla\cdot\boldsymbol{a}=\mathrm{tr}(\nabla\circledast\boldsymbol{a})</math>
#回転
#:<math>\nabla\times(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\times\boldsymbol{a}+l\nabla\times\boldsymbol{b}</math>
#:<math>\nabla\times(\varphi\boldsymbol{a})=(\nabla\varphi)\times\boldsymbol{a}+\varphi\nabla\times\boldsymbol{a}</math>
#:<math>\nabla\times\boldsymbol{a} = 2 \,\mathrm{axl} \left( \frac{\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})}{2} \right)</math>
#ラプラシアン
#:<math>\text{∆}\varphi=\nabla\cdot(\nabla\varphi)</math>
#:<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})</math>
二つのベクトル場<math>\boldsymbol{a}, \boldsymbol{b}</math>の内積・外積に対してそれぞれ一階の空間微分を考えてみる。
<math>\boldsymbol{a}\cdot\boldsymbol{b}</math>はスカラー量なので勾配のみ考えられる。
:<math>\nabla(\boldsymbol{a}\cdot\boldsymbol{b})=(\nabla\circledast\boldsymbol{a})\boldsymbol{b}+(\nabla\circledast\boldsymbol{b})\boldsymbol{a}+\boldsymbol{a}\times(\nabla\times\boldsymbol{b})+\boldsymbol{b}\times(\nabla\times\boldsymbol{a})</math>
<math>\boldsymbol{a}\times\boldsymbol{b}</math>はベクトル量なので発散・回転のみ考えられる。
:<math>\nabla\cdot(\boldsymbol{a}\times\boldsymbol{b})=\boldsymbol{b}\cdot(\nabla\times\boldsymbol{a})-\boldsymbol{a}\cdot(\nabla\times\boldsymbol{b})</math>
:<math>\nabla\times(\boldsymbol{a}\times\boldsymbol{b})=(\nabla\circledast\boldsymbol{a})\boldsymbol{b}-(\nabla\circledast\boldsymbol{b})\boldsymbol{a}+\boldsymbol{a}(\nabla\cdot\boldsymbol{b})-\boldsymbol{b}(\nabla\cdot\boldsymbol{a})</math>
次に、一階の空間微分の結果に対して更なる一階の空間微分を考えてみる。
スカラー場の勾配はベクトル量なので発散・回転のみ考えられる。
:<math>\nabla\cdot(\nabla\varphi)=\text{∆}\varphi</math>
:<math>\nabla\times(\nabla\varphi)=\boldsymbol{0}</math>
ベクトル場の発散はスカラー量なので勾配のみ考えられる。
:<math>\nabla(\nabla\cdot\boldsymbol{a})=\text{∆}\boldsymbol{a}+\nabla\times(\nabla\times\boldsymbol{a})</math>
ベクトル場の回転はベクトル量なので発散・回転のみ考えられる。
:<math>\nabla\cdot(\nabla\times\boldsymbol{a})=0</math>
:<math>\nabla\times(\nabla\times\boldsymbol{a})=\nabla(\nabla\cdot\boldsymbol{a})-\text{∆}\boldsymbol{a}</math>
則ち、勾配・発散・回転はどの組み合わせでも交換法則が成り立たない。
一階の空間微分の結果に対してラプラシアンを考えてみる。
:<math>\text{∆}(\nabla\varphi)=\nabla(\text{∆}\varphi)</math>
:<math>\text{∆}(\nabla\cdot\boldsymbol{a})=\nabla\cdot(\text{∆}\boldsymbol{a})</math>
:<math>\text{∆}(\nabla\times\boldsymbol{a})=\nabla\times(\text{∆}\boldsymbol{a})</math>
ラプラシアンはスカラー性・ベクトル性を保存するので、演算が破綻する箇所はない。
則ち、ラプラシアンは勾配・発散・回転との組み合わせに対して交換法則が成り立つ。
:<math>\text{∆}\nabla=\nabla\text{∆},\quad\text{∆}(\nabla\cdot)=(\nabla\cdot)\text{∆},\quad\text{∆}(\nabla\times)=(\nabla\times)\text{∆}</math>
<math>\boldsymbol{a}\times\boldsymbol{b}</math>及び<math>\nabla\times\boldsymbol{a}</math>の発散・回転は三重積の形であった。
スカラー三重積・ベクトル三重積にナブラを様々な組み合わせで入れてその結果がどうなるか見ていく。
:<math>\boldsymbol{a}\cdot(\nabla\times\boldsymbol{b})</math>
:<math>\boldsymbol{a}\times(\nabla\times\boldsymbol{b})</math>
はそのまま計算すればいいので公式化する必要が無い。
:<math>\boldsymbol{a}\cdot(\boldsymbol{b}\times\nabla)</math>
:<math>\boldsymbol{a}\times(\boldsymbol{b}\times\nabla)</math>
:<math>\nabla\cdot(\boldsymbol{a}\times\nabla)</math>
:<math>\nabla\times(\boldsymbol{a}\times\nabla)</math>
は偏微分作用素の対象を後接してないので通常の演算としては扱えない。
:<math>\boldsymbol{a}\cdot(\nabla\times\nabla)</math>
:<math>\boldsymbol{a}\times(\nabla\times\nabla)</math>
:<math>\nabla\cdot(\nabla\times\nabla)</math>
:<math>\nabla\times(\nabla\times\nabla)</math>
は同じものの外積をとってるので当然<math>0, \boldsymbol{0}</math>である。<br>
また、三重積の公式はナブラを代入した時点で破綻する。
次に、スカラー四重積・ベクトル四重積に対しても同様のことを考える。
:<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\boldsymbol{c})</math>
:<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\boldsymbol{c})</math>
:<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\nabla\times\boldsymbol{c})</math>
:<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\nabla\times\boldsymbol{c})</math>
:<math>(\nabla\times\boldsymbol{a})\cdot(\nabla\times\boldsymbol{b})</math>
:<math>(\nabla\times\boldsymbol{a})\times(\nabla\times\boldsymbol{b})</math>
はそのまま計算すれば良いので公式化する必要が無い。
:<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\boldsymbol{c}\times\nabla)</math>
:<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\boldsymbol{c}\times\nabla)</math>
:<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\nabla)</math>
:<math>(\nabla\times\boldsymbol{a})\times(\boldsymbol{b}\times\nabla)</math>
:<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\nabla)</math>
:<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\nabla)</math>
は偏微分作用素の対象を後接してないので通常の演算としては扱えない。
:<math>(\nabla\times\nabla)\cdot(\boldsymbol{a}\times\boldsymbol{b})</math>
:<math>(\nabla\times\nabla)\times(\boldsymbol{a}\times\boldsymbol{b})</math>
:<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\nabla\times\nabla)</math>
:<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\nabla\times\nabla)</math>
及びナブラを三個以上含むものは同じものの外積をとってるので当然<math>0, \boldsymbol{0}</math>である。
故に、ここで問題になるのは
:<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\boldsymbol{c})</math>
:<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\boldsymbol{c})</math>
:<math>(\boldsymbol{a}\times\nabla)\cdot(\nabla\times\boldsymbol{b})</math>
:<math>(\boldsymbol{a}\times\nabla)\times(\nabla\times\boldsymbol{b})</math>
の扱いである。
これらには以下の公式が成り立つ。
:<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\boldsymbol{c})=\boldsymbol{a}\cdot\{\nabla\times(\boldsymbol{b}\times\boldsymbol{c})\}</math>
:<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\boldsymbol{c})=[\{\boldsymbol{b}\cdot(\nabla\times\boldsymbol{c})\}-\{\boldsymbol{c}\cdot(\nabla\times\boldsymbol{b})\}]\boldsymbol{a}+{}^t\!\{\nabla\circledast(\boldsymbol{b}\times\boldsymbol{c})\}\boldsymbol{a}</math>
:<math>(\boldsymbol{a}\times\nabla)\cdot(\nabla\times\boldsymbol{b})=\boldsymbol{a}\cdot\{\nabla\times(\nabla\times\boldsymbol{b})\}</math>
:<math>(\boldsymbol{a}\times\nabla)\times(\nabla\times\boldsymbol{b})={}^t\!\{\nabla\circledast(\nabla\times\boldsymbol{b})\}\boldsymbol{a}</math>
===ポテンシャル論===
ベクトル場<math>\boldsymbol{a}\in C^1</math>に対して<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>を満たすスカラー場<math>\varphi\in C^2</math>が存在するならば、上で扱った公式より<math>\mathrm{rot}(\mathrm{grad}\,\varphi)=\boldsymbol{0}</math>である。
逆に、ベクトル場<math>\boldsymbol{a}\in C^1</math>が<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>を満たすならば<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>となるスカラー場<math>\varphi\in C^2</math>はどのようなときに存在するのであろうか?
ここで<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>は成分表示すれば
:<math>\begin{cases} \frac{\partial{a}_z}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}}=0 \\ \frac{\partial{a}_x}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}}=0 \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}}=0 \end{cases}</math>
という一階線型連立偏微分方程式となる。
この連立偏微分方程式は領域<math>D=\mathrm{dom}\,\boldsymbol{a}</math>上で解くことになるので、解が<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>を満たすかは領域<math>D</math>がどのような形状をしているかに依存する。
そして、その形状を具体的に与えるのが次の定理である。
{{定理|(ポアンカレの補題1)}}
領域<math>D\subset\mathbb{R}^3</math>とベクトル場<math>\boldsymbol{a}\in C^1(D)</math>に対して
:<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0} \iff \exist \varphi\in C^2(D),\quad \mathrm{grad}\,\varphi=\boldsymbol{a} </math>
となるための十分条件は<math>D</math>が単連結であることである。
{{定理終わり}}
証明は後述する。
この<math>\varphi</math>を<math>\boldsymbol{a}</math>の'''スカラーポテンシャル'''(scalar potential)といい、スカラーポテンシャルを有するベクトル場を'''保存的ベクトル場'''(保存場、conservative vector field)という。
保存的ベクトル場に対して実際にスカラーポテンシャルを構成することを考える。簡単の為に、定義域は直方体領域(あるいは三次元ユークリッド空間全体)とする。
:<math>\mathrm{grad}\,\varphi=\boldsymbol{a},\quad\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>を連立偏微分方程式に書き下して
::<math>\begin{cases} \frac{\partial{\varphi}}{\partial{x}}=a_x \\ \frac{\partial{\varphi}}{\partial{y}}=a_y \\ \frac{\partial{\varphi}}{\partial{z}}=a_z \end{cases},\quad\begin{cases} \frac{\partial{a}_z}{\partial{y}}=\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a}_x}{\partial{z}}=\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}=\frac{\partial{a_x}}{\partial{y}} \end{cases}</math>
:<math>\frac{\partial{\varphi}}{\partial{x}}=a_x(x,y,z)</math>は直接積分形偏微分方程式なので両辺を<math>x</math>で偏積分して
::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z) dx+g(y,z)</math>・・・(1)
:これを<math>y</math>で偏微分すると
::<math>\frac{\partial{\varphi}}{\partial{y}}=\frac{\partial}{\partial{y}}\int_m^x a_x(x,y,z)dx+\frac{\partial{g}}{\partial{y}}</math>
:ここでライプニッツの積分法則を適用して
::<math>=\int_m^x \frac{\partial{a_x}}{\partial{y}}dx+\frac{\partial{g}}{\partial{y}}</math>
:更に回転の条件から
::<math>=\int_m^x \frac{\partial{a_y}}{\partial{x}}dx+\frac{\partial{g}}{\partial{y}}</math>
:よって偏微分に関する微分積分学の基本定理より
::<math>=a_y(x,y,z)-a_y(m,y,z)+\frac{\partial{g}}{\partial{y}}</math>
:これが<math>a_y(x,y,z)</math>に等しいので
::<math>\frac{\partial{g}}{\partial{y}}=a_y(m,y,z)</math>
:これは<math>g(y, z)</math>が<math>x</math>の関数でないことに適する。
:両辺を<math>y</math>で偏積分して
::<math>g(y, z)=\int_n^y a_y(m,y,z)dy+h(z)</math>
:これを(1)に代入して
::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+h(z)</math>・・・(2)
:これを<math>z</math>で偏微分すると
::<math>\frac{\partial{\varphi}}{\partial{z}}=\frac{\partial}{\partial{z}}\left(\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy\right)+\frac{\partial{h}}{\partial{z}}</math>
:ここでライプニッツの積分法則を適用して
::<math>=\left(\int_m^x\frac{\partial{a_x(x,y,z)}}{\partial{z}}dx+\int_n^y\frac{\partial{a_y(m,y,z)}}{\partial{z}}dy\right)+\frac{dh}{dz}</math>
:更に回転の条件から
::<math>=\left(\int_m^x\frac{\partial{a_z(x,y,z)}}{\partial{x}}dx+\int_n^y\frac{\partial{a_z(m,y,z)}}{\partial{y}}dy\right)+\frac{dh}{dz}</math>
:よって偏微分に関する微分積分学の基本定理より
::<math>=a_z(x,y,z)-a_z(m,y,z)+a_z(m,y,z)-a_z(m,n,z)+\frac{dh}{dz}</math>
::<math>=a_z(x,y,z)-a_z(m,n,z)+\frac{dh}{dz}</math>
:これが<math>a_z(x,y,z)</math>に等しいので
::<math>\frac{dh}{dz}=a_z(m,n,z)</math>
:これは<math>h(z)</math>が<math>x, y</math>の関数でないことに適する。
:両辺を<math>z</math>で常積分して
::<math>h(z)=\int_l^z a_z(m,n,z)dz+C</math>
:これを(2)に代入して
::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+\int_l^z a_z(m,n,z)dz+C</math>//
ここで最後の積分定数<math>C</math>は勾配をとるときに消える。更に言うと、単連結領域では偏微分方程式の解の一意性よりスカラーポテンシャルは積分定数の違いを除いて一意に定まる。よって、スカラーポテンシャルは平行移動を同一視する同値類として与えられることになる。
ベクトル場<math>\boldsymbol{a}\in C^1</math>に対して<math>\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>を満たすベクトル場<math>\boldsymbol{A}\in C^2</math>が存在するならば、上で扱った公式より<math>\mathrm{div}(\mathrm{rot}\,\boldsymbol{A})=0</math>である。
逆に、ベクトル場<math>\boldsymbol{a}\in C^1</math>が<math>\mathrm{div}\,\boldsymbol{a}=0</math>を満たすならば<math>\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>となるスカラー場<math>\boldsymbol{A}\in C^2</math>はどのようなときに存在するのであろうか?
これも同様に以下の定理で与えられる。
{{定理|(ポアンカレの補題2)}}
領域<math>D\subset\mathbb{R}^3</math>とベクトル場<math>\boldsymbol{a}\in C^1(D)</math>に対して
:<math>\mathrm{div}\,\boldsymbol{a}=0 \iff \exist \boldsymbol{A}\in C^2(D),\quad \mathrm{rot}\,\boldsymbol{A}=\boldsymbol{a} </math>
となるための十分条件は<math>D</math>が'''可縮'''であることである。
{{定理終わり}}
証明は後述する。
ここで、集合が可縮とは「全体を1点に退化するような連続変形が可能である」ことを言う。可縮な集合は単連結である。可縮条件はより弱めることができるが、ホモトピーやコホモロジーの概念が必要である
この<math>\varphi</math>を<math>\boldsymbol{a}</math>の'''ベクトルポテンシャル'''(vector potential)という。スカラーポテンシャルと異なり、「ベクトルポテンシャルを有するベクトル場」を指す特別な呼称は(数学界一般に認知されたものとしては)存在しない。「ソレノイダル場」などを用いる派閥もあるが、単に「発散が0であるベクトル場」を指す用法が強いのであまり広まっていない。
ベクトルポテンシャルを有するベクトル場に対して実際にベクトルポテンシャルを構成することを考える。簡単の為に、定義域は直方体領域(あるいは三次元ユークリッド空間全体)とする。
:<math>\mathrm{rot}\,\boldsymbol{A}=\boldsymbol{a},\quad\mathrm{div}\,\boldsymbol{a}=0</math>を連立偏微分方程式に書き下して
::<math>\begin{cases} \frac{\partial{A}_z}{\partial{y}}-\frac{\partial{A_y}}{\partial{z}}=a_x \\ \frac{\partial{A}_x}{\partial{z}}-\frac{\partial{A_z}}{\partial{x}}=a_y \\ \frac{\partial{A_y}}{\partial{x}}-\frac{\partial{A_x}}{\partial{y}}=a_z \end{cases},\quad \frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}} =0</math>
:第一式より
::<math>\frac{\partial{A_z}}{\partial{y}}=a_x+\frac{\partial{A_y}}{\partial{z}}</math>
:<math>y</math>で偏積分して
::<math>A_z = \int_n^y \left(a_x+\frac{\partial{A_y}}{\partial{z}}\right)dy+f(x,z)</math>
:ライプニッツの積分法則より
::<math>=\int_n^y a_xdy + \frac{\partial}{\partial{z}}\int_n^y A_y dy+f(x,z)</math>・・・(3)
:第三式より
::<math>\frac{\partial{A_x}}{\partial{y}}=\frac{\partial{A_y}}{\partial{x}}-a_z</math>
:<math>y</math>で偏積分して
::<math>A_x=\int_n^y \left(\frac{\partial{A_y}}{\partial{x}}-a_z\right)dy+g(x, z)</math>
:ライプニッツの積分法則より
::<math>=\frac{\partial{}}{\partial{x}}\int_n^y A_y dy - \int_n^y a_zdy+g(x,z)</math>
:これと(3)を第二式に代入して
::<math>a_y=\frac{\partial}{\partial{z}}\left(\frac{\partial{}}{\partial{x}}\int_n^y A_y dy - \int_n^y a_zdy+g(x,z)\right)-\frac{\partial}{\partial{x}}\left(\int_n^y a_xdy + \frac{\partial}{\partial{z}}\int_n^y A_y dy+f(x,z)\right)</math>
::<math>=\frac{\partial^2}{\partial{z}\partial{x}}\int_n^yA_ydy-\frac{\partial}{\partial{z}}\int_n^y a_z dy+\frac{\partial{g}}{\partial{z}}-\frac{\partial}{\partial{x}}\int_n^y a_x dy-\frac{\partial^2}{\partial{x}\partial{z}}\int_n^y A_y dy-\frac{\partial{f}}{\partial{x}}</math>
::<math>=\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}-\int_n^y \left(\frac{\partial{a_z}}{\partial{z}}+\frac{\partial{a_x}}{\partial{x}}\right)dy</math>
:よって
::<math>\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}=a_y+\int_n^y \left(\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_z}}{\partial{z}}\right) dy</math>・・・(4)
:この右辺を<math>h(x, y, z)</math>とおくと
::<math>\frac{\partial{h}}{\partial{y}}=\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}}=0</math>
:なので<math>h(x,y,z)</math>は<math>y</math>に依存しない<math>h(x,z)</math>である。
:これは(4)の左辺が<math>y</math>に依存しないことと整合する。
:故に(4)は
::<math>\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}=h(x,z)</math>
:という二変数の偏微分方程式に落ちる。
:この偏微分方程式は例えば<math>f(x,z)=0, g(x,z)=\int_l^z h(x,z)dz</math>のような特殊解を持つ。
:このような特殊解によって構成された元の方程式の解を<math>\boldsymbol{A}_0</math>とする。
:一般解<math>\boldsymbol{A}</math>と特殊解との差を<math>\boldsymbol{B}</math>と置くとその回転は回転の線型性より<math>\boldsymbol{0}</math>なので
::<math>\begin{cases} \frac{\partial{B}_z}{\partial{y}}=\frac{\partial{B_y}}{\partial{z}} \\ \frac{\partial{B}_x}{\partial{z}}=\frac{\partial{B_z}}{\partial{x}} \\ \frac{\partial{B_y}}{\partial{x}}=\frac{\partial{B_x}}{\partial{y}} \end{cases}</math>
:同様にして第一式・第三式を<math>y</math>で偏積分して第二式に代入すると積分定数に関して
::<math>\frac{\partial{F(x,z)}}{\partial{x}}=\frac{\partial{G(x,z)}}{\partial{z}}</math>
:を得る。
:これは全微分方程式が完全微分方程式である条件なので、
::<math>\mathrm{grad}\,\Phi=\begin{pmatrix} F(x,z) \\ G(x,z) \end{pmatrix}</math>
:なるスカラー場<math>\Phi</math>が存在する。
:則ち、求めるベクトルポテンシャルは<math>\boldsymbol{A}=\boldsymbol{A}_0+\nabla\Phi</math>//
ここで勾配の項は回転をとるときに<math>\mathrm{rot}(\mathrm{grad}\,\Phi)=\boldsymbol{0}</math>より消える。スカラーポテンシャルと同様に自由度が残るので、ベクトルポテンシャルはその自由度を無視した同値類で与えられる。
ポアンカレの補題1, 2に於ける領域<math>D</math>は互いに素ではない複数の領域の和集合<math>\bigcup_i D_i</math>であっても良い。但しポテンシャル場<math>\mathrm{p}</math>は各領域<math>D_i</math>に対して区分的に定義され、このとき互いに重なった領域<math>D_i\cap D_j</math>では任意の点<math>\boldsymbol{x}\in D_i\cap D_j</math>に対して<math>\mathrm{p}_i(\boldsymbol{x})=\mathrm{p}_j(\boldsymbol{x})</math>であることが導かれる。
ポアンカレの補題が成り立たない状況を考えると、この「重なった領域での単射性」が崩れる。則ち、ポテンシャル場は多価関数として振舞うのである。
ポテンシャルに関連した定理として、以下が成り立つ。
{{定理|(ヘルツホルムの定理)}}
ポアンカレの補題が成り立つ状況下に於いて、<math>C^1</math>級ベクトル場<math>\boldsymbol{a}</math>は<math>C^2</math>級スカラー場の勾配と<math>C^2</math>級ベクトル場の回転に[[w:直和分解]]('''ヘルツホルム分解''')できる。
則ち、任意の<math>\boldsymbol{a}\in C^1(D)</math>に対して
:<math>\boldsymbol{a}=\mathrm{grad}\,\varphi-\mathrm{rot}\,\boldsymbol{A}</math>
を満たす<math>\varphi, \boldsymbol{A}\in C^2(D)</math>が存在する。
{{定理終わり}}
*証明
:ポアソン方程式<math>\text{∆}\varphi=f</math>に対してラプラシアンの定義から
::<math>\mathrm{div}(\mathrm{grad}\,\varphi)=f</math>
:ここで右辺のスカラー関数<math>f</math>が<math>\boldsymbol{a}</math>の発散で与えられている場合を考えると
::<math>\mathrm{div}(\mathrm{grad}\,\varphi)=\mathrm{div}\,\boldsymbol{a}</math>
:発散の線型性より
::<math>\mathrm{div}(\mathrm{grad}\,\varphi-\boldsymbol{a})=0</math>
:ここでポアンカレの補題2を用いて
::<math>\mathrm{grad}\,\varphi-\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>//
この<math>\varphi, \boldsymbol{A}</math>をそれぞれ広義のスカラーポテンシャル・ベクトルポテンシャルと呼ぶ場合がある。
広義ポテンシャルに対して
:<math>\begin{cases} \mathrm{rot}(\mathrm{grad}\,\varphi)=\boldsymbol{0} \\ \mathrm{div}(\mathrm{rot}\,\boldsymbol{A})=0 \\ \mathrm{div}\,\boldsymbol{a}=\text{∆}\varphi \\ \mathrm{rot}\,\boldsymbol{a}=\mathrm{grad}(\mathrm{div}\,\boldsymbol{A})-\text{∆}\boldsymbol{A} \end{cases}</math>
が成立する。
広義ポテンシャルの組み合わせは一つには定まらない。成分毎で考えるとヘルツホルムの定理は三元連立偏微分方程式を与えるが、勾配で消える定数項と回転で消える勾配項を補正すると右辺の自由度は広義ポテンシャル2つ+補正項2つで4である。そこで、応用上は<math>\mathrm{div}\,\boldsymbol{A}=0</math>という条件('''クーロンゲージ条件''')を追加で課して一意に定めることが多い(これにより<math>\mathrm{rot}\,\boldsymbol{a}=-\text{∆}\boldsymbol{A}</math>が成り立つので)。
例えば、[[連続体力学]]に於ける弾性体の運動方程式(ナビエ-コーシー方程式)
:<math>\rho\frac{\partial^2{\boldsymbol{u}}}{\partial{t}^2}=(\lambda+\mu)\mathrm{grad}(\mathrm{div}\,\boldsymbol{u})+\mu\text{∆}\boldsymbol{u}</math>
をヘルツホルム分解とクーロンゲージ条件により解析すると
:<math>\begin{cases} \rho\frac{\partial^2}{\partial{t}^2}\text{∆}\varphi=(\lambda+2\mu)\text{∆}^2\varphi \\ \rho\frac{\partial^2}{\partial{t}^2}\text{∆}\boldsymbol{A}=\mu\text{∆}^2\boldsymbol{A} \end{cases}</math>
を得る。
更に<math>e=\text{∆}\varphi,\quad\boldsymbol{\omega}=-\text{∆}\boldsymbol{A}</math>と置くとこの2つの式は波動方程式である。ここから導かれる波は前者が縦波で後者が横波であるが、<math>\lambda+2\mu>\mu</math>より前者の方が伝播速度が大きい。則ち、中学理科のP波・S波の性質を導くことができた。
ナビエ-コーシー方程式に於いて定常状態を考えると<math>t</math>-微分の項が0になるので、<math>\text{∆}^2\boldsymbol{u}=0</math>を得る。このような形の偏微分方程式を'''重調和偏微分方程式'''という。
*応用問題
*:真空のマクスウェル方程式<math> \begin{cases}
\nabla\times\boldsymbol{E}&=-\frac{\partial{\boldsymbol{B}}}{\partial{t}}\\
\nabla\times\boldsymbol{H}&=\frac{\partial{\boldsymbol{D}}}{\partial{t}}\\
\nabla\cdot\boldsymbol{D}&=0\\
\nabla\cdot\boldsymbol{B}&=0\\
\end{cases}</math>と構成方程式<math>\begin{cases} \boldsymbol{D}=\varepsilon_0\boldsymbol{E} \\ \boldsymbol{B}=\mu_0\boldsymbol{H}\end{cases}</math>から電磁波の波動方程式<math>\begin{cases} \text{∆}\boldsymbol{E}=\frac{1}{c^2}\frac{\partial^2{\boldsymbol{E}}}{\partial{t}^2} \\ \text{∆}\boldsymbol{H}=\frac{1}{c^2}\frac{\partial^2{\boldsymbol{H}}}{\partial{t}^2} \end{cases}</math>及び光速<math>c=\frac{1}{\sqrt{\varepsilon_0\mu_0}}</math>を導け。
==空間積分==
ここでは三次元ユークリッド空間で考える。
===線積分===
偏積分
:<math>\int_a^b f(x,y) dx := \lim_{n \to \infty} \sum_{k=1}^{n} f(x_k,y) \Delta x</math>(<math>\Delta x = \frac{b-a}{n}, x_k = a + k\Delta x</math>)
は<math>xyz</math>空間を<math>y</math>を固定した平面で切った断面に於ける曲線<math>z=f(x, y)</math>と<math>x</math>軸、直線<math>x=a, x=b</math>の囲む符号付き面積であった。
このとき積分変数を各点で見ると<math>x</math>軸という直線上を<math>a\to b</math>と単調に進むことになるが、これを<math>xyz</math>空間の任意の曲線<math>C</math>に拡張することを考える。
三次元空間の曲線をベクトル表示すると
:<math>\boldsymbol{r}(t)=\begin{pmatrix} x(t) \\ y(t) \\ z(t) \end{pmatrix}\quad t\in [\alpha, \beta]</math>
であり、被積分関数はこの曲線上の点を入力とするスカラー場と考えられるので
:<math>\varphi=\varphi(\boldsymbol{r})</math>
偏積分の<math>dx</math>は「<math>x</math>軸上の微小変位」であったが、<math>t</math>が単調なとき曲線に沿った微小変位は曲線上の移動距離、則ち弧長の微小量と考えられるので線素を用いて
:<math>dl=\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>
これらを総合すると、<math>C</math>に沿った積分というものは曲線のパラメータを用いて
:<math>\int_\alpha^\beta \varphi(\boldsymbol{r}(t))\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>
と表示されることになる。
これをスカラー場<math>\varphi</math>の<math>C</math>に沿った'''線積分'''<sup>※</sup>(line integral)という。また、<math>C</math>を'''積分経路'''(積分路、path)という。
<small>※量子力学の[[量子力学#経路積分法|経路積分]](path integral)とは異なる概念である。</small>
スカラー場の線積分は
:<math>\int_C \varphi dl</math>
のように略記される。
特に積分経路が閉曲線('''閉経路''')である場合は
:<math>\oint_C \varphi dl</math>
のように書き、これを<math>C</math>に沿った'''周回/閉路 積分'''(closed line integral)という。
1の線積分<math>\int_C dl</math>は弧長に等しい。
<math>\varphi(\boldsymbol{r})</math>の<math>C</math>の端点に於ける値の差を考える。
<math>t\in[\alpha,\beta]</math>を各<math>t_i</math>に等分割したとき、スカラー関数のテイラー展開より
:<math>\varphi(\boldsymbol{r}(t_i))-\varphi(\boldsymbol{r}(t_{i-1}))=\nabla\varphi(\boldsymbol{r}_{t_i-1})\cdot d\boldsymbol{r}\big|_{t=t_i}+O\left(\left\|d\boldsymbol{r}\big|_{t=t_i}\right\|\right)</math>
なので
:<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))\fallingdotseq \sum_{i=1}^n \nabla\varphi(\boldsymbol{r}(t_{i-1}))\cdot d\boldsymbol{r}\big|_{t=t_i}</math>
右辺で分割数<math>n</math>を無限大に飛ばした極限は区分求積法より
:<math>\int_{\boldsymbol{r}(\alpha)}^{\boldsymbol{r}(\beta)}\nabla\varphi(\boldsymbol{r})\cdot d\boldsymbol{r}</math>
則ち、曲線<math>C</math>に沿った微分積分学の基本定理
:<math>\int_{\boldsymbol{r}(\alpha)}^{\boldsymbol{r}(\beta)}\nabla\varphi(\boldsymbol{r})\cdot d\boldsymbol{r} = \varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math>
を得る。
これは一変数積分の<math>\int_a^b \frac{df}{dx}dx=f(b)-f(a)</math>に対応し、これは常積分に関する微分積分学の基本定理の別表現である。
左辺をスカラー場の線積分と同様に<math>\int_C \nabla\varphi\cdot d\boldsymbol{r}</math>と書くことにする。
ここで<math>\nabla\varphi</math>を一般のベクトル場<math>\boldsymbol{a}</math>に拡張して同様に
:<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{r}</math>
を考えてみたい。
ここで<math>d\boldsymbol{r}</math>は<math>\boldsymbol{r}</math>の全微分と解釈され、一変数関数なので
:<math>d\boldsymbol{r}=\frac{d\boldsymbol{r}}{dt}dt</math>
則ち、
:<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{r}=\int_\alpha^\beta \boldsymbol{a}(\boldsymbol{r}(t))\cdot\frac{d\boldsymbol{r}}{dt}dt</math>
という曲線のパラメータに関する積分に帰着された。
これをベクトル場<math>\boldsymbol{a}</math>の<math>C</math>に沿った'''線積分'''という。
<math>\frac{d\boldsymbol{r}}{dt}</math>は<math>C</math>の接線なので<math>\boldsymbol{a}(\boldsymbol{r})\cdot\frac{d\boldsymbol{r}}{dt}</math>は<math>\boldsymbol{a}</math>から<math>C</math>の接線に沿う沿流成分を取り出していることになる。
このことから、ベクトル場の線積分を特に'''接線積分'''(integral of tangential component)ということがある。
また、<math>d\boldsymbol{r}</math>のノルムを考えてみると
:<math>\|d\boldsymbol{r}\|=\left\|\frac{d\boldsymbol{r}}{dt}\right\|dt=dl</math>
より線素に一致する。
このことから、<math>d\boldsymbol{r}</math>を'''線素ベクトル'''と呼び、<math>d\boldsymbol{l}</math>とも書く。
線素ベクトルは曲線上の微小変位を表すので座標軸上の微小変位の重ね合わせと考えれば
:<math>d\boldsymbol{l}=\begin{pmatrix} dx \\ dy \\ dz \end{pmatrix}</math>
よって接線積分は形式的に
:<math>\int_C (a_xdx+a_ydy+a_zdz)</math>
とも書かれる。
更に、弧長パラメトライズされている場合は接ベクトルを用いて
:<math>d\boldsymbol{l}=\boldsymbol{t}ds</math>
とも表せる。
接線積分で定義される概念としては、仕事が有名である。
:物体を経路<math>C</math>に沿って力<math>\boldsymbol{F}</math>で運んだときの仕事は摩擦や空気抵抗を無視すると
::<math>W=\int_C \boldsymbol{F}\cdot d\boldsymbol{r}</math>
また、アンペールの法則も線積分で示される。
:閉経路<math>C</math>で囲まれた領域を貫く電流の大きさ<math>I</math>とその電流が生む磁場<math>\boldsymbol{H}</math>に対して
::<math>\oint_C \boldsymbol{H}\cdot d\boldsymbol{l}=I</math>
更に、以下のような概念も定義されている。
:流体の速度場<math>\boldsymbol{v}</math>の循環は
::<math>\Gamma(C)=\oint_C \boldsymbol{v}\cdot d\boldsymbol{l}</math>
*応用問題
**運ばれる物体の質量を<math>m</math>としたとき、仕事の定義とニュートンの運動方程式<math>m\frac{d^2\boldsymbol{r}}{dt^2}=\boldsymbol{F}</math>を用いて運動エネルギーに関するエネルギーの原理<math>W=\frac{1}{2}mv^2-\frac{1}{2}mv_0^2</math>を証明せよ。
<math>C</math>が正の向きにパラメトライズされたとき、負の向きにパラメトライズされた曲線を<math>-C</math>と表した。
2つの閉曲線<math>C_1</math>の終点と<math>C_2</math>の始点が一致するとき、これを一つの曲線と見做して曲線の和
:<math>C_1+C_2</math>
が定義される。
これを'''区分的に定義された曲線'''という。
2つの閉曲線<math>C_1</math>の終点と<math>C_2</math>の終点が一致するとき、<math>C_1</math>を始点とすると曲線の差は
:<math>C_1-C_2=C_1+(-C_2)</math>
で定義される。
<math>C</math>が'''区分的に滑らか'''であるとは、<math>C</math>が有限個の滑らかな曲線の和であることである。
これらを踏まえると、線積分には以下の性質が成り立つ。
#スカラー場
#:<math>\int_C (k\varphi+l\psi) dl=k\int_C \varphi dl + l \int_C \psi dl</math>
#:<math>\int_{-C}\varphi dl = \int_C \varphi dl</math>
#:<math>\int_{C_1+C_2}\varphi dl = \int_{C_1}\varphi dl + \int_{C_2}\varphi dl</math>
#ベクトル場
#:<math>\int_C (k\boldsymbol{a}+l\boldsymbol{b})\cdot d\boldsymbol{l}=k\int_C \boldsymbol{a}\cdot d\boldsymbol{l}+l\int_C \boldsymbol{b}\cdot d\boldsymbol{l}</math>
#:<math>\int_{-C}\boldsymbol{a}\cdot d\boldsymbol{l} = -\int_C \boldsymbol{a}\cdot d\boldsymbol{l}</math>
#:<math>\int_{C_1+C_2}\boldsymbol{a}\cdot d\boldsymbol{l} = \int_{C_1}\boldsymbol{a}\cdot d\boldsymbol{l} + \int_{C_2}\boldsymbol{a}\cdot d\boldsymbol{l}</math>
1番目の性質は線型性である。2番目の性質から、スカラー場の線積分に関しては任意の'''再パラメトライズ'''(パラメータの可逆な変数変換)、ベクトル場の線積分に関しては向き付けを保つ再パラメトライズに対して線積分の値が保存されることが判る。
保存的ベクトル場に対する線積分<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{l}</math>はスカラーポテンシャル<math>\varphi</math>を用いて<math>\int_C \nabla\varphi\cdot d\boldsymbol{l}</math>と書けるので微分積分学の基本定理より<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math>に等しい。
ここで<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math>は曲線の端点にのみ依存し形状には依存しない。
そのため、'''線積分の値が積分経路に依存しない必要十分条件はベクトル場が保存的であること'''である。
ここで閉曲線である場合を考えると
:<math>\boldsymbol{r}(\alpha)=\boldsymbol{r}(\beta)</math>
より
:<math>\varphi(\boldsymbol{r}(\alpha))=\varphi(\boldsymbol{r}(\beta))</math>
なので
:<math>\oint_C \nabla\varphi\cdot d\boldsymbol{l}=0</math>
である。
逆に言うと、'''周回積分が0でない閉経路をとれるとき<math>\varphi</math>は<math>\boldsymbol{a}</math>のスカラーポテンシャルではない'''。
この事実は偏微分方程式を解いて求めたスカラーポテンシャルが実際にポテンシャルであるかどうかの確認に用いられる。
なお、先程求めたスカラーポテンシャルの一般式
:<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+\int_l^z a_z(m,n,z)dz+C</math>
は線積分で表される。
具体的には、積分経路を<math>\gamma:(m,n,l)\to(m,n,z)\to(m,y,z)\to(x,y,z)</math>という3つの線分の和としてとれば
:<math>\varphi=\int_\gamma \boldsymbol{a}\cdot d\boldsymbol{l}+C</math>
である。
ここでスカラーポテンシャルとは勾配方程式
:<math>\nabla\varphi=\boldsymbol{a}</math>
の解だったので、'''線積分と勾配は逆演算'''である。
<math>\nabla\varphi\cdot d\boldsymbol{l}=d\varphi</math>より、スカラーポテンシャルの存在と完全微分方程式の対応がここからも得られる。また、完全微分方程式<math>d\varphi=0</math>の解は曲線を与えることも容易に判る。
仕事が線積分で定義されるという話をしたが、エネルギーの原理より力場がスカラーポテンシャルを有する(保存場)場合はエネルギー変化が移動経路に依存しないので力学的エネルギー保存法則が成り立つ。これが高校物理で扱った「保存力なら力学エネルギーが保存する」ことの正式な表現である。
ベクトル場の線積分はベクトル場と線素ベクトルの内積をとって積分していたが、外積をとって積分することもできる。
具体的には、
:<math>\boldsymbol{a}\times d\boldsymbol{l}=\begin{pmatrix} a_ydz-a_zdy \\ a_zdx-a_xdz \\ a_xdy-a_ydx \end{pmatrix}</math>
より
:<math>\int_C \boldsymbol{a}\times d\boldsymbol{l}=\begin{pmatrix} \int_C (a_ydz-a_zdy) \\ \int_C (a_zdx-a_xdz) \\ \int_C (a_xdy-a_ydx) \end{pmatrix}</math>
:<math>=\begin{pmatrix} \int_\alpha^\beta \left\{ a_y(\boldsymbol{r}(t))\frac{dz}{dt}-a_z(\boldsymbol{r}(t))\frac{dy}{dt} \right\}dt \\ \int_\alpha^\beta \left\{ a_z(\boldsymbol{r}(t))\frac{dx}{dt}-a_x(\boldsymbol{r}(t))\frac{dz}{dt} \right\}dt \\ \int_\alpha^\beta \left\{ a_x(\boldsymbol{r}(t))\frac{dy}{dt}-a_y(\boldsymbol{r}(t))\frac{dx}{dt} \right\}dt \end{pmatrix}</math>
これは物理学的にはビオ・サヴァールの法則の記述に用いられている。
:真空中で経路<math>C</math>を正の向きに流れる強さ<math>I</math>の定常電流・<math>C</math>上にない点<math>\mathrm{P}</math>・<math>C</math>上の点<math>\mathrm{Q}</math>に対し、<math>C</math>全体で生じる磁束密度<math>\boldsymbol{B}</math>の<math>\mathrm{P}</math>での値は真空の透磁率<math>\mu_0</math>として
::<math>\boldsymbol{B}(\mathrm{P})=\frac{\mu_0 I}{4\pi}\int_C \frac{\overrightarrow{\mathrm{PQ}}\times d\boldsymbol{l}}{\|\overrightarrow{\mathrm{PQ}}\|^3}</math>
応用例は乏しいが、スカラー場の線素ベクトルに関する積分、ベクトル場の線素に関する積分も同様に定義される。
:<math>\int_C \varphi d\boldsymbol{l} = \int_\alpha^\beta \varphi(\boldsymbol{r}(t))\frac{d\boldsymbol{r}}{dt}dt</math>
:<math>\int_C \boldsymbol{a} dl = \int_\alpha^\beta \boldsymbol{a}(\boldsymbol{r}(t))\left\|\frac{d\boldsymbol{r}}{dt}\right\|dt</math>
これらはベクトル値である。
積分経路を流線上にとると、流線の定義から<math>d\boldsymbol{r}/\!\!/\boldsymbol{a}(\boldsymbol{r})</math>則ち一次従属なので、<math>d\boldsymbol{r}=k\boldsymbol{a}(\boldsymbol{r})</math>と書ける。
よって線積分の被積分関数は<math>\boldsymbol{a} \cdot d\boldsymbol{r} = k\|\boldsymbol{a}\|^2</math>となり、積分値が最大化される他、ベクトル場の沿流方向成分を抽出できる。実際に計算する際は、<math>\int_{\mathrm{streamline}} k\|\boldsymbol{a}\|^2</math>とは書かず、<math>\int_{\mathrm{streamline}} \boldsymbol{a} \cdot \frac{d\boldsymbol{r}}{dt}dt</math>と書くのが望ましい(積分記号と積分微小要素はセットのため)。
流線が閉曲線である場合を考えると、<math>\oint_{\mathrm{streamline}} \boldsymbol{a} \cdot \frac{d\boldsymbol{r}}{dt}dt</math>は閉曲線の正の向きで正、負の向きで負となるので0にはならない。そのため、流線が閉曲線であるベクトル場はスカラーポテンシャルを持たない。
===面積分===
線積分は常積分に於ける積分経路を任意の正則な<math>C^1</math>級曲線に拡張したものであった。同様に、二重積分に於ける積分領域を'''向き付けされた'''任意の<math>C^1</math>級曲面に拡張することを考える。
曲線に沿った微小量が線素で与えられたように、曲面に沿った微小量は面素で与えられる。故に、直観的には「面素に関して積分」すれば良いことが分かる。
三次元空間の曲面をベクトル表示すると
:<math>\boldsymbol{r}(t, u)=\begin{pmatrix} x(t, u) \\ y(t, u) \\ z(t, u) \end{pmatrix}\quad {\scriptstyle\left(\begin{array}{c} t \\[-6pt] u \end{array}\right)} \in D</math>
であり、被積分関数はこの曲面上の点を入力とするスカラー場と考えられるので
:<math>\varphi=\varphi(\boldsymbol{r})</math>
面素は
:<math>dS=\sqrt{EG-F^2}dtdu=\sqrt{\left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}} \right\|^2\left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2 - \left( \frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \right)^2 } dtdu</math>
総合すると、<math>S</math>に沿った積分というものは曲面のパラメータを用いて
:<math>\iint_D \varphi(\boldsymbol{r}(t,u))\sqrt{\left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}} \right\|^2\left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2 - \left( \frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \right)^2 } dtdu</math>
と表示されることになる。
これをスカラー場<math>\varphi</math>の<math>S</math>に沿った'''面積分'''(曲面積分、surface integral)という。
今は三次元空間の場合を考えているので、外積を用いて
:<math>\iint_D \varphi(\boldsymbol{r}(t,u))\left\|\frac{\partial{\boldsymbol{r}}}{\partial{t}}\times\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\| dtdu</math>
と表示しても良い。
スカラー場の面積分は
:<math>\iint_S \varphi dS</math>
のように略記される。
特に積分領域が閉曲面である場合は
:<math>\oiint_S \varphi dS</math>
のように書く。
1の面積分<math>\iint_S dS</math>は曲面積に等しい。
ベクトル場の線積分と同様にしてベクトル場の面積分
:<math>\iint_S \boldsymbol{a}\cdot d\boldsymbol{S}</math>
を考えたい。
線素ベクトルが「位置ベクトルの接線方向」で「ノルムが通常の線素と一致する」ように定義されたことを鑑みると、面素ベクトルは「位置ベクトルの法線方向」で「ノルムが通常の面素に一致する」ように定義するのが良いと考えられる。要するに、
:<math>d\boldsymbol{S}:=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\times\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>
としてみる。
ここで単位法線ベクトルを<math>\boldsymbol{n}</math>と置くと面素ベクトルは<math>\boldsymbol{n}dS</math>と表され、
:<math>\iint_S \boldsymbol{a}\cdot d\boldsymbol{S}=\iint_S (\boldsymbol{a}\cdot\boldsymbol{n})dS</math>
のようにスカラー場の面積分に帰着されることが判る。
これをベクトル場<math>\boldsymbol{a}</math>の<math>S</math>に沿った'''面積分'''という。
<math>\boldsymbol{a}\cdot\boldsymbol{n}</math>は<math>\boldsymbol{a}</math>から<math>S</math>の法線を横切る沿流成分を取り出していることになる。
このことから、ベクトル場の面積分を特に'''法線面積分'''(surface integral of the normal component)ということがある。
単位法線ベクトル<math>\boldsymbol{n}</math>は有向曲面に対して右手系を成し、各座標軸となす角度をそれぞれ<math>\alpha, \beta, \gamma</math>とすると通常の余弦関数で表されるベクトル<math>\begin{pmatrix} \cos \alpha \\ \cos \beta \\ \cos \gamma \end{pmatrix}</math>に等しい。これを'''方向余弦'''という。
方向余弦に関して、正射影を用いると以下が成り立つと判る。
:<math>\begin{cases} \cos\alpha dS = dydz \\ \cos\beta dS = dzdx \\ \cos\gamma dS = dxdy \end{cases}</math>
これを用いることで、面素ベクトルは
:<math>d\boldsymbol{S} = \boldsymbol{e}_x dydz + \boldsymbol{e}_y dzdx + \boldsymbol{e}_z dxdy = \begin{pmatrix} dydz \\ dzdx \\ dxdy \end{pmatrix}</math>
とも表される。
故に、法線面積分は形式的に
:<math>\iint_S(a_xdydz+a_ydzdx+a_zdxdy)</math>
とも書ける。
線積分と同様にベクトル場と面素ベクトルの外積、面素ベクトルのスカラー場倍、ベクトル場の面素倍をとって積分することも考えられるが、応用例に乏しい。
:<math>\iint_S \boldsymbol{a}\times d\boldsymbol{S}</math>
:<math>\iint_S \varphi d\boldsymbol{S}</math>
:<math>\iint_S \boldsymbol{a} dS</math>
これらはベクトル値である。
面素ベクトルは以下のように考えることもできる。
:平面<math>\Pi</math>上面積<math>A</math>の有界領域と<math>\Pi</math>の表向き法線<math>\boldsymbol{n}_\Pi</math>に対し、<math>\boldsymbol{A}=A\boldsymbol{n}_\Pi</math>を'''面積ベクトル'''と定義する。
:曲面<math>S</math>上の微小領域をとると曲面をその接平面で近似できるので平面上と同様にして面積ベクトルを定義できる。
:このとき、<math>A=dS</math>となるように定義した面積ベクトルが面素ベクトルである。
この考え方を用いると、
:<math>\oint_C d\boldsymbol{l}=\boldsymbol{0}</math>
及び
:<math>\oiint_S d\boldsymbol{S}=\boldsymbol{0}</math>
が示される。
面積分で定義される概念としては'''束'''<sup>※</sup>(flux)が有名である。
:流体の速度場<math>\boldsymbol{v}</math>に対し、<math>\iint_S \boldsymbol{v}\cdot d\boldsymbol{S}</math>は流束(単位時間当たりに<math>S</math>を通過する流体の流出量)である。
:磁束密度<math>\boldsymbol{B}</math>に対し、<math>\Phi_B=\iint_S \boldsymbol{B}\cdot d\boldsymbol{S}</math>は磁束である。
また、ガウスの法則も面積分で示される。
:ガウス面<math>S</math>が囲む電荷の総量を<math>q_\mathrm{inc}</math>とすると電束密度<math>\boldsymbol{D}</math>に対して
::<math>\oiint_S \boldsymbol{D}\cdot d\boldsymbol{S}=q_\mathrm{inc}</math>
<small>※数学界・物理界で「束」と呼ばれる対象は複数存在する。和訳されるときに「束」が充当されたものはここで扱う「flux」の他に「bundle(ファイバー束など)」「lattice([[束論]]の束)」「pencil(円束など)」「packet(波束など)」がある。</small>
<math>S</math>が表向きにパラメトライズされたとき、裏向きにパラメトライズされた曲面を<math>-S</math>と表した。
同じ向きを向く2つの曲面<math>S_1</math>と<math>S_2</math>の境界が一致するとき、これを一つの曲面と見做して曲面の和
:<math>S_1+S_2</math>
が定義される。
これを'''区分的に定義された曲面'''という。
<math>S</math>が'''区分的に滑らか'''であるとは、<math>S</math>が有限個の滑らかな曲面の和であることである。
これらを踏まえると、面積分には以下の性質が成り立つ。
#スカラー場
#:<math>\iint_S (k\varphi+l\psi) dS=k\iint_S \varphi dS + l \iint_S \psi dS</math>
#:<math>\iint_{-S}\varphi dS = \iint_S \varphi dS</math>
#:<math>\iint_{S_1+S_2}\varphi dS = \iint_{S_1}\varphi dS + \iint_{S_2}\varphi dS</math>
#ベクトル場
#:<math>\iint_S (k\boldsymbol{a}+l\boldsymbol{b})\cdot d\boldsymbol{S}=k\iint_S \boldsymbol{a}\cdot d\boldsymbol{S}+l\iint_S \boldsymbol{b}\cdot d\boldsymbol{S}</math>
#:<math>\iint_{-S}\boldsymbol{a}\cdot d\boldsymbol{S} = -\iint_S \boldsymbol{a}\cdot d\boldsymbol{S}</math>
#:<math>\iint_{S_1+S_2}\boldsymbol{a}\cdot d\boldsymbol{S} = \iint_{S_1}\boldsymbol{a}\cdot d\boldsymbol{S} + \iint_{S_2}\boldsymbol{a}\cdot d\boldsymbol{S}</math>
1番目の性質は線型性である。2番目の性質から、スカラー場の面積分に関しては任意の再パラメトライズ、ベクトル場の面積分に関しては向き付けを保つ再パラメトライズに対して面積分の値が保存されることが判る。
等位面に対する面積分を考える。曲面<math>S</math>がスカラー場<math>\omega</math>の等位面であるとき、その単位法線ベクトルは勾配を用いて
:<math>\boldsymbol{n}=\pm\frac{\nabla\omega}{\|\nabla\omega\|}</math>
と表される。右手系で考えるので正符号を採る。
等位面の方程式<math>\omega(x,y,z)=c</math>に対して陰関数定理が成り立つとすると陰関数<math>z=\psi(x,y)</math>を用いて<math>S:\boldsymbol{r}(x,y)=\begin{pmatrix} x \\ y \\ \psi(x,y) \end{pmatrix}\quad {\scriptstyle\left(\begin{array}{c} x \\[-6pt] y \end{array}\right)} \in D</math>というモンジュ表示に落ちる。
よって
:<math>dS=\sqrt{1+\left(\frac{\partial{\psi}}{\partial{x}}\right)^2+\left(\frac{\partial{\psi}}{\partial{y}}\right)^2}dxdy</math>
と
:<math>\boldsymbol{n}=\frac{\nabla\omega}{\|\nabla\omega\|}</math>
を用いて
:<math>\int_S \varphi dS = \int_D \varphi(x,y,\psi(x,y))\sqrt{1+\left(\frac{\partial{\psi}}{\partial{x}}\right)^2+\left(\frac{\partial{\psi}}{\partial{y}}\right)^2}dxdy</math>
:<math>\int_S \boldsymbol{a}\cdot d\boldsymbol{S} = \int_D \boldsymbol{a}(x,y,\psi(x,y))\cdot\frac{\nabla\omega(x,y,\psi(x,y))}{\|\nabla\omega(x,y,\psi(x,y))\|}\sqrt{1+\left(\frac{\partial{\psi}}{\partial{x}}\right)^2+\left(\frac{\partial{\psi}}{\partial{y}}\right)^2}dxdy</math>
を得る。
===体積分===
三次元空間の中では曲がった三次元空間を考えることはできない。そのため、以下の議論は平坦な三次元空間での話になる。
曲線長の微小量であった線素・曲面積の微小量であった面素と同様にして立体積の微小量について考えてみる。
立体<math>V</math>を微小立体に分割した体積を<math>\Delta V_i</math>としたとき、線積分・面積分が正式には区分求積法で定義されたようにリーマン和の極限
:<math>\lim_{\Delta V_i\to0}\sum_i \varphi(x_i, y_i, z_i)\Delta V_i</math>
で与えられる積分を考えたい。
これは多変数解析で行った議論と同様にして三変数関数の三重極限へと帰着されるが、三重極限は飛ばす順番を入れ替えられるとは限らないためこの極限値を求めることは困難である。
そこで、以下のように考える。
微小立体はどのような分割の仕方であっても直方体で近似できる(曲面上微小領域を平面上平行四辺形で近似したことからの類推)。このとき、微小体積<math>dV</math>は各辺の長さが<math>dx, dy, dz</math>であると考えることができる。故に、直方体の体積公式を用いて
:<math>dV=dxdydz</math>
これを'''体素'''(体積素・体積要素)という。
故に、求める積分は
:<math>\lim_{\Delta V_i\to0}\sum_i \varphi(x_i, y_i, z_i)\Delta V_i=\iiint_V \varphi(x,y,z) dxdydz</math>
という三重積分に帰着される。
これをスカラー場の<math>V</math>に沿った'''体積分'''(volume integral)という。
スカラー場の体積分は
:<math>\iiint_V \varphi dV</math>
のように略記される。
特に、積分領域が閉集合('''閉立体''')である場合は
:<math>\oiiint_V \varphi dV</math>
のように書く。
1の体積分<math>\iiint_V dV</math>は立体積に等しい。
<math>V</math>のベクトル表示が<math>\boldsymbol{r}(s,t,u)=\begin{pmatrix} x(s,t,u) \\ y(s,t,u) \\ z(s,t,u) \end{pmatrix} \quad {\scriptstyle\left(\begin{array}{c} s \\[-6pt] t \\[-6pt] u\end{array}\right)} \in D</math>である場合は、多変数解析の議論により
:<math>\iiint_V \varphi dV = \iiint_D \varphi(\boldsymbol{r}(s,t,u)) \left|\det \frac{\partial{(x,y,z)}}{\partial{(s,t,u)}}\right| dsdtdu</math>
であると容易に判る。
立体に対しては曲線に於ける接線、曲面に於ける法線のような「ベクトル表示から求められる、積分領域の向きを指定するための方向」が一意には存在しない。そのため、体素ベクトルというものは考えない。
故に、ベクトル場の体積分は
:<math>\iiint_V \boldsymbol{a}dV</math>
の一種類のみである。
体積分を用いて表される概念としては、電荷が有名である。
:電荷密度<math>\rho(x,y,z)</math>に対し、領域<math>V</math>内にある電荷の総量は
::<math>q=\iiint_V \rho(x,y,z)dV</math>
また、電荷分布に於ける電気双極子モーメントは
::<math>\boldsymbol{p}=\iiint_V \rho\boldsymbol{r} dV</math>
というベクトル場の体積分で定義される。
更に、以下のような概念も定義されている。
:物体の質量<math>m</math>、密度<math>\rho</math>とすると質量中心ベクトルは
::<math>\boldsymbol{r}_G=\frac{1}{m}\iiint_V \rho\boldsymbol{r}dV</math>
:電磁場の真空での運動量は
::<math>\boldsymbol{P}=\frac{1}{c^2}\iiint_V \boldsymbol{E}\times\boldsymbol{H}dV</math>
2つの立体<math>V_1</math>と<math>V_2</math>の境界が一致するとき、これを一つの立体と見做して立体の和
:<math>V_1+V_2</math>
が定義される。
これを'''区分的に定義された立体'''という。
<math>V</math>が'''区分的に滑らか'''であるとは、<math>V</math>が有限個の滑らかな立体の和であることである。
これらを踏まえると、体積分には以下の性質が成り立つ。
#スカラー場
#:<math>\iiint_V (k\varphi+l\psi) dV=k\iiint_V \varphi dV + l \iiint_S \psi dV</math>
#:<math>\iiint_{V_1+V_2}\varphi dV = \iiint_{V_1}\varphi dV + \iiint_{V_2}\varphi dV</math>
#ベクトル場
#:<math>\iint_V (k\boldsymbol{a}+l\boldsymbol{b})dV=k\iiint_V \boldsymbol{a}dV+l\iiint_V \boldsymbol{b}dV</math>
#:<math>\iiint_{V_1+V_2}\boldsymbol{a}dV = \iiint_{V_1}\boldsymbol{a} dV + \iiint_{V_2}\boldsymbol{a}dV</math>
===積分定理===
ここでは、空間積分に関する種々の定理を紹介する。
体積分
:<math>\iiint_V \varphi dV=\iiint_V \varphi dxdydz</math>
に於いて、スカラー場<math>\varphi</math>がスカラー場<math>f</math>のある積分変数に関する偏導関数になっている場合を考える。
例えば<math>\varphi=\frac{\partial{f}}{\partial{x}}</math>の場合を考えると
:<math>\iiint_V \varphi dV = \iiint_V \frac{\partial{f}}{\partial{x}}dxdydz</math>
であり、
:<math>V=\left\{ \begin{pmatrix} x \\ y \\ z \end{pmatrix} \Bigg| \begin{array}{c} \vartheta(y,z) \leq x \leq \eta(y,z) \\ {\scriptstyle\left(\begin{array}{c} y \\[-6pt] z \end{array}\right)} \in D \end{array} \right\}</math>
とすると
:<math>=\iint_D \left( \int_{\vartheta(y,z)}^{\eta(y,z)} \frac{\partial{f}}{\partial{x}} dx \right) dydz</math>
偏微分に関する微分積分学の基本定理より
:<math>=\iint_D \{ f(\eta(y,z),y,z)-f(\vartheta(y,z),y,z) \} dydz</math>
ここで、曲面<math>S_\eta:x=\eta(y,z), S_\vartheta:x=\vartheta(y,z)</math>の面素ベクトルについて考えてみる。<br/>
<math>S_\eta</math>の接ベクトルは
:<math>\frac{\partial{\eta}}{\partial{y}}\boldsymbol{e}_x+\boldsymbol{e}_y, \frac{\partial{\eta}}{\partial{z}}\boldsymbol{e}_x+\boldsymbol{e}_z</math>
の2つなので、面素ベクトルは<math>x</math>軸正方向にとると
:<math>d\boldsymbol{S}_\eta=\left(\frac{\partial{\eta}}{\partial{y}}\boldsymbol{e}_x+\boldsymbol{e}_y\right)\times\left( \frac{\partial{\eta}}{\partial{z}}\boldsymbol{e}_x+\boldsymbol{e}_z\right)=\left( \boldsymbol{e}_x - \frac{\partial{\eta}}{\partial{y}}\boldsymbol{e}_y - \frac{\partial{\eta}}{\partial{z}}\boldsymbol{e}_z \right)dydz</math>
:<math>\therefore \boldsymbol{e}_x\cdot d\boldsymbol{S}_\eta=dydz</math>
:<math>\therefore \iint_{S_\eta} f\boldsymbol{e}_x \cdot d\boldsymbol{S}_\eta=\iint_D f(\eta(y,z),y,z)dydz </math>
<math>S_\vartheta</math>の接ベクトルは
:<math>\frac{\partial{\vartheta}}{\partial{y}}\boldsymbol{e}_x+\boldsymbol{e}_y, \frac{\partial{\vartheta}}{\partial{z}}\boldsymbol{e}_x+\boldsymbol{e}_z</math>
の2つなので、面素ベクトルは<math>x</math>軸負方向にとると
:<math>d\boldsymbol{S}_\vartheta=\left( \frac{\partial{\vartheta}}{\partial{z}}\boldsymbol{e}_x+\boldsymbol{e}_z\right)\times\left(\frac{\partial{\vartheta}}{\partial{y}}\boldsymbol{e}_x+\boldsymbol{e}_y\right)=\left(-\boldsymbol{e}_x + \frac{\partial{\vartheta}}{\partial{y}}\boldsymbol{e}_y + \frac{\partial{\vartheta}}{\partial{z}}\boldsymbol{e}_z \right)dydz</math>
:<math>\therefore \boldsymbol{e}_x\cdot d\boldsymbol{S}_\vartheta=-dydz</math>
:<math>\therefore \iint_{S_\vartheta} f\boldsymbol{e}_x \cdot d\boldsymbol{S}_\vartheta=-\iint_D f(\vartheta(y,z),y,z)dydz </math>
また、<math>S_\vartheta, S_\eta</math>を<math>V</math>の底面とみたときの側面<math>S_\mathrm{side}</math>は接平面に<math>\boldsymbol{e}_x</math>を含むので法線は<math>x</math>軸に垂直であり、
:<math>\boldsymbol{e}_x\cdot d\boldsymbol{S}_\mathrm{side}=0</math>
:<math>\therefore \iint_{S_\mathrm{side}}f\boldsymbol{e}_x\cdot d\boldsymbol{S}_\mathrm{side}=0</math>
よって
:<math>\iint_D \{f(\eta(y,z),y,z) - f(\vartheta(y,z),y,z) \}dydz=\iint_{S_\eta} f \boldsymbol{e}_x\cdot d\boldsymbol{S}_\eta + \iint_{S_\mathrm{side}} f \boldsymbol{e}_x\cdot d\boldsymbol{S}_\mathrm{side} + \iint_{S_\vartheta} f \boldsymbol{e}_x\cdot d\boldsymbol{S}_\vartheta</math>
:<math>=\oiint_{\partial{V}}f\boldsymbol{e}_x \cdot d\boldsymbol{S}</math>
ここで<math>\varphi=\frac{\partial{g}}{\partial{y}},\quad \varphi=\frac{\partial{h}}{\partial{z}}</math>の場合も同様の議論により
:<math>\iiint_V \frac{\partial{g}}{\partial{y}} dV = \oiint_{\partial{V}} g\boldsymbol{e}_y \cdot d\boldsymbol{S}</math>
:<math>\iiint_V \frac{\partial{h}}{\partial{z}}dV = \oiint_{\partial{V}} h\boldsymbol{e}_z\cdot d\boldsymbol{S}</math>
と判るので、3式を足し合わせて
:<math>\iiint_V \left(\frac{\partial{f}}{\partial{x}}+\frac{\partial{g}}{\partial{y}}+\frac{\partial{h}}{\partial{z}}\right)dV=\oiint_{\partial{V}} (f\boldsymbol{e}_x+g\boldsymbol{e}_y+h\boldsymbol{e}_z)\cdot d\boldsymbol{S}</math>
ここで曲面<math>\partial{V}</math>の外向き法線の方向余弦を<math>\begin{pmatrix} l \\ m \\ n \end{pmatrix}</math>と置くと最終的に
:<math>\iiint_V \left(\frac{\partial{f}}{\partial{x}}+\frac{\partial{g}}{\partial{y}}+\frac{\partial{h}}{\partial{z}}\right)dV=\oiint_{\partial{V}} (fl+gm+hn)dS</math>となる。
これを'''ガウス=グリーンの定理'''という。
更に、<math>\boldsymbol{a}(x,y,z)=\begin{pmatrix} f(x,y,z) \\ g(x,y,z) \\ h(x,y,z) \end{pmatrix}</math>と定義すると
:<math>\iiint_V\left( \frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}} \right)dV=\oiint_{\partial{V}} ( a_x\boldsymbol{e}_x+a_y\boldsymbol{e}_y+a_z\boldsymbol{e}_z )\cdot d\boldsymbol{S}</math>
則ち
:<math>\iiint_V \nabla\cdot\boldsymbol{a} dV = \oiint_{\partial{V}}\boldsymbol{a}\cdot d\boldsymbol{S}</math>
を得る。
これを'''ガウスの発散定理'''という。
{{定理|(ガウスの発散定理)}}
有界領域<math>V\subset\mathbb{R}^3</math>の境界<math>\partial{V}</math>が区分的に滑らかな閉曲面をなすとき、開集合<math>U \supset V^-</math>上で定義される<math>C^1</math>級ベクトル場<math>\boldsymbol{a}</math>に対して
:<math>\iiint_V \nabla\cdot\boldsymbol{a}dV = \oiint_{\partial{V}} \boldsymbol{a}\cdot d\boldsymbol{S}</math>
{{定理終わり}}
平面上で円弧を睨む扇形の中心角を円弧の弧長によって定義したのが弧度法であった。これを三次元に拡張することを考える。
半径1の球の中心を頂点とする円錐を考えたとき、円錐と球面の4つの交点が球面から切り取る有界曲面の曲面積を'''立体角'''と定義する。
この定義を利用して、向き付けられた有界曲面<math>S</math>に対する立体角も定義される。
:球の中心<math>\mathrm{O}</math>から<math>S</math>を眺めたとき、<math>\mathrm{O}</math>と<math>S</math>の頂点を結ぶ直線が<math>\mathrm{O}</math>を中心とする単位球面から切り取る曲面の面積<math>\Omega</math>を、「<math>\mathrm{O}</math>から見る<math>S</math>の立体角」という。但し、<math>\mathrm{O}</math>が<math>S</math>の裏側にいるとき正符号、表側にいるとき負符号とする。
立体角は物理的に無次元量であるが、弧度と同様に'''ステラジアン'''[sr]という単位が付されている。一般に半径<math>r</math>の球面で考えるときは、<math>\Omega</math>を<math>r^2</math>で除した値が立体角である。弧度と同様に、半径0のときは立体角を考えない。
単位球面の表面積は<math>4\pi</math>なので、立体角<math>\Omega</math>の範囲は<math>[-4\pi, 4\pi]</math>である。
<math>S</math>上の各点で面素ベクトルと位置ベクトル<math>\boldsymbol{r}</math>のなす角を<math>\theta</math>とする。このとき、面素<math>dS</math>に対して
:<math>d\Omega = \frac{\cos\theta}{\|\boldsymbol{r}\|^2}dS</math>
という微小量に関する等式が成り立つ。
書き換えると
:<math>d\Omega = \frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^3}\cdot d\boldsymbol{S}</math>
これを積分してやれば立体角の表式を得る。
:<math>\Omega(S)=\iint_S \frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^3}\cdot d\boldsymbol{S}</math>
閉曲面に対する立体角を考える。閉曲面の囲む領域を<math>V</math>とする。
立体角の中心<math>\mathrm{O}</math>が閉曲面の外にある場合、発散定理を用いて
:<math>\Omega(S)=\oiint_S \frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^3}\cdot d\boldsymbol{S}</math>
:<math>=-\oiint_S \mathrm{grad}\frac{1}{\|\boldsymbol{r}\|} \cdot d\boldsymbol{S}</math>
:<math>=-\iiint_V \mathrm{div}\left(\mathrm{grad}\frac{1}{\|\boldsymbol{r}\|}\right)dV</math>
:<math>=-\iiint_V \text{∆}\frac{1}{\|\boldsymbol{r}\|} dV</math>
:<math>=0</math>
である。
則ち、'''閉曲面外部から測った全体の立体角は常に0'''である。
ここで、球面座標に於ける公式
:<math>\mathrm{grad}\frac{1}{\|\boldsymbol{r}\|}=-\frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^3}</math>
:<math>\text{∆}\frac{1}{\|\boldsymbol{r}\|}=0</math>
を使用した。
これは<math>\boldsymbol{r}=\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>と置いて直交座標で計算すれば容易に証明される。
立体角の中心<math>\mathrm{O}</math>が閉曲面の中にある場合、<br/>閉球<math>V':B^-_\varepsilon(\mathrm{O})</math>とその境界<math>S'=\partial{V'}</math>を考えると<math>V\setminus V'</math>は境界がいずれも閉曲面で<math>\mathrm{O}</math>を内部に含まないので上の議論より立体角は0であり、
:<math>\Omega(S)=\Omega(S')</math>
が成り立つ。
また、<math>S'</math>は<math>\mathrm{O}</math>を中心とする球面なので
:<math>\Omega(S')=4\pi</math>
である。
則ち、'''閉曲面内部から測った全体の立体角は形状に依らず<math>4\pi</math>'''である。
物理的な例として、クーロンの法則の比例定数<math>k=\frac{1}{4\pi\varepsilon}</math>の<math>4\pi</math>は閉曲面内部から測った全体の立体角を表している。
grad・div・rotの積分形
平面のグリーンの定理(二次元のガウスの定理との同値性)
ストークスの定理
グリーンの第一定理(部分積分公式)
グリーンの第二定理(ポアソンの公式)
グリーンの定理
ポホザエフの恒等式
ポアンカレの補題再考
パップス=ギュルダンの定理
ラプラス場の解析(「調和関数の法線方向微分の面積分は0」「グリーンの第二定理の右辺=0」「調和関数の点mでの値は半径に依らずmを中心とした球内に於ける調和関数の平均値」「定数関数でない調和関数は最大値も最小値も持たない」「閉曲面上で定数関数である調和関数は閉曲面が囲む領域の至る所で定数関数」「ラプラス方程式のディリクレ問題の解は一意」「調和関数の境界に於ける法線方向微分が0なら立体内で至る所で定数関数」「ラプラス方程式の2解の境界上法線方向微分が一致するならその差は定数」)
==発展事項==
{{節stub}}
{{Advanced|多様体論}}
{{Advanced|微分幾何学}}
{{Advanced|積分幾何学}}
ここではベクトル解析の発展編及び微分幾何学の基礎編として、「ユークリッド空間の部分多様体上の微分幾何学」を扱う。言うなれば「<math>n</math>次元版のベクトル解析学」である。
===体積分再考===
体積分は先程「<math>\mathbb{R}^3</math>上の閉立体<math>V</math>」上で考えたが、実はここには線積分・面積分との大きな非対称性がある。
線積分は「曲線」、面積分は「曲面」を積分領域としたが、先程定義した体積分の積分領域は「平坦な立体」なのである(二次元で例えば楕円領域<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}\leq1</math>は境界こそ"曲線"だが空間そのものは<math>\mathbb{R}^2</math>という"平面"であることと同じ)。
1次元の曲がった空間である曲線<math>M^1:\boldsymbol{r}=\boldsymbol{r}(s)</math>が<math>\mathbb{R}^2</math>内、2次元の曲がった空間である曲面<math>M^2:\boldsymbol{r}=\boldsymbol{r}(s, t)</math>が<math>\mathbb{R}^3</math>内に存在するように、3次元の曲がった空間である曲立体<math>M^3:\boldsymbol{r}=\boldsymbol{r}(s, t, u)</math>は<math>\mathbb{R}^4</math>内に存在すると考えるのが自然である。ここで一般に<math>M^n\subset\mathbb{R}^{n+1}</math>が成り立つと予想され、この関係を「<math>M^n</math>の<math>\mathbb{R}^{n+1}</math>への'''埋め込み'''」と呼ぶことにする。
線積分を<math>C=M^1</math>、面積分を<math>S=M^2</math>で定義したように、体積分を<math>M^3</math>で定義することを考える。
媒介変数空間<math>\begin{pmatrix} s \\ t \\ u \end{pmatrix} \in V \subset\mathbb{R^3}</math>上の微小変化を考えると全微分を用いて
:<math>d\boldsymbol{r}=\frac{\partial{\boldsymbol{r}}}{\partial{s}}ds+\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>
よって<math>V</math>上の微小立方体<math>dsdtdu</math>は3ベクトル<math>\frac{\partial{\boldsymbol{r}}}{\partial{s}}ds,\quad\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt,\quad\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>の張る微小平行六面体へ移される。
体素はこの微小平行六面体の体積と考えられるが、<math>\boldsymbol{r}\in\mathbb{R}^4</math>より当然この3ベクトルは4項ベクトルなので、'''外積を含んでいるスカラー三重積は使えない'''。
全微分を一次変換表記すると
:<math>d\boldsymbol{r}=\begin{pmatrix} \frac{\partial{\boldsymbol{r}}}{\partial{s}} & \frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix} \begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math>
:<math>=\begin{pmatrix} \frac{\partial{x}}{\partial{s}} & \frac{\partial{x}}{\partial{t}} & \frac{\partial{x}}{\partial{u}} \\ \frac{\partial{y}}{\partial{s}} & \frac{\partial{y}}{\partial{t}} & \frac{\partial{y}}{\partial{u}} \\ \frac{\partial{z}}{\partial{s}} & \frac{\partial{z}}{\partial{t}} & \frac{\partial{z}}{\partial{u}} \\ \frac{\partial{w}}{\partial{s}} & \frac{\partial{w}}{\partial{t}} & \frac{\partial{w}}{\partial{u}} \end{pmatrix} \begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math>
:<math>=\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math>
ここでヤコビ行列は<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\in\mathbb{R}^{4\times3}</math>であって'''正方行列でないので行列式も求まらない'''。
そこで、[[線型代数学続論/種々の行列#随伴行列|グラム行列]]を利用することを考える。
'''グラム行列は必ず半正定値行列'''なので行列式は非負であり、平方根をとれる。
そのため、<math>\mathbf{G}:=\left(\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\right)^*\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}</math>として<math>\sqrt{\det\mathbf{G}}</math>を体積拡大率とする。
これは正方行列ならヤコビアンの絶対値に一致する。
{{NavTop|title=補足:体積拡大率に一致する証明}}
:<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}</math>の列ベクトルにグラム=シュミットの直交化法を適用すると[[線型代数学続論/行列分解|QR分解]]によって
:<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}=\mathbf{QR}\quad (\mathbf{Q}\in\mathbb{R}^{4\times3}, \mathbf{R}\in\mathbb{R}^{3\times3})</math>
よって
:<math>\mathbf{G}=(\mathbf{QR})^*\mathbf{QR}</math>
:<math>=\mathbf{R}^*\mathbf{Q}^*\mathbf{Q}\mathbf{R}</math>
:<math>=\mathbf{R}^*\mathbf{E}_3\mathbf{R}</math>(<math>\because\mathbf{Q}</math>は列ユニタリ行列)
:<math>=\mathbf{R}^*\mathbf{R}</math>
:<math>\therefore \sqrt{\det\mathbf{G}}=\sqrt{\det\left( \mathbf{R}^*\mathbf{R} \right)}=\sqrt{\left(\det\mathbf{R}\right)^2}=|\det\mathbf{R}|</math>
<math>\mathbf{Q}</math>は列ユニタリ行列なのでその一次変換は等長変換であり、全微分による拡大率は<math>\mathbf{R}</math>による拡大率と一致する。<br/>
則ち、<math>\sqrt{\det\mathbf{G}}</math>を拡大率としてとれる。//
{{NavBottom}}
よって体積分は
:<math>\iiint_{M^3} f(\boldsymbol{r})dM^3 = \iiint_{V} f(\boldsymbol{r}(s, t, u))\sqrt{\det\mathbf{G}}\,dsdtdu</math>
ここから、適切な媒介変数表示が存在するならば<math>M^n</math>上での体積分の計算に<math>\mathbb{R}^{n+1}\setminus M^n</math>の情報は入ってこず、<math>M^n</math>の情報のみで計算されると予想される。
実際、<math>M^n</math>に適切な媒介変数表示<math>\boldsymbol{r}=\boldsymbol{r}(\boldsymbol{p})\quad(\boldsymbol{p}\in\mathbb{R}^n)</math>が存在するとき、全微分による一次変換の拡大率は同様にグラム行列式の平方根で与えられるので体積素は<math>dM^n = \sqrt{\det\mathbf{G}} \prod_{k=1}^{n}d\boldsymbol{p}_k</math>と書け、これは正しい。
なお、二次元の場合を考えると<math>\mathbf{G}=\mathbf{K}</math>より<math>dM^2=dS</math>であり、面素に一致する。一次元の場合を考えると<math>\mathbf{G}=\|d\boldsymbol{r}\|^2</math>より<math>dM^1=dl</math>であり、線素に一致する。
実は、体素だけでなく一般に角度や長さといった幾何学的な量は埋め込み先である<math>\mathbb{R}^{n+1}</math>の情報を全く必要とせず、<math>M^n</math>の情報だけで構成できることが知られている。このことは微分幾何学のうち[[w:リーマン幾何学|リーマン幾何学]]と呼ばれる分野で詳しく扱われる。
ここまで<math>M^n</math>を適切な媒介変数<math>\boldsymbol{p}\in\mathbb{R}^n</math>で表すことを強調してきたが、媒介変数表示を考えるということは<math>M^n</math>から媒介変数空間<math>U\subset\mathbb{R}^n</math>への射影<math>\pi:M^n\to U</math>を考えるということである。
ここで、この<math>\pi</math>が全単射ならば逆向きの射影<math>\pi^{-1}:U\to M^n</math>が存在してそれが媒介変数表示<math>\boldsymbol{r}=\boldsymbol{r}(\boldsymbol{p})</math>となるわけであるが、これは以下のようにも捉えられる。
:<math>\pi</math>によって射影した平坦な空間で座標を設定すると、'''適切な逆変換<sup>※</sup>によって曲がった空間<math>M^n</math>上に(局所)座標系を与えることができる'''。
つまり、体積分を媒介変数空間に置換積分するということは、逆に体積分の元の表示が「<math>M^n</math>上の局所座標系に於ける積分」であることを示している。
※この適切な逆変換が存在する条件は'''陰関数定理そのもの'''である。
ここで、適切な媒介変数表示が存在するよう<math>M^n</math>に制限を課したものが、以下で扱う'''多様体'''である。
===多様体===
===微分形式===
[[線型代数学続論/外積代数]]も参照。
===リーマン計量===
===テンソル解析===
[[線型代数学続論/テンソル代数]]も参照。
===複素ベクトル解析===
[[複素解析学]]も参照。
{{DEFAULTSORT:へくとるかいせき}}
[[Category:解析学]]
[[Category:微分積分学]]
[[Category:ベクトル解析|かいせきかくきそ]]
eack81v6yeo9co82dw3stvrdqtzvm07
コンピュータセキュリティ
0
48948
304904
304902
2026-10-20T11:59:40Z
~2026-54076-02
92740
/* 潜在的な脆弱性を減らす */
304904
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== 不要なサービスを止める / 削除する ===
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 概要
|-
| 名前解決 || systemd-resolved || systemd-resolved.service || systemd-resolved ||ローカルで名前解決。コマンド例: <code>dig @127.0.0.53 example.com</code>
|-
| DNSキャッシュ || dnsmasq || || dnsmasq || ローカルでDNSを引く。コマンド例: <code>dig @10.208.199.1 example.com</code>
|-
| 時刻同期 || ntpd || ntpsec.service || ntpsec{{efn|代替として systemd-timesyncd もあるが、NTPの代わりに単純な SNTP のみ対応。}} ||
|-
| ネットワーク管理 || NetworkManager || NetworkManager.service || network-manager ||
|-
| スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
2l84mi25pcl3q6hjh6jcxhud4pe6tx9
304913
304904
2026-10-20T16:51:03Z
~2026-54076-02
92740
/* 潜在的な脆弱性を減らす */
304913
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== インターネット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 概要
|-
| rowspan=2 | 53 || rowspan=2 | DNS || systemd-resolved || systemd-resolved.service || systemd-resolved ||ローカルで名前解決。コマンド例: <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || || dnsmasq || ローカルでDNSを引く。コマンド例: <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353 || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| || 時刻同期 || ntpd || ntpsec.service || ntpsec{{efn|代替として systemd-timesyncd もあるが、NTPの代わりに単純な SNTP のみ対応。}} ||
|-
| || ネットワーク管理 || NetworkManager || NetworkManager.service || network-manager ||
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
j8g7zad4dydouu7qh2iojii0x9ys72m
304914
304913
2026-10-20T16:52:19Z
~2026-54076-02
92740
/* インターネット関連サービス */
304914
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== インターネット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53 || rowspan=2 | DNS || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || || dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353 || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| || 時刻同期 || ntpd || ntpsec.service || ntpsec{{efn|代替として systemd-timesyncd もあるが、NTPの代わりに単純な SNTP のみ対応。}} ||
|-
| || ネットワーク管理 || NetworkManager || NetworkManager.service || network-manager ||
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
rv2p8homd7qprehi9c86ajgp6b92b7x
304915
304914
2026-10-20T17:11:13Z
~2026-54076-02
92740
/* インターネット関連サービス */
304915
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || || dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP || [[:w:DHCP|DHCP]] || dnsmasq || || dnsmasq ||
|-
| || 時刻同期 || ntpd || ntpsec.service || ntpsec{{efn|代替として systemd-timesyncd もあるが、NTPの代わりに単純な SNTP のみ対応。}} ||
|-
| || ネットワーク管理 || NetworkManager || NetworkManager.service || network-manager ||
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
kpxc6slaedzisokpn337ivaezzlurjg
304916
304915
2026-10-20T18:13:02Z
~2026-54076-02
92740
/* 不要なサービスを止める / 削除する */
304916
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || || dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP || [[:w:DHCP|DHCP]] || dnsmasq || || dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP" -h "$(cat /sys/class/net/pan1/address)"</code>
|-
| || 時刻同期 || ntpd || ntpsec.service || ntpsec{{efn|代替として systemd-timesyncd もあるが、NTPの代わりに単純な SNTP のみ対応。}} ||
|-
| || ネットワーク管理 || NetworkManager || NetworkManager.service || network-manager ||
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
iw78zpsiml59ufjn0b7bs0g110vd8zw
304917
304916
2026-10-20T18:26:40Z
~2026-54076-02
92740
/* ソケット関連サービス */
304917
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || || dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP || [[:w:DHCP|DHCP]] || dnsmasq || || dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>
|-
| || 時刻同期 || ntpd || ntpsec.service || ntpsec{{efn|代替として systemd-timesyncd もあるが、NTPの代わりに単純な SNTP のみ対応。}} ||
|-
| || ネットワーク管理 || NetworkManager || NetworkManager.service || network-manager ||
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
53rj12bkb9o3csmszm0sf8nx17m5zj3
304918
304917
2026-10-20T18:36:47Z
~2026-54076-02
92740
/* ソケット関連サービス */
304918
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP || [[:w:DHCP|DHCP]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>
|-
| || 時刻同期 || ntpd || ntpsec.service || ntpsec{{efn|代替として systemd-timesyncd もあるが、NTPの代わりに単純な SNTP のみ対応。}} ||
|-
| || ネットワーク管理 || NetworkManager || NetworkManager.service || network-manager ||
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
mvn6ic6dcrgu21wwx9bhve3f7s8x9ck
304919
304918
2026-10-20T18:39:47Z
~2026-54076-02
92740
/* ソケット関連サービス */
304919
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP || [[:w:DHCP|DHCP]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>
|-
| || 時刻同期 || ntpd || ntpsec.service || ntpsec{{efn|代替として systemd-timesyncd もあるが、NTPの代わりに単純な SNTP のみ対応。}} ||
|-
| || ネットワーク管理 || NetworkManager || NetworkManager.service || network-manager ||
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
kno4dfq9buzx85x1rhgdmazrh1iyw9n
304926
304919
2026-10-21T06:03:20Z
~2026-54076-02
92740
/* ソケット関連サービス */
304926
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP || [[:w:DHCP|DHCP]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要。}}
|-
|123/UDP || 時刻同期 || ntpd || ntpsec.service || ntpsec{{efn|代替として systemd-timesyncd もあるが、NTPの代わりに単純な SNTP のみ対応の上、サーバーを持たずクライアント側のみ対応。}} || ntpdate -q localhost{{efn|Ubuntuではntpsec-ntpdateパッケージの導入が必要。}}
|-
| || ネットワーク管理 || NetworkManager || NetworkManager.service || network-manager ||
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
tksxz6024wkodsmy8j61wvvhou4bndu
304927
304926
2026-10-21T06:21:05Z
~2026-54076-02
92740
/* ソケット関連サービス */
304927
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP || [[:w:DHCP|DHCP]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要。}}
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もあるが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>
|-
| chronyd || chrony.service || chrony
|-
| || ネットワーク管理 || NetworkManager || NetworkManager.service || network-manager ||
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
09yor0mm7hooczwbgbj3hpf0dazummq
304928
304927
2026-10-21T06:27:41Z
~2026-54076-02
92740
/* ソケット関連サービス */
304928
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP || [[:w:DHCP|DHCP]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできるものの、こちらはNTP-KE非対応。}}
|-
| chronyd || chrony.service || chrony
|-
| || ネットワーク管理 || NetworkManager || NetworkManager.service || network-manager ||
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
jl8uycx5hzsxlx34s5o45tmsi107ptk
304929
304928
2026-10-21T06:28:09Z
~2026-54076-02
92740
304929
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP || [[:w:DHCP|DHCP]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| || ネットワーク管理 || NetworkManager || NetworkManager.service || network-manager ||
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
34mbn20dvk8sghb31w0tsfngy2s2wyw
304930
304929
2026-10-21T06:45:25Z
~2026-54076-02
92740
/* ソケット関連サービス */
304930
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| 68/UDP<br>546/UDP || DHCPクライアント<br>DHCPv6クライアント || NetworkManager<wbr>{{efn|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
a05xu7hil2c2uec4xq51o2riwepzqen
304931
304930
2026-10-21T06:51:36Z
~2026-54076-02
92740
/* ソケット関連サービス */
304931
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント || systemd-networkd || || systemd ||
|-
| NetworkManager<wbr>{{efn|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
5y4hygcxspn429ha45fre11u1zj5rgr
304932
304931
2026-10-21T06:54:25Z
~2026-54076-02
92740
/* ソケット関連サービス */
304932
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである 0dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
kfvy7qdvl4f8bg2kvulgemzb7ehztga
304933
304932
2026-10-21T06:56:41Z
~2026-54076-02
92740
304933
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
p4jza743o1e89fmgwc4r8f3ros6gckb
304934
304933
2026-10-21T07:03:01Z
~2026-54076-02
92740
/* ソケット関連サービス */
304934
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 1716/UDP<br>1716/TCP || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
8q9hy7svvs96n14ws9qhcfgvti471gz
304935
304934
2026-10-21T07:17:03Z
~2026-54076-02
92740
/* ソケット関連サービス */
304935
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! デーモン名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| 1716/UDP<br>1716/TCP || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| || 統合開発環境 (Visal Studio Code) || code || ? || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || ? || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || ? || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || ? || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
nagcvf2qju6ujpm4177hg2chd5ne41z
304936
304935
2026-10-21T07:40:22Z
~2026-54076-02
92740
/* ソケット関連サービス */
304936
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| 1716/UDP<br>1716/TCP || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
|-
| || ブラウザ (Google Chrome) || chrome || || google-chrome (公式APTリポジトリ) ||
|-
| || Steam ゲームランチャー || steam || || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
51jliukxqsyaq2dj169ozvjff1l3w5c
304937
304936
2026-10-21T07:46:59Z
~2026-54076-02
92740
/* ソケット関連サービス */
304937
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| ユーザーポート/UDP || HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || || google-chrome (公式APTリポジトリ) ||
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
|-
| || Steam ゲームランチャー || steam || || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
4yq828cjlppf6t9pxlridceki7dzf0t
304938
304937
2026-10-21T07:49:14Z
~2026-54076-02
92740
/* ソケット関連サービス */
304938
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名 !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || || firefox (snap) ||
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
|-
| || Steam ゲームランチャー || steam || || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
q2wnp8si2mby5u18gh3ib6x46jw77sj
304939
304938
2026-10-21T07:57:19Z
~2026-54076-02
92740
/* ソケット関連サービス */
304939
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
|-
| || Steam ゲームランチャー || steam || || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
t08e0iiqohzlwo05nn7026d92snaftm
304940
304939
2026-10-21T07:59:20Z
~2026-54076-02
92740
/* ソケット関連サービス */
304940
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
|-
| || Steam ゲームランチャー || steam || || steam (公式APTリポジトリ) ||
|}
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
ed6i9vvnwbp0v1r9402mvdoxu92moat
304941
304940
2026-10-21T08:13:48Z
~2026-54076-02
92740
/* ソケット関連サービス */
304941
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service || sunshine (公式debファイル) ||
|-
| || Steam ゲームランチャー || steam || || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
1xnvdp0jyxwk4xsfn40yjae13v1l6e5
304942
304941
2026-10-21T08:19:02Z
~2026-54076-02
92740
/* ソケット関連サービス */
304942
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service || sunshine (公式debファイル) ||
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
ghrz6vx5eum6lrrsqty6cggwgqr9utu
304943
304942
2026-10-21T08:24:20Z
~2026-54076-02
92740
/* ソケット関連サービス */
304943
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
d0lbqdib5v86f7mabmonggxlg7qknvg
304944
304943
2026-10-21T08:39:55Z
~2026-54076-02
92740
/* ソケット関連サービス */
304944
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| 3389/TCP<br>3389/UDP || Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
294wwtpcdiarjbbpzkcdl4fr9py5gpp
304945
304944
2026-10-21T08:42:07Z
~2026-54076-02
92740
/* ソケット関連サービス */
304945
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|-
! ポート待ち受けのあるプロセスを見る
| <code>sudo ss -tulnp</code>
|-
! 通信しているプロセスを見る
| <code>sudo lsof -i -P -n</code>
|}
=== ソケット関連サービス ===
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| rowspan=2 | 3389/TCP<br>3389/UDP || rowspan=2 | Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| krdpserver || app-org.kde.krdpserver.service (user) || krdp ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
<!--
=== dbus関連サービス ===
-->
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
7eal83qxj081rlutx5jb1le4jmg2g3s
304946
304945
2026-10-21T09:09:26Z
~2026-54076-02
92740
/* 不要なサービスを止める / 削除する */
304946
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|}
=== ソケット関連サービス ===
ポート待ち受けのあるプロセスを見るには <code>sudo ss -tulnp</code> を、通信しているプロセスを見るには <code>sudo lsof -i -P -n</code> を実行しましょう。
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| rowspan=2 | 3389/TCP<br>3389/UDP || rowspan=2 | Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| krdpserver || app-org.kde.krdpserver.service (user) || krdp ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
=== dbus関連サービス ===
システムバスは <code>busctl --system list</code>、セッションバスは <code>busctl --user list</code> で確認することができます。
それらを提供するプロセス一覧は以下で取得できます:
* システムバスを提供するプロセス: <code>busctl --system --no-pager list | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
* ユーザーバスを提供するプロセス: <code>busctl --user --no-pager list | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
一部はプロセス実動作でdbusサービスを提供する activatable 状態となっています。activatable 状態で提供するサービスファイルは以下で取得できます:
* activatableなシステムバスサービス: <code>busctl --system --no-pager list | awk '$0 ~ /activatable/ {print $1}' | while read -r s; do find /usr/share/dbus-1 /etc/dbus-1 /usr/lib/dbus-1 -name "$s.service" -print 2>/dev/null; done</code>
* activatableなユーザーバスサービス: <code>busctl --user --no-pager list | awk '$0 ~ /activatable/ {print $1}' | while read -r s; do find /usr/share/dbus-1 /etc/dbus-1 /usr/lib/dbus-1 -name "$s.service" -print 2>/dev/null; done</code>
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
qddf2jvia806l14k0wwgl99ukpl5z1i
304947
304946
2026-10-21T09:15:47Z
~2026-54076-02
92740
/* dbus関連サービス */
304947
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|}
=== ソケット関連サービス ===
ポート待ち受けのあるプロセスを見るには <code>sudo ss -tulnp</code> を、通信しているプロセスを見るには <code>sudo lsof -i -P -n</code> を実行しましょう。
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| rowspan=2 | 3389/TCP<br>3389/UDP || rowspan=2 | Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| krdpserver || app-org.kde.krdpserver.service (user) || krdp ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
=== dbus関連サービス ===
システムバスは <code>busctl --system list</code>、セッションバスは <code>busctl --user list</code> で確認することができます。
それらを提供するプロセス一覧は以下で取得できます:
* システムバスを提供するプロセス: <code>busctl --system --no-pager list | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
* ユーザーバスを提供するプロセス: <code>busctl --user --no-pager list | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
一部はプロセス実動作でdbusサービスを提供する activatable 状態となっています。activatable 状態で提供するサービスファイルは以下で取得できます:
* activatableなシステムバスサービス: <code>busctl --system --no-pager list | awk '/activatable/ {print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service"</code>
* activatableなユーザーバスサービス: <code>busctl --user --no-pager list | awk '/activatable/ {print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service"</code>
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
jat27gwei5230m127lqzqbnwrvwx98v
304948
304947
2026-10-21T09:17:58Z
~2026-54076-02
92740
/* dbus関連サービス */
304948
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|}
=== ソケット関連サービス ===
ポート待ち受けのあるプロセスを見るには <code>sudo ss -tulnp</code> を、通信しているプロセスを見るには <code>sudo lsof -i -P -n</code> を実行しましょう。
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| rowspan=2 | 3389/TCP<br>3389/UDP || rowspan=2 | Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| krdpserver || app-org.kde.krdpserver.service (user) || krdp ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
=== dbus関連サービス ===
システムバスは <code>busctl --system list</code>、セッションバスは <code>busctl --user list</code> で確認することができます。
それらを提供するプロセス一覧は以下で取得できます:
* システムバスを提供するプロセス: <code>busctl --system --no-pager list | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
* ユーザーバスを提供するプロセス: <code>busctl --user --no-pager list | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
dbusサービスの一部はプロセス未動作の activatable 状態で提供されています。activatable 状態で提供するサービスの設定ファイルは以下で取得できます:
* activatableなシステムバスサービス: <code>busctl --system --no-pager list | awk '/activatable/ {print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service"</code>
* activatableなユーザーバスサービス: <code>busctl --user --no-pager list | awk '/activatable/ {print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service"</code>
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
rwwj5cva0pgyvqldu9hdijmsihf93my
304949
304948
2026-10-21T09:18:39Z
~2026-54076-02
92740
/* dbus関連サービス */
304949
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|}
=== ソケット関連サービス ===
ポート待ち受けのあるプロセスを見るには <code>sudo ss -tulnp</code> を、通信しているプロセスを見るには <code>sudo lsof -i -P -n</code> を実行しましょう。
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| rowspan=2 | 3389/TCP<br>3389/UDP || rowspan=2 | Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| krdpserver || app-org.kde.krdpserver.service (user) || krdp ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
=== dbus関連サービス ===
システムバスは <code>busctl --system list</code>、セッションバスは <code>busctl --user list</code> で確認することができます。
それらを提供するプロセス一覧は以下で取得できます:
* システムバスを提供するプロセス: <code>busctl --system --no-pager list | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
* ユーザーバスを提供するプロセス: <code>busctl --user --no-pager list | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
dbusサービスの一部はプロセス未動作のアクティベータブル (activatable) な状態で提供されています。アクティベータブルな状態で提供するサービスの設定ファイルは以下で取得できます:
* activatableなシステムバスサービス: <code>busctl --system --no-pager list | awk '/activatable/ {print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service"</code>
* activatableなユーザーバスサービス: <code>busctl --user --no-pager list | awk '/activatable/ {print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service"</code>
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
lthlme4vu118buzmwwgaokbca0ft7kb
304950
304949
2026-10-21T09:19:12Z
~2026-54076-02
92740
/* 不要なサービスを止める / 削除する */
304950
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|}
=== ソケット経由のサービス ===
ポート待ち受けのあるプロセスを見るには <code>sudo ss -tulnp</code> を、通信しているプロセスを見るには <code>sudo lsof -i -P -n</code> を実行しましょう。
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| rowspan=2 | 3389/TCP<br>3389/UDP || rowspan=2 | Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| krdpserver || app-org.kde.krdpserver.service (user) || krdp ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
=== dbus経由のサービス ===
システムバスは <code>busctl --system list</code>、セッションバスは <code>busctl --user list</code> で確認することができます。
それらを提供するプロセス一覧は以下で取得できます:
* システムバスを提供するプロセス: <code>busctl --system --no-pager list | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
* ユーザーバスを提供するプロセス: <code>busctl --user --no-pager list | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
dbusサービスの一部はプロセス未動作のアクティベータブル (activatable) な状態で提供されています。アクティベータブルな状態で提供するサービスの設定ファイルは以下で取得できます:
* activatableなシステムバスサービス: <code>busctl --system --no-pager list | awk '/activatable/ {print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service"</code>
* activatableなユーザーバスサービス: <code>busctl --user --no-pager list | awk '/activatable/ {print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service"</code>
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
0zzloxmd9w4k59ae6ebo2frww2udynj
304951
304950
2026-10-21T09:20:01Z
~2026-54076-02
92740
/* dbus経由のサービス */
304951
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|}
=== ソケット経由のサービス ===
ポート待ち受けのあるプロセスを見るには <code>sudo ss -tulnp</code> を、通信しているプロセスを見るには <code>sudo lsof -i -P -n</code> を実行しましょう。
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| rowspan=2 | 3389/TCP<br>3389/UDP || rowspan=2 | Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| krdpserver || app-org.kde.krdpserver.service (user) || krdp ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
=== dbus経由のサービス ===
システムバスは <code>busctl --system list</code>、セッションバスは <code>busctl --user list</code> で確認することができます。
それらを提供する実行中のプロセスの一覧は以下で取得できます:
* システムバスを提供するプロセス: <code>busctl --system --no-pager list | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
* ユーザーバスを提供するプロセス: <code>busctl --user --no-pager list | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
dbusサービスの一部はプロセス未実行のアクティベータブル (activatable) な状態で提供されています。アクティベータブルな状態で提供するサービスの設定ファイルは以下で取得できます:
* activatableなシステムバスサービス: <code>busctl --system --no-pager list | awk '/activatable/ {print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service"</code>
* activatableなユーザーバスサービス: <code>busctl --user --no-pager list | awk '/activatable/ {print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service"</code>
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
5xxudu9hhxngnrtdakm647jcs5snvpl
304952
304951
2026-10-21T09:27:35Z
~2026-54076-02
92740
/* dbus経由のサービス */
304952
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|}
=== ソケット経由のサービス ===
ポート待ち受けのあるプロセスを見るには <code>sudo ss -tulnp</code> を、通信しているプロセスを見るには <code>sudo lsof -i -P -n</code> を実行しましょう。
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| rowspan=2 | 3389/TCP<br>3389/UDP || rowspan=2 | Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| krdpserver || app-org.kde.krdpserver.service (user) || krdp ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
=== dbus経由のサービス ===
システムバスは <code>busctl --system list</code>、セッションバスは <code>busctl --user list</code> で確認することができます。
それらを提供する実行中のプロセスの一覧は以下で取得できます:
* システムバスを提供するプロセス: <code>busctl --system --no-pager | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
* ユーザーバスを提供するプロセス: <code>busctl --user --no-pager | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
dbusサービスの一部はプロセス未実行のアクティベータブル (activatable) な状態で提供されています。アクティベータブルな状態で提供するサービスの設定ファイルは以下で取得できます:
* activatableなシステムバスサービス: <code>busctl --system --no-pager --activatable | awk '{print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service"</code>
* activatableなユーザーバスサービス: <code>busctl --user --no-pager --activatable | awk '{print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service"</code>
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
16egthpg230cecnsusnbhr4o72jp238
304953
304952
2026-10-21T09:33:10Z
~2026-54076-02
92740
/* dbus経由のサービス */
304953
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|}
=== ソケット経由のサービス ===
ポート待ち受けのあるプロセスを見るには <code>sudo ss -tulnp</code> を、通信しているプロセスを見るには <code>sudo lsof -i -P -n</code> を実行しましょう。
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| rowspan=2 | 3389/TCP<br>3389/UDP || rowspan=2 | Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| krdpserver || app-org.kde.krdpserver.service (user) || krdp ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
=== dbus経由のサービス ===
システムバスは <code>busctl --system list</code>、セッションバスは <code>busctl --user list</code> で確認することができます。
それらを提供する実行中のプロセスの一覧は以下で取得できます:
* システムバスを提供するプロセス: <code>busctl --system --no-pager | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
* ユーザーバスを提供するプロセス: <code>busctl --user --no-pager | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
dbusサービスの一部はプロセス未実行のアクティベータブル (activatable) な状態で提供されています。アクティベータブルな状態で提供するサービスの実行コマンドは以下で取得できます:
* activatableなシステムバスの実行コマンド: <code>busctl --system --no-pager --activatable | awk '{print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service" | xargs grep -h "Exec=" | sed 's/Exec=//g' | sort -u</code>
* activatableなユーザーバスの実行コマンド: <code>busctl --user --no-pager --activatable | awk '{print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service" | xargs grep -h "Exec=" | sed 's/Exec=//g' | sort -u</code>
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
1ywt6vvtppyoed6oqariayzdeg5ef2y
304954
304953
2026-10-21T09:55:11Z
~2026-54076-02
92740
/* 不要なサービスを止める / 削除する */
304954
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|}
=== TCP/UDP経由のサービス ===
TCP/UDPでのポート待ち受けのあるプロセスを見るには <code>sudo ss -tulnp</code> を、通信しているプロセスを見るには <code>sudo lsof -i -P -n</code> を実行しましょう。
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| rowspan=2 | 3389/TCP<br>3389/UDP || rowspan=2 | Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| krdpserver || app-org.kde.krdpserver.service (user) || krdp ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
=== Unix Domain経由のサービス ===
Unix Domainでのポート待ち受けのあるプロセスを見るには <code>sudo ss -xlp</code> を実行しましょう。
=== dbus経由のサービス ===
システムバスは <code>busctl --system list</code>、セッションバスは <code>busctl --user list</code> で確認することができます。
それらを提供する実行中のプロセスの一覧は以下で取得できます:
* システムバスを提供するプロセス: <code>busctl --system --no-pager | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
* ユーザーバスを提供するプロセス: <code>busctl --user --no-pager | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
dbusサービスの一部はプロセス未実行のアクティベータブル (activatable) な状態で提供されています。アクティベータブルな状態で提供するサービスの実行コマンドは以下で取得できます:
* activatableなシステムバスの実行コマンド: <code>busctl --system --no-pager --activatable | awk '{print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service" | xargs grep -h "Exec=" | sed 's/Exec=//g' | sort -u</code>
* activatableなユーザーバスの実行コマンド: <code>busctl --user --no-pager --activatable | awk '{print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service" | xargs grep -h "Exec=" | sed 's/Exec=//g' | sort -u</code>
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
aw758jv3uxr58xkx9xv88a1wi4l11zl
304955
304954
2026-10-21T10:05:31Z
~2026-54076-02
92740
/* システム領域に不審なファイルが追加されていないかを調べる */
304955
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|}
=== TCP/UDP経由のサービス ===
TCP/UDPでのポート待ち受けのあるプロセスを見るには <code>sudo ss -tulnp</code> を、通信しているプロセスを見るには <code>sudo lsof -i -P -n</code> を実行しましょう。
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| rowspan=2 | 3389/TCP<br>3389/UDP || rowspan=2 | Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| krdpserver || app-org.kde.krdpserver.service (user) || krdp ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
=== Unix Domain経由のサービス ===
Unix Domainでのポート待ち受けのあるプロセスを見るには <code>sudo ss -xlp</code> を実行しましょう。
=== dbus経由のサービス ===
システムバスは <code>busctl --system list</code>、セッションバスは <code>busctl --user list</code> で確認することができます。
それらを提供する実行中のプロセスの一覧は以下で取得できます:
* システムバスを提供するプロセス: <code>busctl --system --no-pager | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
* ユーザーバスを提供するプロセス: <code>busctl --user --no-pager | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
dbusサービスの一部はプロセス未実行のアクティベータブル (activatable) な状態で提供されています。アクティベータブルな状態で提供するサービスの実行コマンドは以下で取得できます:
* activatableなシステムバスの実行コマンド: <code>busctl --system --no-pager --activatable | awk '{print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service" | xargs grep -h "Exec=" | sed 's/Exec=//g' | sort -u</code>
* activatableなユーザーバスの実行コマンド: <code>busctl --user --no-pager --activatable | awk '{print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service" | xargs grep -h "Exec=" | sed 's/Exec=//g' | sort -u</code>
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
また手動 (manual) でインストールされたパッケージは<code>sudo apt-mark showmanual</code>で確認できます。このコマンドによってインストールした覚えないパッケージが入ってないかをチェックしましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
jls31cehujr18xszt7a9d9odmutsynq
304956
304955
2026-10-21T10:10:24Z
~2026-54076-02
92740
/* システム領域に不審なファイルが追加されていないかを調べる */
304956
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|}
=== TCP/UDP経由のサービス ===
TCP/UDPでのポート待ち受けのあるプロセスを見るには <code>sudo ss -tulnp</code> を、通信しているプロセスを見るには <code>sudo lsof -i -P -n</code> を実行しましょう。
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| rowspan=2 | 3389/TCP<br>3389/UDP || rowspan=2 | Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| krdpserver || app-org.kde.krdpserver.service (user) || krdp ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
=== Unix Domain経由のサービス ===
Unix Domainでのポート待ち受けのあるプロセスを見るには <code>sudo ss -xlp</code> を実行しましょう。
=== dbus経由のサービス ===
システムバスは <code>busctl --system list</code>、セッションバスは <code>busctl --user list</code> で確認することができます。
それらを提供する実行中のプロセスの一覧は以下で取得できます:
* システムバスを提供するプロセス: <code>busctl --system --no-pager | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
* ユーザーバスを提供するプロセス: <code>busctl --user --no-pager | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
dbusサービスの一部はプロセス未実行のアクティベータブル (activatable) な状態で提供されています。アクティベータブルな状態で提供するサービスの実行コマンドは以下で取得できます:
* activatableなシステムバスの実行コマンド: <code>busctl --system --no-pager --activatable | awk '{print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service" | xargs grep -h "Exec=" | sed 's/Exec=//g' | sort -u</code>
* activatableなユーザーバスの実行コマンド: <code>busctl --user --no-pager --activatable | awk '{print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service" | xargs grep -h "Exec=" | sed 's/Exec=//g' | sort -u</code>
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
また手動 (manual) でインストールされたパッケージは<code>sudo apt-mark showmanual</code>で確認できます。このコマンドによってインストールした覚えないパッケージが入ってないかをチェックしましょう。
GUI が使えるのであれば<code>synaptic</code>を起動して「インストール済(ローカルまたは廃止)」と「インストール済(手動)」を確認しましょう。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
q8h3a56w7snu5jwei46yyflel700ti7
304957
304956
2026-10-21T10:14:51Z
~2026-54076-02
92740
/* システム領域に不審なファイルが追加されていないかを調べる */
304957
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|}
=== TCP/UDP経由のサービス ===
TCP/UDPでのポート待ち受けのあるプロセスを見るには <code>sudo ss -tulnp</code> を、通信しているプロセスを見るには <code>sudo lsof -i -P -n</code> を実行しましょう。
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| rowspan=2 | 3389/TCP<br>3389/UDP || rowspan=2 | Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| krdpserver || app-org.kde.krdpserver.service (user) || krdp ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
=== Unix Domain経由のサービス ===
Unix Domainでのポート待ち受けのあるプロセスを見るには <code>sudo ss -xlp</code> を実行しましょう。
=== dbus経由のサービス ===
システムバスは <code>busctl --system list</code>、セッションバスは <code>busctl --user list</code> で確認することができます。
それらを提供する実行中のプロセスの一覧は以下で取得できます:
* システムバスを提供するプロセス: <code>busctl --system --no-pager | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
* ユーザーバスを提供するプロセス: <code>busctl --user --no-pager | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
dbusサービスの一部はプロセス未実行のアクティベータブル (activatable) な状態で提供されています。アクティベータブルな状態で提供するサービスの実行コマンドは以下で取得できます:
* activatableなシステムバスの実行コマンド: <code>busctl --system --no-pager --activatable | awk '{print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service" | xargs grep -h "Exec=" | sed 's/Exec=//g' | sort -u</code>
* activatableなユーザーバスの実行コマンド: <code>busctl --user --no-pager --activatable | awk '{print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service" | xargs grep -h "Exec=" | sed 's/Exec=//g' | sort -u</code>
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
またaptレポジトリに無いインストールされたパッケージは<code>apt list '?obsolete'</code>で、手動 (manual) でインストールされたパッケージは<code>apt-mark showmanual</code>で確認できます。これらのコマンドを実行してインストールした覚えないパッケージが入ってないかをチェックしましょう。GUI が使えるのであれば<code>synaptic</code>を起動して「インストール済(ローカルまたは廃止)」と「インストール済(手動)」を確認するのもオススメです。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
7mrgolif3a7jj9i6rinii2rot3otgiy
304958
304957
2026-10-21T10:23:11Z
~2026-54076-02
92740
/* TCP/UDP経由のサービス */
304958
wikitext
text/x-wiki
'''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。
== コンピュータセキュリティの基本 ==
コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。
具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。
新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。
この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。
== 安全にパスワードを使う ==
=== 流出したパスワードと被ってないかをチェックする ===
あちこちのサイトで流出したパスワードは集められてデータベース化されダークネットに流通しています。この代表的なものには2019年に登場した [[:w:en:Collection No. 1|Collection #1]] が挙げられます。この Collection #1 などの流出パスワードデータベースは辞書攻撃に利用されており、これは「Credential Stuffing攻撃」と呼ばれています。
使うパスワードが流出パスワードデータベースに載っていないかを確認するためには上記のデータベースを手に入れるか、上記のデータベースからk-匿名性で検索を行うオンラインサービスを使うと良いでしょう。
このオンラインサービスの代表的なものにはWebサイト「Have I Been Pwned」の提供する「Pwned Passwords」サービスが存在しますが、このAPIではパスワードのSHA-1ハッシュ先頭5文字を渡すと、流出したパスワードのSHA1ハッシュ6文字以降と流出データベースに載っていた回数が返答されます。
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # パスワードを入力してSHA-1ハッシュへと変換する(ここでは'test'と入力)
$ sha1=$(read -sp "Password: " pass && echo -n $pass | sha1sum | cut -d' ' -f1)
Password:
$ # 変換後のハッシュを表示
$ echo $sha1
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ # ハッシュの先頭5文字を渡して6文字目以降を検索(':'の後ろは見つかった数)
$ curl -s https://api.pwnedpasswords.com/range/$(echo $sha1 | cut -c 1-5) | grep -i $(echo $sha1 | cut -c 6-)
FE5CCB19BA61C4C0873D391E987982FBBD3:1579235
</syntaxhighlight>
ハッシュの先頭5文字も渡したくない場合や、自社サービスでチェックを行いたい場合は上記のサービスが公式で提供するツール「haveibeenpwned-downloader」[https://github.com/HaveIBeenPwned/PwnedPasswordsDownloader]で全てのハッシュデータをダウンロードして自前で照合しましょう。
=== 解析耐性のある鍵導出関数を使う ===
パスワードでは計算負荷の低い SHA-256 や SHA-512 などの通常のハッシュ関数、メモリ負荷の低い [[:w:PBKDF2|PBKDF2]] や bcrypt などの古い[[:w:鍵導出関数|鍵導出関数]](パスワードハッシュ関数)を使わないようにしましょう。これらの弱いハッシュ関数は GPU や ASIC で高速に解かれてしまいます。
より強いパスワードハッシュ関数としては yescrypt や Argon2id が存在します。パスワードにはこちらを使いましょう。現代の Linux ではアカウントのパスワードハッシュ関数として yescrypt が標準となっています。
使っている Linux の新規アカウントで使われるパスワードハッシュ関数は以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ grep -n 'pam_unix.so' /etc/pam.d/common-password
26:password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
</syntaxhighlight>
Linuxの現在のアカウントがどのハッシュ関数を使用しているかは以下で確認可能です:
<syntaxhighlight lang="shell-session">
$ sudo cat /etc/shadow | grep $USER # $(1|5|6|b)$=弱い、$y$=強い
user:$y$j9T$ST7oYwlQjFy7/8vnL/Ugt0$po4vW4qgGu8lpUNRtH0B3hDHGZACzcRhzIKhqlx.2Z5:20743:0:99999:7:::
</syntaxhighlight>
弱いハッシュ関数を使用している場合は<code>passwd $USER</code>でパスワードを再設定して使用するハッシュ関数を更新してください。
一方、Windows 10 以前のローカルアカウントではパスワードハッシュがレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>(ユーザーID)\<wbr>V</code>{{efn|name="sam"}}のバイナリの以下の場所に存在します:
* [[:w:LMハッシュ|LMハッシュ]]: 0xCC + (0x9C に指定されたオフセット)<ref name="sam-ghost"/>
* NTLMハッシュ: 0xCC + (0xA8 に指定されたオフセット)<ref name="sam-ghost"/>
LMハッシュは [[:w:LAN Manager|LAN Manager]] に使われていた [[:w:Data Encryption Standard|DES]] ベースの古いハッシュ、NTLMハッシュは [[:w:NT LAN Manager|NT LAN Manager]] に使われている [[:w:MD4|MD4]] ベースの古いハッシュであり、どちらも非常に弱いものとなっていました。
また Windows の Active Directory ドメインアカウントのオフライン認証向けキャッシュ済みドメイン資格情報はレジストリの<code>HKEY_LOCAL_MACHINE\<wbr>SECURITY\<wbr>Cache</code>に存在します:
* DCC1 ハッシュ (MSCache v1): 弱い MD4 ベース。Windows XP以前。
* DCC2 ハッシュ (MSCache v2) : 弱めの PBKDF2-HMAC-SHA1 ベース。Windows Vista以後<ref>[https://attack.mitre.org/techniques/T1003/005/ OS Credential Dumping: Cached Domain Credentials] MITRE 2025年10月24日</ref>。
2021年にリリースされた Windows 11 以降は Microsoft アカウントが必須となっています。
<!--TODO:
Windows Hello、LSA Secrets
=== パスワードの複雑性をチェックする ===
=== TPMで鍵を隔離する ===
-->
== 既製製品の脆弱性を塞ぐ ==
まずは弱いところを無くしましょう。
=== ソフトウェアアップデートをする ===
セキュリティの基本はソフトウェアアップデートです。
==== PCおよびモバイル ====
PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います:
; Windows
: システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade --all</code>コマンドで行います。
: また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。
; macOS / iOS
: 「ソフトウェアアップデート」
; Ubuntu / Debian
: [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。
: Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。
: また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の「Livepatch」も可能となります(個人では5台まで無料)。SUSEではユーザー空間ライブパッチングまで提供されています(glibc と openssl のみ)<ref>[https://documentation.suse.com/ja-jp/sles/15-SP6/html/SLES-all/cha-ulp.html ユーザ空間ライブパッチ - 管理ガイド - SLES 15 SP6] SUSE</ref>。
; RedHat / Fedora
: <code>yum update</code>コマンド
; Android
: 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」
また個々のハードウェアのファームウェアアップデートは以下で行います:
; Linux
: Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。
: NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。
一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。
<!--
また開発環境では以下も存在します:
; Python
: <code>pip -U install</code>
-->
==== ルーター ====
ルーターでは以下の設定を有効のままにしておきましょう:
; AirStationシリーズ(Buffalo 製ルーター)
: 「ファームウェア自動更新機能」
; Atermシリーズ(NEC 製ルーター)
: 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」
==== テレビ ====
テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。
=== 高速に再起動する ===
パッケージは更新しただけでは反映されません(一部デーモンの更新を除く)。Linuxでは高速に再起動する方法が存在し、これによってダウンタイムを減らすことができます。
; 更新で影響を受けるデーモンのみ再起動する
:* Ubuntu Server: 標準で <code>needrestart</code> が導入されており自動で影響を受けるデーモンの再起動が行われます{{efn|自動的なデーモン再起動を止めるには /etc/apt/apt.conf.d/99needrestart より<code>-m u</code>を削除する必要があります<ref>[https://discourse.ubuntu.com/t/needrestart-changes-in-ubuntu-24-04-service-restarts/44671 `needrestart` changes in Ubuntu 24.04: service restarts] Canonical 2024年</ref>。}}(Ubuntu Desktopでは別途導入が必要)。
:* RedHat / Fedora: <code>dnf needs-restarting</code>が導入されており、それによって再起動するべきデーモンを確認できます。
; ユーザー空間のみ再起動する(カーネルの更新がない、またはカーネルでlive patchingを行ってる場合)
: <code>sudo systemctl soft-reboot</code>
; 高速にカーネルを更新する(ファームウェアの更新がない場合)
: <code>sudo systemctl kexec</code>
また一部のソフトウェアではホットアップグレード(無停止アップグレード{{efn|Zero-Downtime Upgrade}})にも対応しています (nginx の USR2 シグナル<ref>[https://nginx.org/en/docs/control.html Controlling nginx] nginx</ref>など)。
=== 代替ソフトウェアを探す ===
更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。
==== 開発終了したソフトウェアから現役のソフトウェアへ ====
古いソフトウェアには例えば以下があります:
* オフィススイート(代替候補: LibreOffice)
** [[:w:OpenOffice.org|OpenOffice.org]](〜2011年)
* 画像ビューア
** [[:w:Susie|Susie]] (〜2013年)
* メディアプレイヤー
** [[:w:QuickTime|QuickTime]] for Windows(〜2016年) - リモートコード実行の脆弱性 ([https://www.zerodayinitiative.com/advisories/ZDI-16-241/ ZDI-16-241]、[https://www.zerodayinitiative.com/advisories/ZDI-16-242/ ZDI-16-242]) を残したままサポート終了しました<ref>[https://internet.watch.impress.co.jp/docs/news/753400.html Apple、「QuickTime for Windows」のサポートを終了、アンインストールを推奨] Impress 2016年4月15日</ref>。
* メディアフィルター(代替候補: LAV Filters)
** [[:w:ffdshow|ffdshow]](〜2014年)
** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年)
* メディアセンター(代替候補: Kodi)
** [[:w:en:Boxee|Boxee]](〜2011年)
** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身
* 圧縮ソフトウェア
** [[:w:+Lhaca|+Lhaca]](〜2007年)
** [[:w:Lhaplus|Lhaplus]](〜2017年)
またハードウェアに由来する古いソフトウェアには例えば以下があります:
* [[w:ウォークマン|ウォークマン]]関連(代替候補: [[:w:Music Center for PC|Music Center for PC]])
** [[:w:CONNECT Player|CONNECT Player]](〜2007年、Sony)
** [[:w:SonicStage|SonicStage]](〜2009年、Sony)
** [[:w:x-アプリ|x-アプリ]](〜2016年、Sony)
* DTCP-IP関連
** SmartVision/PLAYER powered by DiXiM(〜2019年、NEC)<ref>[https://support.nec-lavie.jp/navigate/support/info/2019/announce/svp/ SmartVision/PLAYER保守サービス終了のお知らせ] NECパーソナルコンピュータ 2019年1月28日</ref><ref>[https://apps.microsoft.com/detail/9wzdncrdkb4c?hl=ja-JP&gl=JP SmartVision/PLAYER powered by DiXiM] Microsoft</ref>
** DiXiM Digital TV plus for I-O DATA(〜2022年、I-O DATA)<ref>[https://www.iodata.jp/lib/product/d/3533.htm DiXiM Digital TV plus for I-O DATA] I-O DATA</ref>
なお仮想マシンを使って隔離しながら古いソフトウェアを動かすこともできますが、仮想マシンでも「VMエスケープ」の脆弱性を使用することでホスト環境への侵害が可能なため、仮想マシンの上で弱い環境や弱いソフトウェアを使うこともなるべく避けましょう。<!--TODO: Windows Sandbox-->
==== 古いバージョンのライブラリを避ける ====
多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。-->
* 画像ライブラリ
** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性)
** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性)
** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性)
** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性)
** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性)
* 動画ライブラリ
** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性)
* 圧縮ライブラリ
** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性)
** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性)
** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性)
これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。
また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています:
* UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref>
Webフレームワークでは開発中止となった以下のフレームワークが問題となっています:
* [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]])
** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語
* [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]])
** [[:w:Seasar|Seasar]](〜2016年) - Java言語
* [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]])
** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript
=== 古いハードウェアに対処する ===
サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これには使い続けるいくつかの方法がありますが、基本的にオススメしません。古い OS を搭載していたハードウェアはハードウェア仕様も古いからです。
==== スタンドアロン運用 ====
古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。
しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。
==== 新しめのLinuxを導入 ====
新しめのLinuxを導入するという方法もあります。
これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。
またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。
==== 手放す ====
手に負えなければデータだけバックアップして手放しましょう。情報が漏れないよう初期化も忘れずに。
== 不要なサービスを止める / 削除する ==
{| class="wikitable"
|+ サービス表示系コマンド
|-
! 稼働中のシステムサービスを見る
| <code>systemctl --type=service --state=running</code>
|-
! 稼働中のユーザーサービスを見る
| <code>systemctl --user --type=service --state=running</code>
|}
=== TCP/UDP経由のサービス ===
TCP/UDPでのポート待ち受けのあるプロセスを見るには <code>sudo ss -tulnp</code> を、通信しているプロセスを見るには <code>sudo lsof -i -P -n</code> を実行しましょう。
{| class="wikitable"
|+ 主なポート待ち受けのあるプロセス
|-
! ポート !! 機能 !! プロセス名 !! サービス名または起動コマンド !! パッケージ名 (Ubuntu) || 直接問い合せコマンド
|-
| rowspan=2 | 53/UDP<br>53/TCP || rowspan=2 | DNS(名前解決) || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>dig @127.0.0.53 example.com</code>
|-
| dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>dig @10.208.199.1 example.com</code>
|-
| rowspan=2 | 5353/UDP || rowspan=2 | [[:w:マルチキャストDNS|マルチキャストDNS]] || systemd-resolved || systemd-resolved.service || systemd-resolved || <code>resolvectl -p mdns query $HOSTNAME.local</code>
|-
| Avahi || avahi-daemon.service || avahi-daemon || <code>avahi-resolve-host-name $HOSTNAME.local</code>
|-
| 67/UDP<br>547/UDP || [[:w:DHCP|DHCP]]<br>[[:w:DHCPv6|DHCPv6]] || dnsmasq || dnsmasq.service<br/>dnsmasq@.service || dnsmasq-base<br>dnsmasq || <code>IP=$(ip -4 -o addr show pan1 | grep -oP '(?<=inet )[\d.]+'); sudo dhcping -v -i -s "$IP" -c "$IP"</code>{{efn|Ubuntuではdhcpingパッケージの導入が必要です。}}
|-
| rowspan=2 | 68/UDP<br>546/UDP || rowspan=2 | DHCPクライアント<br>DHCPv6クライアント{{efn|単独のDHCPクライアントである dhclient、dhcpcd なども存在する。また開発終了になったisc-dhcp-clientも存在した。}} || systemd-networkd<wbr>{{efn|name="network-all"}} || || systemd ||
|-
| NetworkManager<wbr>{{efn|name="network-all"|ネットワーク管理全般を担当しています。}} || NetworkManager.service || network-manager ||
|-
| rowspan=2 | 123/UDP<br>4460/TCP || rowspan=2 | NTP(時刻同期)<br>NTS-KE (NTPの鍵交換){{efn|これらの代替として systemd-timesyncd もありますが、こちらは NTP の代わりに単純な SNTP のみ実装の上、サーバーを持たずクライアント側のみ対応です。}} || ntpd || ntpsec.service || ntpsec || rowspan=2 | <code>ntpdig localhost</code>{{efn|ローカルへのNTP問い合せは<code>ntpdate -q localhost</code>でもできますが、こちらはNTP-KE非対応です。}}
|-
| chronyd || chrony.service || chrony
|-
| 80/TCP<br>443/HTTP<br>443/UDP || HTTP<br>HTTPS<br>HTTP/3 (QUIC) || apache2 || apache2.service<br>apache2@.service<br>httpd.service<br>httpd@.service || apache2 || HTTP: <code>curl http://localhost</code><br>HTTPS: <code>curl --http2 https://localhost</code><br>HTTP/3: <code>curl --http3-only https://localhost</code>
|-
| rowspan=2 | ユーザーポート/UDP || rowspan=2 | HTTP/3 (QUIC) クライアント<br>WebRTCクライアント || chrome{{efn|Google Chrome}} || <code>google-chrome</code> || google-chrome (公式APTリポジトリ) ||
|-
| firefox{{efn|Mozzila Firefox}} || <code>firefox</code> || firefox (snap) ||
|-
| 5001/TCP<br>5001/UDP || rowspan=2| ネットワークパフォーマンス計測 || iperf || <code>iperf -s</code> || iperf || <code>iperf -c localhost</code>
|-
| 5021/TCP<br>5021/UDP || iperf3 || <code>iperf3 -s</code> || iperf3 || <code>iperf3 -c localhost</code>
<!--
|-
| 6881/TCP || BitTorrent || || || ||-->
|-
| 1716/UDP<br>1716/TCP<br>ユーザーポート/UDP || スマートフォン連携 (KDE) || kdeconnectd || <code>kdeconnect-app</code> || kdeconnect ||
|-
| ユーザーポート/TCP || Claude Proxy Service || code{{efn|[[:w:Visual Studio Code|Visual Studio Code]]のプロセス。}} || <code>code</code> || code (公式APTリポジトリ) ||
<!--
|-
| || AI コーディング支援 (Google Antigravity CLI{{efn|Command Line Interface}}) || agy || || (Visal Studio Code拡張) ||
-->
|-
| rowspan=2 | 3389/TCP<br>3389/UDP || rowspan=2 | Remote Desktop Protocol || gnome-remote-desktop-daemon{{efn|GNOME Remote Desktop}} || gnome-remote-desktop.service<!-- (system)--><br>gnome-remote-desktop.service (user)<br>gnome-remote-desktop-headless.service (user) || gnome-remote-desktop ||
|-
| krdpserver || app-org.kde.krdpserver.service (user) || krdp ||
|-
| 47984/TCP<br>47989/TCP<br>48010/TCP<br>47998–48010/UDP || NVIDIA GameStream || sunshine || app-dev.<wbr>lizardbyte.<wbr>app.<wbr>Sunshine.service (user) || sunshine (公式debファイル) || (moonlight-qt)
|-
| 27031-27036/UDP<br>27036/TCP || Steam Remote Play<ref>[https://help.steampowered.com/ja/faqs/view/2EA8-4D75-DA21-31EB Steam接続に必要なポート] Valve</ref> || steam || <code>steam</code> || steam (公式APTリポジトリ) ||
|}
<!--TODO: UPnP、CUPS、Postfix、Samba、Wsdd-->
=== Unix Domain経由のサービス ===
Unix Domainでのポート待ち受けのあるプロセスを見るには <code>sudo ss -xlp</code> を実行しましょう。
=== dbus経由のサービス ===
システムバスは <code>busctl --system list</code>、セッションバスは <code>busctl --user list</code> で確認することができます。
それらを提供する実行中のプロセスの一覧は以下で取得できます:
* システムバスを提供するプロセス: <code>busctl --system --no-pager | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
* ユーザーバスを提供するプロセス: <code>busctl --user --no-pager | awk 'NR>1 && $2 ~ /^[0-9]+$/ {print $2}' | xargs -I {} readlink "/proc/{}/exe" | sort -u</code>
dbusサービスの一部はプロセス未実行のアクティベータブル (activatable) な状態で提供されています。アクティベータブルな状態で提供するサービスの実行コマンドは以下で取得できます:
* activatableなシステムバスの実行コマンド: <code>busctl --system --no-pager --activatable | awk '{print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service" | xargs grep -h "Exec=" | sed 's/Exec=//g' | sort -u</code>
* activatableなユーザーバスの実行コマンド: <code>busctl --user --no-pager --activatable | awk '{print $1}' | xargs -I {} find /usr/share/dbus-1 -name "{}.service" | xargs grep -h "Exec=" | sed 's/Exec=//g' | sort -u</code>
== 潜在的な脆弱性を減らす ==
現代のプログラムでは以下のような保護が行われています。
=== メモリアドレスの推測困難化 ===
攻撃に必要なコード片(ガジェット)のメモリアドレスを推測しにくくするために、カーネル空間、ユーザー空間の両方で[[:w:アドレス空間配置のランダム化|アドレス空間配置のランダム化]](ASLR)が行われています。カーネル空間の ASLR は KASLR (Kernel ASLR) とも呼ばれています。
ユーザー空間のプログラムで ASLR を有効にするためには[[:w:位置独立コード|位置独立コード]] (PIC) / 位置独立実行形式 (PIE) である必要があります。Unix で使われる実行形式の ELF では位置独立実行形式が ET_DYN、非位置独立実行形式 (non-PIE) が ET_EXEC となります。
Linuxでは ASLR が無効となる非位置独立実行形式のファイルを以下で検索することができます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 非位置独立実行形式 (non-PIE) のバイナリを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}'
/usr/lib/default.sfx
/usr/lib/klibc/bin/mkfifo
/usr/lib/klibc/bin/zcat
/usr/lib/klibc/bin/poweroff
[...]
$ # 非位置独立実行形式 (non-PIE) のバイナリを含むDebianパッケージを検索
$ find / -type f -executable 2>/dev/null | xargs -I {} sh -c 'LANG=C readelf -h {} 2>/dev/null | grep -E "Type:.*EXEC" >/dev/null && echo {}' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
aidl
busybox-static
code
cpp-15-x86-64-linux-gnu
cuda-gdb-13-4
cuda-nvcc-13-4
cuda-sanitizer-13-4
cuda-tileiras-13-4
debugedit
g++-15-x86-64-linux-gnu
gcc-15-x86-64-linux-gnu
gcc-mingw-w64-i686-posix
gdc-15-x86-64-linux-gnu
gds-tools-13-4
gfortran-15-x86-64-linux-gnu
gh
git-lfs
gobjc-15-x86-64-linux-gnu
gocryptfs
golang-1.26-go
go-md2man
go-mtpfs
[...]
</syntaxhighlight>
現在のLinuxカーネルがユーザー空間 ASLR を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ sysctl kernel.randomize_va_space # 0=無し、1=部分的、2=完全
kernel.randomize_va_space = 2
</syntaxhighlight>
また現在のLinuxカーネルがカーネル ASLR (KASLR) を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_RANDOMIZE_BASE' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_RANDOMIZE_BASE=y
</syntaxhighlight>
なお ASLR は間接的な関数呼び出し( C++ の vtable を含む)があると、そのアドレスから ASLR のオフセットがバレてしまい突破されてしまいます。
また CPU の[[:w:投機的実行|投機的実行]]での情報漏れ (Spectre) による[[:w:キャッシュ攻撃|キャッシュサイドチャネル攻撃]](後述)の一つである「投機的探査」 (BlindSide) によってもコードの位置情報の取得がされ ASLR が突破されてしまいます。
=== 投機的実行の情報漏れ防止 ===
前述のとおり、投機的実行による情報漏れ (Spectre) は攻撃に繋がります。Spectre には境界チェックを迂回する Spectre V1 と間接分岐の分岐先アドレスのキャッシュ{{efn|分岐先バッファ (Branch Target Buffer、BTB)や分岐先アドレスキャッシュ (Branch Target Address Cache、BTAC) と呼ばれる。}}を汚染する Spectre V2 が存在します。<!--TODO: Spectre v3/v4、Zenbleed-->
Spectre V1 を防ぐ方法としては投機的実行を阻害するための命令(x86ではLFENCE)の挿入{{efn|Linuxカーネルでの投機的実行の防止は<code>barrier_nospec()</code>。}}やアクセスできるアドレス範囲を狭めることが行われています{{efn|GCCでの投機的実行での範囲外アクセス防止は<code>__builtin_speculation_safe_value(...)</code>、Linuxカーネルでの投機的実行での範囲外アクセス防止は<code>array_index_nospec(...)</code><ref>[https://lwn.net/Articles/759423/ Spectre V1 defense in GCC] LWN 2018年7月10日</ref>。}}。
また Spectre V2 では攻撃を防ぎながらも速度を落とさない方法として脆弱な分岐先アドレスキャッシュに依存する間接分岐の代わりにリターンアドレスのキャッシュ{{efn|リターンスタックバッファ (RSB) と呼ばれる。}}に依存するリターン命令を使う retpoline が登場しました。しかしながらこの retpoline でも速度の低下は起こるため、既知の間接呼び出しを条件分岐 + 直接呼び出しに変換して高速化する手法が模索されました。LLVM では retpoline を有効にする <code>-mretpoline</code>フラグの処理内に既知の仮想関数呼び出しを[[:w:二分木|二分木]]の直接分岐に置き換える「分岐ファネル」(Branch funnel) が導入されています<ref>[https://reviews.llvm.org/D42453 Use branch funnels for virtual calls when retpoline mitigation is enabled.] LLVM project</ref>。また Linux カーネルでも既知の間接呼び出しを条件分岐 + 直接呼び出しに変換する INDIRECT_CALL_* マクロが搭載されています<ref>[https://lwn.net/Articles/774743/ Relief for retpoline pain] LWN 2018年12月14日</ref>。<!--TODO: Intel CETのSHSTKとretpolineの衝突-->
一方、リターン命令の投機的実行も「Retbleed」や AMD CPU における「投機的リターンスタックオーバーフロー」 (SRSO){{efn|Speculative Return Stack Overflow。}}のような脆弱性が見つかっています。
なお低権限コードから高権限コードへの権限境界をまたいだ Spectre および Retbleed は Intel の「間接分岐制限付き投機」(IBRS){{efn|Indirect Branch Restricted Speculation。}}およびそれを高速化した「拡張IBRS」(eIBRS) などハードウェア側によって塞がれました<ref>[https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/technical-documentation/hardware-behavior-related-to-speculative-execution.html Hardware Features and Behavior Related to Speculative Execution] Intel 2026年10月14日</ref>が、権限境界をまたがないものは今も可能となっています。
=== メモリにおける書き込みと実行の排他化 (W^X) ===
メモリでは書き込み可能領域の実行不可化 ([[:w:NXビット|NXビット]]) と実行可能領域の書き込み不可化による書き込みと実行の排他化([[:w:en:W^X|W^X]])が一般的となっています。NXビットは x86 では NXビットは AMD64 と共に搭載された古い機能であるため、今時の CPU と OS は基本的にこれに対応しています。
現在の CPU がNXビットを有効にしているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -o nx
nx
nx
[...]
</syntaxhighlight>
現在のLinuxカーネルが厳格な W^X を有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep '_RWX' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y
</syntaxhighlight>
しかしながら書き込みと実行の排他の原則を破ってそれらを同時に行える場所というものも存在しています。読み込み・書き込み・実行が可能なことから「RWXセクション」と呼ばれています。Windows ではメモリページの PAGE_EXECUTE_READWRITE フラグがこれに相当します<ref>[https://learn.microsoft.com/ja-jp/windows/win32/memory/memory-protection-constants メモリ保護定数] メモリ保護定数 (WinNT.h) - Win32 apps | Microsoft Learn</ref>。
Windows のカーネルドライバでは NX フラグの使用が義務付けられています<ref>[https://learn.microsoft.com/en-us/windows-hardware/test/hlk/testref/driver-compatibility-with-device-guard メモリ整合性と VBS とのドライバ互換性] Microsoft</ref>が、その Windows カーネルにおいても PatchGuard の領域がコード難読化のためにこの原則を破っています。<!--TODO: ホットパッチ-->
また Linux でも実行可能領域を書き込み可能ページとして割り当てて書き込む text_poke 関数が用意されています。
=== 制御フローの操作を防ぐ (CET) ===
現代では「[[:w:Return-oriented programming|リターン指向プログラミング]]」(ROP)、「呼び出し指向プログラミング」 (COP)、「ジャンプ指向プログラミング」(JOP) 、「[[:en:Sigreturn-oriented programming|Sigreturn指向プログラミング]]」(SROP) などの制御フロー操作による攻撃が一般化していますが、これを防ぐ技術として「[[:w:en:Control-flow integrity#Intel Control-flow Enforcement Technology|制御フロー強制テクノロジー]]」(CET) の「[[:w:en:Indirect branch tracking|間接分岐追跡]]」(IBT) と「[[:w:en:Shadow stack|シャドウスタック]]」(SHSTK) が存在します。
制御フロー強制は比較的新しい技術であるため、対応する CPU は以下に限られます:
* Intel Core (Tiger Lake) 第11世代以降
* AMD Zen 3 以降(シャドウスタックのみ)
現在の CPU が間接分岐追跡 (IBT) およびシャドウスタックに対応しているかはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ grep '^flags' /proc/cpuinfo | grep -oE '(ibt|shstk)'
shstk
ibt
shstk
ibt
[...]
</syntaxhighlight>
またユーザーランドのシャドウスタックの使用にはユーザーランドだけでなくカーネルの対応も必要となります。Linux カーネル では 6.6 以降対応でこれに対応しています(sigreturnにも対応<ref>[https://github.com/torvalds/linux/commit/05e36022c0543ba55a3de55af455b00cb3eb4fcc x86/shstk: Handle signals for shadow stack · torvalds/linux@05e3602] GitHub 2023年8月3日</ref>)。 Linuxディストリビューションでは Ubuntu 24.04以降、 Red Hat Enterprise Linux 9.7 以降<ref>[https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.7_release_notes/new-features-kernel 4.8. カーネル - 9.7 リリースノート - Red Hat Enterprise Linux - 9 - Red Hat Documentation] Red Hat</ref>が標準でシャドウスタックを有効としています。
現在のLinuxカーネルが間接分岐追跡およびシャドウスタックを有効にしているかは以下で確認できます (出力例はUbuntu 26.04):
<syntaxhighlight lang="shell-session">
$ grep -E '_(IBT|SHADOW_STACK)' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set
CONFIG_X86_USER_SHADOW_STACK=y
CONFIG_X86_DISABLED_FEATURE_IBT=y
CONFIG_ARCH_HAS_USER_SHADOW_STACK=y
</syntaxhighlight>
現在のユーザーランドプログラムの中で間接分岐追跡またはシャドウスタックが無効化されているものはLinuxでは以下で確認できます:
<syntaxhighlight lang="shell-session">
$ # License: CC0 / Public Domain
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")'
/usr/lib/lv2/carla.lv2/carla.so
/usr/lib/7zip/7z
/usr/lib/7zip/7zCon.sfx
/usr/lib/7zip/7zr
/usr/lib/7zip/7z.so
/usr/lib/7zip/7za
/usr/lib/klibc/bin/ipconfig
/usr/lib/klibc/bin/umount
/usr/lib/klibc/bin/halt
[...]
$ # 間接分岐追跡またはシャドウスタックが無効化されているバイナリを含むDebianパッケージを検索
$ find / -type f 2>/dev/null | xargs -I {} sh -c 'readelf -h "{}" >/dev/null 2>&1 && (readelf -n "{}" 2>/dev/null | grep -E IBT,.*SHSTK > /dev/null || echo "{}")' | xargs -r -d '\n' -n1 dpkg-query -S | sed 's/: .*//' | sort -u
7zip
aidl
ardour
avr-libc
cargo-1.93
carla
carla-bridge-wine32:i386
carla-bridge-wine64
carla-lv2
carla-vst
cuda-ctadvisor-13-4
cuda-cudart-13-4
[...]
</syntaxhighlight>
なお、制御フロー強制テクノロジーの間接分岐追跡とシャドウスタックが有効であっても異なる関数の通常呼び出しは防げません。分かりやすい例では関数の間接呼び出しにおいて関数ポインタを<code>sigaction</code>へと変更して独自のシグナルハンドラを登録し、その後クラッシュさせてそのシグナルハンドラを呼び出すという「セグメンテーション違反指向プログラミング」(SFOP) が挙げられます。また攻撃に使える関数 (dop gadgets) {{efn|dop gadgetsの検索の公式実装は「DOP-StaticAssist」[https://github.com/melynx/DOP-StaticAssist]だが長らく更新されておらず古いLLVM 3.5に依存している状態となっている。}}の通常呼び出しだけで攻撃する「Data-Oriented Programming」(DOP) <ref>Hong Hu et al. [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7546545 Data-Oriented Programming: On the Expressiveness of Non-Control Data Attacks] IEEE 2016年</ref>{{efn|セキュリティ以外の文脈におけるデータ指向プログラミング、データ指向設計、データ駆動型設計とは異なる。}}という手法も存在します。
C++向けでは仮想関数テーブル (vtable) を改ざんして攻撃に使える仮想関数(仮想関数ガジェット、vfgadget)を呼び出す「偽造オブジェクト指向プログラミング」(COOP) という攻撃手法も登場しています。
=== メモリ安全性の高いソフトウェアへ ===
既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています:
{| class="wikitable"
|+ コマンドのRust版
|-
! コマンドの概要 !! 従来版 !! Rust版
|-
| Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils'''
|-
| ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils'''
|-
| ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils'''
|-
| ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed'''
|-
| AWKスクリプト || GNU AWK || '''uutils AWK'''
|-
| 文字列検索 || GNU Grep || '''uutils Grep'''
|-
| tarアーカイブ || GNU Tar || '''uutils tar'''
|-
| アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils'''
|-
| アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl'''
|-
| procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps'''
|-
| ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname'''
|-
| Linuxユーティリティ || util-linux || '''uutils util-linux'''
|-
| 権限昇格 || sudo || '''sudo-rs'''
|-
| 暗号・署名システム || GnuPG || '''Sequoia PGP'''
|-
| 時刻同期 || ntpd || '''ntpd-rs'''
|-
| セキュアシェル (SSH) || OpenSSH || '''russh'''
|}
これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。
またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています:
* 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。
** libpng → pngクレート - PNG画像向け。
** libgif → gifクレート - GIF画像向け。
** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。
** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。
** libtiff → tiffクレート - Tiff画像向け
** libwebp → image-webpクレート - WebP画像向け。
** libraw → libopenraw - RAW画像向け。
** librsvg - SVG画像向け。C言語からRustに書き直しされました。
* 圧縮ライブラリ
** zlib / zlib-ng → zlib-rs - Deflate圧縮向け
** libbzip2 → bzip2-rs - BZ2圧縮向け
* 暗号化ライブラリ
** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]]
* Unicode処理ライブラリ
** ICU4C → ICU4X
* テキスト整形ライブラリ
** HarfBuzz → HarfRust
* ブラウザエンジン
** Blink/Gecko → Servo
<!--
=== 整合性チェック ===
PatchGuard / HyperGuard
-->
== 不審な改変が行われていないかを調べる ==
例えばOSの起動には一連のシーケンスがありますが、マルウェアは基本的にここの途中に入り込んで永続化します。
{| class="wikitable"
|+ 起動シーケンス
|-
! 種類 || Windows 11以降 !! Linux (Gnome) !! Linux (KDE)
|-
| 1. 起動ファームウェア || [[:w:Unified Extensible Firmware Interface|UEFI]] || colspan=2 | [[:w:Basic Input/Output System|レガシーBIOS]] / UEFI
|-
| 2. ブートローダー || [[:w:Windows Boot Manager|Windows Boot Manager]] (bootmgfw.efi)<br> → [[:w:Windows Boot Manager#winload.exe/winload.efi|Windows OS Loader]] (winload.efi) || colspan=2 | GRUB{{efn|Ubuntuの標準。}} / systemd-boot / Unified Kernel Image{{efn|Linuxカーネルとブートイメージを単一バイナリにする仕組み。}} / EFI boot stub{{efn|LinuxカーネルをEFIから直接ブートできるようにする仕組み。}}
|-
| 3. カーネル || [[:w:ntoskrnl.exe|ntoskrnl.exe]] || colspan=2 | Linuxカーネル ([[:w:vmlinux|vmlinux]]{{efn|圧縮後はvmlinuzとなる。}})
|-
| 4. 初期化プロセス || [[:w:en:Session Manager Subsystem|smss.exe]]<br> → wininit.exe<br> || rowspan=2 colspan=2 | [[:w:systemd|systemd]]{{efn|以前は代替initもよく使われていたが、今はsystemdが標準となっている。}}
|-
| 5. サービスコントロールマネージャ || colspan=2 | [[:w:en:Service Control Manager|services.exe]]
|-
| rowspan=2 | 6. ログインマネージャ || rowspan=2 | [[:w:Winlogon|winlogon.exe]] || colspan=2 | systemd-logind<br>sd-pam
|-
| [[:w:GNOME ディスプレイマネージャー|GDM]] || [[:w:Simple Desktop Display Manager|SDDM]]
|-
| rowspan=2 | 7. ユーザー初期化プロセス || rowspan=2 | userinit.exe || colspan=2 | systemd
|-
| gnome-session || kcminit<br> → plasma_session
|-
| 8. シェル || [[:w:Windows Explorer|explorer.exe]] || gnome-shell || plasmashell
|-
| 9. コンポジタ || [[:w:Desktop Window Manager|dwm.exe]] || mutter || kwin
|}
また起動シーケンス以外にもアップデートシーケンスへの感染やシェル感染、ブラウザ感染もあります。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>*
|-
| [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1
|}
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル
|-
! 規格/アプリケーション !! ユーザー !! システム
|-
| POSIX標準 || ~/.profile || /etc/profile
|-
| XDG Base Directory<wbr>標準 || ~/.local/bin/* ||
|-
| FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab
|-
| LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/*
|-
| Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/]{{efn|systemd-xdg-autostart-generator が導入されているシステムではこれらがsystemd設定に自動変換される。}} || ~/.config/autostart/* || /etc/xdg/autostart/*
|-
| Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout
|-
| Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout)
|-
| Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/*
|-
| Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/*
|-
| Wayland || || /usr/share/wayland-sessions/*
|-
| Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}}
|-
| Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}}
|}
=== パッケージ管理ファイルを検証する ===
パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です:
{| class="wikitable"
|-
! OS / パッケージシステム !! 検証のみ !! 修復
|-
| Windows || <code>sfc /verifyonly</code> || <code>sfc /scannow</code>
|-
| Debパッケージ (Debian / Ubuntu) || <code>debsums -s</code> || <code>apt install --reinstall $(debsums -cs | xargs -r dpkg-query -S | cut -d: -f1 | sort -u)</code>
|-
| RPMパッケージ (RedHat / Fedora) || <code>rpm -Va</code> ||
|}
ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法-->
自動的にシステムの検証を行うシステムも存在します:
* Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref>
<!--
またUbuntuのSnapパッケージでもdm-verityの導入が進められています。
また特定言語のパッケージの検証は以下で可能です:
* PIP (Python): なし
-->
=== システム領域に不審なファイルが追加されていないかを調べる ===
システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します:
* Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド)
上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。
またaptレポジトリに無いインストールされたパッケージは<code>apt list '?obsolete'</code>で、手動 (manual) でインストールされたパッケージは<code>apt-mark showmanual</code>で確認できます。これらのコマンドを実行してインストールした覚えないパッケージが入ってないかをチェックしましょう。GUI が使えるのであれば<code>synaptic</code>を起動して「インストール済(ローカルまたは廃止)」と「インストール済(手動)」を確認するのもオススメです。
=== ユーザー領域に不審なファイルが追加されていないかを調べる ===
ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く-->
共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります:
{| class="wikitable"
|+ 代表的なユーザースクリプトや拡張機能のディレクトリパス
|-
! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス
|-
| Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/
|-
| GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/
|-
| Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender's Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/
|-
| Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/
|-
| LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/
|-
| Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/
|}
=== 改変・追加されたファイルが危険かを調べる ===
実行ファイルやスクリプトはLinuxでは以下で検出できます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)'
/etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable
/etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable
/usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped
</syntaxhighlight>
またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます:
<syntaxhighlight lang="shell-session">
# cat filelist.txt | xargs clamscan
Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 1s, ETA: 0s [========================>] 41/41 tasks
/etc/apt/apt.conf.d/00trustcdrom: OK
/etc/apt/auth.conf.d/90ubuntu-advantage: OK
/etc/apt/keyrings/google.asc: OK
[...]
----------- SCAN SUMMARY -----------
Known viruses: 3628164
Engine version: 1.5.4
Scanned directories: 125
Scanned files: 1919
Infected files: 0
Total errors: 10
Data scanned: 247.72 MiB
Data read: 281.17 MiB (ratio 0.88:1)
Time: 17.939 sec (0 m 17 s)
Start Date: 2026:10:11 05:41:30
End Date: 2026:10:11 05:41:48
</syntaxhighlight>
=== 設定データベースを検証する ===
設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。
Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。
{| class="wikitable"
|+ Windows における代表的なユーザースクリプト、コマンド起動、DLL呼び出しが可能なレジストリ
|-
! 規格/アプリケーション !! 各ユーザー !! 全ユーザー
|-
| Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}}
|-
| [[:w:en:Security Account Manager|Security Account Manager]] || || HKEY_LOCAL_MACHINE\<wbr>SAM\<wbr>SAM\<wbr>Domains\<wbr>Account\<wbr>Users\<wbr>*\<wbr>V{{efn|name="sam"|'HKEY_LOCAL_MACHINE\SAM\SAM\' 以下はレジストリエディタの右クリックの「アクセス許可」で Administrators にアクセス許可を与えないと読めない。なおファイルパスは「C:\Windows\System32\config\SAM」。}}{{efn|Vはバイナリであり、0xCC + (0x60 に指定されたオフセット) からユーザーログオンスクリプトパスを指定する<ref name="sam-ghost">Sebastián R. Castro et al. [https://dl.acm.org/doi/pdf/10.1145/3689934.3690839 Ghost in the SAM: Stealthy, Robust, and Privileged Persistence through Invisible Accounts] ACM 2024年</ref>。}}
|-
| [[:w:en:Local Security Authority Subsystem Service|Local Security Authority Subsystem Service]] || || HKEY_LOCAL_MACHINE\<wbr>System\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Notification Packages<br>HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>Control\<wbr>LSA\<wbr>Authentication Packages<ref>[https://attack.mitre.org/detectionstrategies/DET0207/ Detect LSA Authentication Package Persistence via Registry and LSASS DLL Load] MITRE Corporation</ref>
|-
| [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath<ref>[https://attack.mitre.org/techniques/T1547/014/ Boot or Logon Autostart Execution: Active Setup] MITRE Corporation</ref>
|-
| [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>*
|-
| [[:w:Winlogon|Winlogon]] || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Notify<ref>[https://attack.mitre.org/techniques/T1547/004/ Boot or Logon Autostart Execution: Winlogon Helper DLL] MITRE Corporation</ref>
|-
| [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ
|-
| [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}}
|-
| [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}}
|}
Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。
{| class="wikitable"
|+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定
|-
! 規格/アプリケーション !! ユーザー
|-
| GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command
|-
| Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}}
|-
| MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}}
|-
| mate-applets || /org/mate/panel/objects/object-*/prefs/command
|-
| mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command
|}
なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。
=== メディアに不審なファイルが追加されていないかを調べる ===
メディアの自動実行 ([[:w:en:AutoRun|AutoRun]]) ファイルにもマルウェアが紛れてないか注意しましょう。
{| class="wikitable"
|+ メディアの自動実行ファイル
|-
! Windows !! Linux<br>(Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/])
|-
| *:\[[:w:autorun.inf|autorun.inf]] || /media/*/*/.autorun<br>/media/*/*/autorun<br>/media/*/*/autorun.sh<br>/run/media/*/*/.autorun<br>/run/media/*/*/autorun<br>/run/media/*/*/autorun.sh
|}
== 改変を防ぐ ==
改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。
改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。
=== ファームウェア改ざんを防ぐ ===
ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情-->
なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。
また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。
Intel MEのバージョンはLinuxでは以下のような感じに調べることができます:
<syntaxhighlight lang="shell-session">
$ cat /sys/class/mei/mei0/fw_ver
0:16.1.32.2473
0:16.1.32.2473
0:16.1.27.2181
</syntaxhighlight>
=== ブートローダー改ざんを防ぐ ===
ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。
UEFI Secure Boot が有効かどうかは以下で確認できます:
* Windows PowerShell: <code>Confirm-SecureBootUEFI</code>
* Linux: <code>mokutil --sb-state</code>
UEFI db と UEFI dbx の内容は以下で確認できます:
* Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code>
* Linux:
** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code>
** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code>
ブートローダーの署名情報は以下で確認できます:
* Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}}
* Linux: <code>sbverify --list</code>
例えば Windows PowerShell では以下のような感じです:
<syntaxhighlight lang="powershell">
PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D }
Thumbprint Subject
---------- -------
FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
</syntaxhighlight>
また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります:
<syntaxhighlight lang="shell-session">
$ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け)
2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed
f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed
b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
$ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用)
b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI
$ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
Signature verification OK
</syntaxhighlight>
なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。
<!--TODO:
TPM (Trusted Platform Module) チップ
-->
=== カーネル本体の改ざんを防ぐ ===
カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。
なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます:
<syntaxhighlight lang="shell-session">
$ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する
signature 1
image signature issuers:
- /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
image signature certificates:
- subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1)
issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority
$ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する
Signature verification OK
</syntaxhighlight>
=== カーネルモジュールの改ざんを防ぐ ===
カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。
カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます:
* Linux: <code>grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r)</code>
カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます:
* Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode
* Linux: <code>cat /sys/module/module/parameters/sig_enforce</code>
また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です:
<syntaxhighlight lang="shell-session">
$ grep 'CONFIG_MODULE_SIG=' /boot/config-$(uname -r) # y=Yes, n=No
CONFIG_MODULE_SIG=y
$ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No
N
$ sudo dmesg | grep 'module verification'
[ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel
$ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint
[...]
$ sudo sh ./kernel-chktaint
Kernel is "tainted" for the following reasons:
* externally-built ('out-of-tree') module was loaded (#12)
* unsigned module was loaded (#13)
Raw taint value as int/string: 12288/'G OE '
Tainted modules:
* nvidia (OE)
* nvidia_drm (OE)
* nvidia_modeset (OE)
* nvidia_uvm (OE)
For a more detailed explanation of the various taint flags see
Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources
or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
</syntaxhighlight>
また Linux では以下のような感じで個々のモジュールの署名が確認できます:
<syntaxhighlight lang="shell-session">
$ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst
filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst
license: GPL
description: x86 generic MSR driver
author: H. Peter Anvin <hpa@zytor.com>
srcversion: 639B995855A3528050FD532
depends:
intree: Y
name: msr
retpoline: Y
vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F
sig_hashalgo: sha512
signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C:
4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17:
0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB:
[...]
</syntaxhighlight>
=== システムファイル改ざんを防ぐ ===
システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。
1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。
そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。
一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。
=== カーネルメモリ改ざんを防ぐ ===
カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。
また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。
<!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor-->
<!--
=== アプリケーション改ざんを防ぐ ===
SELinux / AppArmor
-->
== 攻撃用AIを対策する ==
攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。
=== コンテキスト爆弾を設置する ===
攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。
このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。
コンテキスト爆弾のテキスト例は以下のリポジトリに存在します:
* https://github.com/tracebit-com/context-bombs
=== ハニーポット ===
ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。
<!--
== 自作コードの脆弱性を塞ぐ ==
書きかけ
-->
== 脚注 ==
<references group="注釈"/>
== 参考文献 ==
<references/>
{{DEFAULTSORT:こんひゆうたせきゆりてい}}
[[Category:計算機科学]]
[[Category:情報技術]]
foonhhahb2cf8s8cj8awbf3pni6zisy