hotchpotch/wikipedia-multilingual-ir-pairs huggingface dataset:
林業 歴史
明治維新後には御林は新政府に引き継がれ、現在の国有林の原型となった。プロイセン（ドイツ）の林業に学んだ林学者松野礀が東京山林学校を設立し、本多静六や、緒方道平、志賀泰山、中村彌六 ・高島得三らが森林の育成に従事した。1873年のウィーン万国博覧会では、和風建築を含む出品物が人気を博した。
戦時中には乱伐により山林が荒廃した。多くの山林が伐採されたままとなった。
ところが戦後にはアメリカ合衆国軍の軍需に見合う輸出用合板の生産が求められ、その原料のラワン材、また米国・ソ連製の丸太・製材品の輸入を拡大せざるを得なくなった。
1950年代には燃料消費の変化で木炭消費量が減少し、原木から製炭を行う山村の過疎化を招いたが、一方で同じ原木から生産するきのこ栽培が普及した。
他方1955年以降（昭和30年代）には高度経済成長に伴い、林業が振興されて復旧造林が行われ、燃料消費構造の変革により利用価値の小さくなった薪炭林や老齢過熟の天然林が、生産性の高いスギ・ヒノキなどの人工林に転換されたり（拡大造林）、奥地林の開発が行われた。また、チェーンソーや集運材機など高性能な林業機械、林地除草剤の普及による技術革新で伐採や集材、地ごしらえや下草刈りなどの省力化が図られ素材生産量は飛躍的に増大し、優良樹を選別して育成する品種改良も行われた。1956年（昭和31年）には森林開発公団が発足した。
林業 歴史
1964年（昭和39年）には、林業生産の増大を定めた森林・林業基本法が制定されたが、その逆に、それまでは国産材の不足分を補う位置づけであった外材の丸太は、輸入関税が撤廃された。そのため1965年以降（昭和40年代）、安い外材は石油に次ぐ輸入量となり、木材価格の低迷が生じた。加えて、山村の過疎・高齢化、労賃高騰などの影響を受けて日本の林業は衰退に向かった。
そのこともあり、昭和40年代後半の土地ブームでゴルフ場開発が多発し、都市環境の過密化や公害の問題から、森林の公益的機能への関心や環境保全運動が高まり、自然保護団体の運動が行われるようになった。1978年（昭和53年）には森林組合法が設置されるに至った。
1981年には国内木材消費9476万m3のうち、6296万m3（66％）が外材であった。さらに同年には建築基準法改定が行われ、これに対応できない国産材が住宅メーカーに敬遠されるようになり、日本の住宅の多くが、北欧などの輸入材で建てられるようになった。日本の林業は1980年代から1990年代にかけても非常に衰退した。
林業 歴史
1997（平成9）年度から2001（平成13）年度まで、農林水産省は農林家経営動向調査を実施した。「農林統計に用いる地域区分」の「中間農業地域」及び「山間農業地域」に所在する販売農家（経営耕地面積30a以上または農産物販売金額50万円以上の農家）及び保有山林面積20ha以上の林家を対象とした。2000（平成12）年度には、中山間地域等直接支払制度（傾斜などの農業生産条件が不利な地域において、5年以上農業を続けることを約束した農業者の方々に対して、交付金を交付する制度）が創設された。
2013年には、輸入製材の70％はカナダからの輸出品であり、輸入合板の90％以上はマレーシアからの輸出品である。このため、拡大造林政策で植林されたスギ・ヒノキが大量に山に取り残されており、スギ花粉症の原因として槍玉に上がっている。
一般社団法人日本森林学会が日本林業史の顕彰目的で、2013年に林業遺産選定事業を開始した。
林業 歴史
1910年ごろには漕運船の需要やオンドルの普及により森林の枯渇が進行しており、大日本帝国朝鮮総督府は、毎年3億本を植林する造林政策を実施したが、その費用と負担は民間の山林所有者らに転嫁されたと言われている。日中戦争（1937年）の勃発による乱伐により再び森林は枯渇し、戦後の1973年から治山緑化10カ年計画が実施され16年間で205万haに49億本の苗木が植えられた。「第二次大戦後、山林復旧に成功した唯一の開発途上国」（国連食糧農業機関、1982年）という評価を得ている。
以下、製材会社（営林会社）をあげる。
19世紀のアメリカでは、北西部の森林地への投資により林業が発達した。ジョージ・パック・ジュニアはニューヨーク州からミシガン州に移住し、720エーカーの森林を購入して製材所を経営し初め、1860年代はミシガン州の製材産業の黄金時代となった。1870年には変わってウィスコンシン州が栄えた。オークレア、マラソン、フォンデュラク、ラクロスなどに併せて80以上の製材所が設けられた。1880年には再びミシガン州でサギノーが木材生産の頂点となった。北西部の木材生産量が年間最大となったのは、北部諸州全体でストローブマツ85億フィートを生産した1890年である。
林業 歴史
また、コネチカット州は、1637年の英領植民地の設置から1850年にかけ、森林被覆率が90%以上から30%まで下がっていた。そこでドイツに学んだ農学者ウィリアム・ブリュワーらは森林保護の概念を広め、1900年初頭には森林長官ハウズ（Austin F. Hawes ）をトップとする州立林業協会が州保護林の確保と運用を開始した。次いで南部諸州の林業が発達して、1910年代には南部諸州生産量は北部諸州のほぼ2倍に成長した。
ミシガン州のパック氏は3代目のチャールズ・パックも林業を継承しており、第一次世界大戦の際にはアメリカ人大富豪の上位5名の中に含まれている。第二次世界大戦後は、米国国防省が日本の、米国国務省が台湾の林業法を策定して森林資源の再建を推進したが、4代目のランドルフ・パックはこれを支援した。
また、 森林王と言われたフリードリヒ・ヴァイヤハイザーが1900年に西海岸ワシントン州で設立したヴァイヤハイザー社は現在、米国で500万ha、カナダで570万haを営林している。
マレーシアでは現在、サムリング・グループ（Samling、128万haを経営） 、RHグループ（100万ha）、シン・ヤン・グループ（Shin Yang、50万ha）、タ・アン・グループ（Ta Ann、43万ha）、WTKグループ（35万ha）の、6大森林経営会社があり、これらの合計372万ヘクタールが商業森林地となっている。
林業 木材貿易
中国は広葉樹丸太輸入量が世界輸入量の39％を占めるが、2020年の輸入量はコロナ禍の影響で落ち込んだ。一方、針葉樹製材輸入量は、2010年から2020年までに10百万m3から2.8倍に増加した。主にロシアから輸入されている。ただ、豪州産木材でのキクイムシ発生と、2022年からのロシア側の輸出規制により、他地域から年間1300万m3程度の丸太調達が必要になっており、EUから中国向けの輸出丸太が増加している。
日本から中国向けの輸出丸太はフェンス材に加工され米国へ輸出されていたが、2020年に米国が中国からの輸入を規制したため日本でも輸出の伸びがやや落ちている。他方でベトナムから米国への合板輸出が増加している。
2021年から2022年のウッドショックでは世界的に木材価格が高騰したが、製材価格は2022年後半から、素材価格は2023年度から下落傾向にある。2024年8月の円高の影響も見込まれる。
林業 日本の林業
林業で行われる森林の育成や管理は施業（せぎょう）とよばれ、経営と森林に対する行為とが一体のものとして扱われる。これは、森林に対する伐採や植栽などの行為を、いつ、どれだけ、どのように行うかにより、将来収穫される木材の量や質（＝収入）が決定されることに由来する。
日本の林業は国際競争の激化による木材価格の低下、そして時代に対応した製材品を供給するための投資を怠ったことから競争力を失い、森林の手入れも充分ではなくなっているために、森林の保全が叫ばれている。日本森林の荒廃は、水源涵養機能や表面侵食防止機能などの公益的機能を低下させ、その損害は周辺の住民全体が被ることになる。
日本の木材自給率は2020年で41.8%と、森林の豊富な国としては低い。主因は、日本の木材生産の多くが急峻な斜面で行われていることによるコストの高さ、過疎化や3Kといった理由による後継者不足により、日本の林業が不振であることによる。ただし、環境規制の強化や需給逼迫により国際的な木材価格は高騰しており、自給率は2002年の18.8%から上昇傾向にある。既に国産材の価格は高品質な北欧材・北米材の価格を大きく下回っており、合板用材に占める国産材の割合が急増している（製材品は高品質が求められるため、北欧材などに比べ低品質な国産材の需要はなかなか回復していない）。
林業 日本の林業
国勢調査によれば、1985年に12万6343人いた林業従事者は、2020年には4万3710人まで減少し続けている。ただ、2003年から始まった緑の雇用事業により、新規就業者数が増加し、現在は年3千人前後で推移している。
特用林産物は農林家の収入源として大きな役割を果たしておりその約95%を栽培きのこ類や山菜類などの食用が占める。日本では2000年から2020年頃まで林業産出額の中で林産物と同等の比率があったが、近年は木材の価格高騰から林産物の比率が高まっている。
近年では、徳島県の海部森林組合において、労働災害の虚偽報告や労働安全衛生法違反が指摘されるなど、森林組合における労働問題も注目されている。
保有山林面積1ヘクタール以上の世帯を林家（りんか）と呼ぶ。多くの自治体では固定資産税課税標準額が30万円未満であれば、その山林には固定資産税がかからない。
2020年の世帯数は約69万戸で保有山林面積の合計は約459万haとなっている。
5年ごとに行う「2015年世界農林業センサス」の調査時に比べ世帯数は約14万戸、面積は約58万ha減っている。
林業 日本の林業
「林業経営体」とは、自己又は他人の保有する森林において、事業主自身または直接雇用している作業職員又は他者への委託により造林、育成、生産等の林業生産活動を行っている経営体で、以下のいずれかに該当する者である。
林業経営体の数は、2020年で約3.4万経営体、保有山林面積約332万haである。このうち、家族で経営を行い法人化していない「個人経営体」の数は約2.8万経営体で、林業経営体の約8割を占め、残りを「組織経営体」である森林組合、民間事業体（林業事業体）などが占めている。
森林組合と民間事業体は、主に森林所有者等からの受託若しくは立木買いによって造林や伐採等の作業を担っているが、5年ごとに行う「2015年世界農林業センサス」の調査時に比べ経営体は約5.3万経営体、面積は約105万haと大幅に減っている。
林野庁が実施した「緑の雇用」アンケートによると、年収は林業経験年数と賃金の水準を比較すると、林業経験年数が10年以下の者では年収（手取り）250から300万円がおよそ3割で最も多く、11年以上の者では350から400万円がおよそ3割となっている。
林業 日本の林業
合法木材供給を維持する制度としては、各地域木材産業共同組合が連合した各都道府県の木材（産業）共同組合連合会が、事業者認定団体として設けられている。林業経営と製材所経営を兼ねる企業や、林業経営と市場経営を兼ねる企業もある。
林産物とは山林で生産される生産物のこと。
特用林産物とは、森林や原野から得られる産物のうち一般木材を除いたものの総称。昔は「林野副産物」や「特殊林産物」、「樹芸」
などとも呼ばれていた。
林野庁中部森林管理局長の新島俊哉は以下の主張をしている。
林業 日本の林業
2017年7月時点では、樹齢の分布が10齢級を頂点とする釣り鐘形である。このままでは林業技術が伝承できないばかりか、進歩も止まる。100年はかかるであろう、植え付けから伐採まで毎年一定量の事業がある姿にしていくのが望ましい。その際、3つの点が重要である。まず森林所有者の意識を変える必要がある。所有者の特定が困難な森林が多数存在するとともに、森林からもうけが出ないため、森林を資産と考えない所有者も多い。例えば国有林が、木が高く売れ再造林する価値があるという成功例を示すことなどにより、森林所有者の意識を変えていく必要がある。第二に森林は木材という経済財であるとともに環境財でもあるという認識を持たなければならない。1945年の枕崎台風や1959年の伊勢湾台風など水害で数千人の死者・行方不明者が出たのは、森林が育っていない時期に当たる。主伐をして再造林されなければ裸地が増加し、同様な惨事を繰り返すことになる。それには都市住民に上流域の木をしっかり使うという意識を持ってもらうことが重要である。第三に林業が「業」として成り立つには徹底したコスト縮減が必要ということだ。従来は伐採から植林まで3年かけていたが、最近は1年で完了する伐採・造林一貫作業が広がってきた。さらに木材産業と連携し消費者までのサプライチェーンを築くべきである。国産材は安い外国材に苦戦しているといわれるが、2017年7月時点では国産スギよりも競合する外国のホワイトウッドの方が高い。主伐が増えサプライチェーンが構築できれば、国産材の需要も高まり評価も上がる。要するに、山にお金が戻る仕組みを確立し伐採から再造林への循環を作ることが求められる。
林業 作業・道具
伐倒
古来は三ツ紐伐り（三ツ緒伐り）と呼ばれる方法が使われていたが、チェンソーの導入でほぼ使われなくなった。神社などに用いる木材には三ツ紐伐りが使用される場合もある。
集材
マーカー
間伐する木の選定用
輸送
木材流送などの水の流れを利用して送り出された。
材木の移動などに馬などが利用され、内燃機関の発展によってチェンソーなどが発明されたが、それらの作業を複数同時に行える高性能林業機械が発明されるようになった。
集材
クラッカー (コンピュータセキュリティ)
クラッカー (cracker) とは、コンピュータネットワークに不正に侵入したり、破壊・改竄などの悪意を持った行為、すなわちクラッキング（悪意を持ったハッキング）を行う者のこと。最近はセキュリティ・ハッカーと呼ばれることが多い。
クラッカー (コンピュータセキュリティ) 概要
クラッカーの多くはアマチュアであり、往々にして愉快犯的にコンピュータにダメージを与えて喜ぶ稚拙な精神性がうかがえるが、ある種のフラストレーション発散の発露であるケースも散見される。特に技術程度の低い向きには、他のクラッカーが製作した攻撃用のプログラムやスクリプトを利用して興味本位でクラッキングを行う者もあるが、これらはさらに軽蔑され得る対象として、スクリプトキディ（ソフトやスクリプト使いのお子様）という呼び方もある。
現在では企業のコンピュータシステムのセキュリティを検査するため、依頼されて意図的にシステム侵入を試みるプロフェッショナルのクラッカーも存在するとも言われるが、これらは後述の通り、ハッカーの範疇に含まれると考えられている。
なお、行為としてのクラッキングに関しては通信機器やコンピュータ製品のメーカーが自社製品の安全性をアピールする意味で、懸賞金付きまたは技術的競技としてクラッキング・コンテストが開催されることもある。
クラッカー (コンピュータセキュリティ) ハッカーとの区別
クラッカーは「コンピュータ技術に長けている者」という意味で混同されやすいが、その技術を生産（善意）的なことに利用するハッカーとは区別される。しかしマスコミではクラッカーのことを「ハッカー」と呼んでおり、「ハッカー」=「悪」というイメージが刷り込まれているのが現状といえる。
正しい意味でのハッカーをホワイトハット・ハッカー、クラッカーをブラックハット・ハッカーと呼ぶこともある。
クラッカー (コンピュータセキュリティ) プロクラッカー
一般的なクラッカーのイメージとは別に、主にロシアやハンガリーといった旧共産圏において、大学（院）において情報系を専攻したものの、自国に十分な職の受け皿がなく、就職するまでの繋ぎ・あるいは本職としてクラッキングを行うプロのクラッカーが存在する。主な仕事として銀行から情報を盗み出したり、クライアントの敵会社から機密情報を持ち出すといった非合法な活動であることが多い。
彼らの技術力は極めて高度であると言われ、稚拙なスクリプトキディとは一線を画している。その技術力が買われ、警察に逮捕されたりクラッカーを卒業した後、アンチウイルスソフトウェアを扱う会社や国家の情報局などに勤めることが多い。
プロクラッカーの一部は、IRCや会員制のウェブサイトなどでお互いに情報を交換しておりそういった場所から流出した一部のツールや情報がスクリプトキディに利用されている。上記のロシアでは、クラッキングを学ぶ専門学校まで存在している（表向きはセキュリティを学ぶ学校）。
クラッカー (コンピュータセキュリティ) クラッカーの一覧
フィクション上では、「ハッカー」と呼ばれる事が多い。
あくまでもフィクションの中での悪役側のクラッキングは現実同様、犯罪行為として扱われるが物語の主役や主役の協力者がクラッカーである場合、犯罪者やテロリストが所有するコンピューターへのクラッキングが中心となる者や、不正を働く体制側のコンピューターをクラッキングする者など、アンチヒーローとして扱われることもある。
ハッカー
ハッカー (hacker) またはクラッカーとは主にコンピュータや電気回路一般について常人より深く高度な技術的知識を持ち、その知識を利用して技術的な課題をクリアする人々のこと。
ハッカー 概要
HACK とは、『ハッカー英語辞典(The HACKER'S DICTIONARY)』によれば、「必要なものを、それほど手際よくではないが、何とかでっちあげるためのやっつけ仕事」とある。また、同書によると HACKER とは「コンピュータシステムの細部や、その能力の伸ばし方を楽しむ人。必要最低限しか勉強したがらない大多数のコンピュータ・ユーザと対照的である。」と述べられている。
ハッカー 概要
日本産業規格 JIS X 0001-1994 においては、「高度な技術をもった計算機のマニア。」(01.07.03) と「高度の技術をもった計算機のマニアであって、知識と手段を活用して、保護された資源に権限をもたずにアクセスする人。」(01.07.04) という2種類の定義を行っている。定義が分かれている理由は、使用されている年代によってその意味が異なるからである。古くはコンピュータが普及していなかった1960年代から使用されてきた。『HACKERS』（スティーブン・レビー著）などによると、一説には hacker という言葉が現在と近い意味で使われはじめたのは、1960年代に、マサチューセッツ工科大学の鉄道模型クラブ (w:Tech Model Railroad Club) においてであると言われている。現在ではコンピュータ技術に長けた人物のことを指す用法がほとんどだが、元々この単語には本来「雑だが巧く動く間に合わせの仕事をする」、「斧ひとつだけで家具を作る能力のある職人」、「冷蔵庫の余り物で手早く料理を作る」というニュアンスで日常生活でも一般に使われるものだった。
このハッカーの語源としての hack は「石橋を叩いて渡るような堅実な仕事ぶり」とは対極に位置していて、機転が利いてちょっとした仕事を得意とする人物を hacker と呼ぶ。したがって、この言葉は、大規模な開発プロジェクトを何年にもわたって指揮してきた優秀なソフトウェア技術者に対して使用されるものではない。ハッカーとは極めて個人的な属性に基づいた呼称であり、その人物の「間に合わせのアイデア」や「閃き」を重視した言葉である。スティーブン・レビーは、この「ハックする」が、マサチューセッツ工科大学の鉄道模型クラブにおいて、ちょっとした微笑をもたらすいたずらとして使用されているうちに、コンピューターの内部を覗いたり、応急処置で技術対応する人間をいつしか、ハッカーと呼ぶように変化していったさまを述べている。
ハッカー 用法の二極化
ネットワークでは、ペネトレーションテストによってセキュリティを突破することが行われ、セキュリティホールを発見する専門家がいる。また、セキュリティを突破し、侵入した証拠を残すなどの方法で相手にセキュリティホールを知らせるなど、義賊的な互助精神的文化が存在していた。
ハッカー 用法の二極化
しかし、情報化社会の急速な進展に伴って、悪意のためにそれらの行為を行う者が増え、社会的に問題とされるに至った今日では、コンピュータウイルスなどのマルウェアを作成したりすることも含まれるようになり、このような行為をする者を「ハッカー」と呼ぶようになった。こうした誤用は近年では問題視され、コンピュータを使って悪事をはたらく者をクラッカー (cracker) あるいはシーフ(盗人、泥棒)と呼んで区別することで、「ハッカー」という呼称を中立的な意味で再定義しようとする試みが盛んになった。しかし、クラッカーと呼ぶにふさわしいネットワーク犯罪者が、新聞などマスメディアにおいてカタカナ語で「ハッカー」と表記されている。また、このような試みを行う者自身がハッカーではなく、さらにそれらの人々が自分の主観だけでハッカー像を語ることが多いので、再定義に成功しているとはいえない。アメリカでは報道において cracker が使われることは非常に稀であって hacker が一般的であり、中国においては意味と英語の音声を訳したもの黒客（読みはヘイクー）という漢字が一般的に使われている。
ハッキングの元祖は、1970年代にアメリカの公衆電話回線網の内部保守システムに介入する方法を発見した「キャプテン・クランチ」ことジョン・T・ドレーパーであると言われているが、正確にはコンピュータへのハッキングではない。しかし、所有者である電話会社に無断で電話通話料を払わずに公衆電話回線を利用することは、セキュリティの意識が低い所有者自身にも問題があるとはいえ、このようなハッキング行為自体は違法であるとの解釈もある。
「How To Become A Hacker」を執筆したエリック・レイモンドは、英語が母語であるか否かは関係なく、ハッカーとして活動する上での前提条件として、誤りの少ない整った文章が書ける程度の英語能力が必要であるとしている。一定の英語能力が必要な理由として、一般的なハッカーは「英語がハッカー文化やインターネットでの作業用言語であり、誤りの多い文章しか書けない者は相手をする価値がないヘボい思考の持ち主であることが多い。」と考えているため、としている。
ハッカー ハッカーの本来の意味
ハッカーの本来の意味についてはしばしば議論が起こる。
ハッカーたちにとって、「ハッカー」という言葉の本来の意味は、「プログラム可能なシステムの細かい部分を探ったり、その機能を拡張する方法を探究したりすることに喜びを感じる人」、「熱中してプログラミングする人、プログラミングを楽しむ人」、「ハック価値en:Hack valueを認識できる人」、「手早くプログラミングするのが得意な人」、「ある特定のプログラムのエキスパート、または頻繁にそれを使って仕事をする人」、「任意の種類のエキスパートまたは熱狂的なファン」、「創意工夫を発揮して制約を打破したり回避したりすることを知的な難問として楽しむ人」などであり、「あちこち調べまわって機密情報を探り出そうとする悪意の詮索好き」という定義は誤用であるとされる。1985年には、本来のハッカーという言葉の意味を、マスコミの誤った使い方から守ろうと、「クラッカー（cracker）」という言葉が作られた。
また、「How To Become A Hacker」(ハッカーになるための方法)の著作者であるエリック・レイモンドによると、「ハッカー」とは何かを創造するものであり、クラッカーとは何かを破壊するものであるとのこと。また、「ハッカー」であることを声高に名乗るものほど「クラッカー」である可能性が高いとも語っている。
ハッカー ハッカーの本来の意味
とはいえ英語圏でハッキング被害などが報道される際は、メジャーなメディア、マイナーなメディアを問わず、ほぼ全てにおいてhackerあるいはhackという単語が使用されており、逆にcrackerという言葉が使われるケースはまずない。crackという単語に関しては特定の防壁やプロテクトシステムを破るようなケースに限定して使われることは比較的多いが、「侵入する」という意味で使われることは英語圏では非常に少なく、その場合はやはりhackが常用されている。
昔は「ハッカー」という言葉はほぼ「クラッカー」の意味で使われていると考えられていた。しかし現在は「ハッカー」と「クラッカー」は別なものであると考えられている。
ハッカー 類語
オールマイティにさまざまなコンピュータ技術に通じる人々の総称。映画などの影響もあり、しばしばネットワークに侵入したり、ウイルス作成などを行う人物全般をさす場合もある。これをクラッカーと使い分けるべきという意見も特に日本では比較的多く見られるが、実際にはアメリカの大手セキュリティ企業を初め、米国主要メディア各社の報道でもハッカーという単語が常用されているのが現実で、映画のようなイメージのハッキング行為を行う人物をハッカーと呼ぶことは決して誤用ではない。ハッカーは単にネットワークの知識だけに秀でている人物を指す言葉であると誤解する人も多いが、ソフトウェア設定(レジストリや応用ソフトの設定ファイル・隠し機能など)やプログラミングなど他の分野で非常に高い知識を有している人物もハッカーと呼ばれるケースがある。また、リバースエンジニアリングなどソースコード解析などもハッキングの範疇である。稀にハッカー以上の技術者を ウィザード wizard や グル guru と呼称することもある(例えばLinuxカーネルの開発者 リーナス・トーバルズは、しばしばグルと呼ばれる)。セキュリティコンテストなどでは生産的な(善意的な)ハッカーをホワイトハットハッカー (White_hat_(computer_security)) といい犯罪者気質のハッカーをブラックハットハッカーなどと区別し、ホワイトハットハッカーを育てようという活動も各国に見られる。
ハッカー 類語
クラッカー cracker、kracker
情報の破壊や不当な複製、アクセス制御の突破など、不正な利用を行う者に対する総称。主にコンピュータウイルスのような不正行為を目的とするアプリケーションを作成したり、リバースエンジニアリングを悪用する場合は、クラッカーに含まれる。なお、リバースエンジニアリングを悪用する者を「kのクラッカー」として区別する場合がある。
アタッカー attacker
アクセス制限の突破やその制御機能の破壊を特に好むクラッカー。インターネット上のサーバ等のバグを不正目的において探す者、DoS攻撃などの物量攻撃を行う者などを指す。
ヴァンダル vandal
アタッカーのうち、広義の荒らし（ヴァンダリズム、vandal、vandalism）をする者をこう呼ぶことがある。インターネットなどのネットワークを主な標的とし、機能そのものを直接的に破壊するのではなく機能（含まれる欠陥を含む）をそのまま使って情報のやり取りを阻害する者。DoS攻撃やメールボム、スパム投稿などを行う。後述するスクリプトキディであることも多い。
フリーカー phreaker
電話回線に精通するクラッカー。送話器から一定の周波数を送信したりクレジットカードを悪用したりして不正な通話を行う者などを指す。
スクリプトキディ script kiddy
ハッカー 類語
不正行為において、他者の真似事を好むクラッカーの総称。不正目的に作成されたアプリケーションの利用者、不正に複製された商用アプリケーションの複製者及び配布者など。マスコミで報道される多くの事件においての首謀者は、往々にしてスクリプトキディであることが多く、後述するワナビであることも多い。
ワナビ wannabe
コンピュータのうち、特にパーソナルコンピュータにおいてのハイレベルユーザーであるとともに、不正行為にある程度興味を持つ人物、もしくは知ったかぶりをするような人物。元は、「ハッカーになりたがる馬鹿」（"I wanna be a hacker"）から。日本語における俗語の「厨房」に近い意味合いで使われることも多い（この場合は、より蔑称的なヌーブ noob が使われることが多い）。不正に複製されたアプリケーション等の利用者、匿名コミュニティにて活動する自称ハッカーなど。
ニュービー newbie
コンピュータ技術に興味を持ち始めた素人・学習者。「ワナビになったばかりの馬鹿」（ new wannabe ）もしくは「新米」（ new boy ）から転じた。さらに転じてnewb，noobとも呼ばれる。ニュービーの中には好奇心からハッカーコミュニティで取るに足らない質問を連発する人がいる。これに対する対応はハッカーによって異なり、無視したり軽蔑したりする人もいれば、時間をかけて質問につきあう人もいる。その末路もさまざまであり、中途半端な知識の習得で満足してワナビと呼ばれるようになる人もいれば、きちんと知識を習得して正真正銘のハッカーになる人もいる。
ブラックハッカー black hat hacker
悪意を持ち、サイバー攻撃などを行うハッカー。hatを省略するのは日本特有の表記であるとされる。:「攻撃者（attacker）」への言い換えが提案されている。
ホワイトハッカー、善玉ハッカー white hat hacker
善意を持ち、技術を善良な目的に利用するハッカー。hatを省略するのは日本特有の表記であるとされる。:「攻撃的なセキュリティ研究者（offensive security researcher）」への言い換えが提案されている。
ハッカー ハッカーの一覧
クラッキングをするキャラクターは、「クラッカー (コンピュータセキュリティ)#フィクションに登場するクラッカー」を参照。
バッファオーバーフロー
バッファオーバーフロー（英: buffer overflow）またはバッファオーバーラン（英: buffer overrun）は、コンピュータのプログラムにおけるバグのひとつ、またはそれにより引き起こされる現象で、プログラムがバッファに割り当てられた空間よりも大きなデータを書き込むことで、データがバッファ境界からあふれ、バッファの範囲外のメモリを上書きし、元々そのメモリにあったデータを破壊してしまうことを指す。
バッファオーバーフローは、上書きされるメモリ領域がスタック領域なのかヒープ領域なのかに応じてそれぞれスタックベースのバッファオーバーフロー、ヒープベースのバッファオーバーフローと呼ばれる。なお、名称が似ているスタックオーバーフローとは別の現象である。
サイバーセキュリティ・情報セキュリティの分野では、バッファオーバーフローはメモリ破壊系の脆弱性の一つとして知られ、攻撃者がバッファオーバーフロー脆弱性のあるプログラムに意図的に悪意のあるデータ（コード）を与えることにより、コンピュータの制御を乗っ取ってしまうことを可能にする。バッファオーバーフロー脆弱性を悪用した攻撃をバッファオーバーフロー攻撃という。
バッファオーバーフロー バッファオーバーフローの具体例
以下の例では、プログラム中の隣接したアドレスに2つのデータ項目が定義されている。一つは 8 バイトの文字列バッファ A、もう一つは 2 バイトの整数 B である。初期状態では、A は 0 で初期化されており可読な文字は入っていない。また、B には整数 1,979 が格納されている。文字のバイト幅は 1 バイトとする。また、エンディアンはビッグエンディアンとする。
ここで、プログラムがバッファ A にヌル終端文字列「excessive」を書きこもうとした場合を考える。文字列の長さチェックが行われていないと、この処理で B の値が上書きされてしまう。
プログラマとしては B を変更する意図はなかったが、B の値は文字列の一部で置き換えられてしまった。この例ではビッグエンディアンとASCIIコードを仮定しているため、文字「e」とゼロというバイト列は整数 25,856 として解釈される。ここで、仮にプログラム中で A と B 以外にデータ項目変数が定義されていないとものすると、さらに長い文字列を書き込んで B の終端を超えた場合にはセグメンテーション違反などのエラーが発生してプロセスが終了する。
バッファオーバーフロー バッファオーバーフローの具体例
コンピュータプログラムを作るとき、固定長のバッファとよばれる領域を確保してそこにデータを保存するという手法がよく使われる。
たとえば、電子メールアドレスは200文字を超えないだろうと予想して
これがバッファオーバーフローである。仮にはみ出した部分にプログラムの動作上意味を持つデータがあれば、これを上書きして破壊することにより、プログラムはユーザの意図しない挙動を示すであろう。
このようにバッファオーバーフローは、プログラムが用意したバッファの大きさを超えてデータを書き込んでしまうバグである。
C言語の標準入出力関数であるgets関数はバッファ長のチェックを行わないで標準入力をバッファに書き込むので、この関数を使う全てのプログラムには、バッファオーバーフローによる不正動作の危険性がある。また使い方が分かりやすいという理由でC言語初心者向けの入門プログラミングでしばしば用いられるscanf関数も書式指定を誤った場合は同じ危険性を持っている。これらの関数を実用的なプログラムで用いる場合には注意が必要である。
バッファオーバーフロー バッファオーバーフローの具体例
次のプログラムはgets関数を用いた例である（セキュリティ上、gets関数はそれ自体をテストする以外の目的で使用されるべきではない。Linux Programmer's Manualには「gets()は絶対に使用してはならない」と書かれている）。バッファ長として200バイト確保されている。gets関数はバッファの長さについては関知しないため、200バイトを超えても改行文字かEOFが現れなければバッファオーバーフローが発生する。
gets関数の代わりにfgets関数を用いることで、この問題を回避できる（fgets#getsを置き換える例等を参照）。fgets関数にはバッファのサイズを渡すことができ、このバイト数を超えてバッファに書き込みを行わない。したがってバッファサイズが正しく設定されていれば、fgets関数においてバッファオーバーフローは起こり得ない。
これ以外のC言語の標準文字列処理関数の多くにも同様の問題（脆弱性）がある。
バッファオーバーフロー バッファオーバーフロー攻撃
情報セキュリティ・サイバーセキュリティにおいてバッファオーバーフロー攻撃は、バッファオーバーフローの脆弱性を利用した攻撃である。バッファオーバーフローの脆弱性は整数オーバーフロー、書式文字列バグ、Use-After-Freeなどと同様、メモリ破壊系の脆弱性に相当する。
共通脆弱性タイプCWEには、
などが登録されており、これら3つはいずれも「CWE-119: メモリバッファの境界内における操作の不適切な制限」に属している。
これら3つのバッファオーバーフロー脆弱性が頻繁に生じるのはC言語やC++であり、古典的バッファオーバーフローはアセンブリ言語でも生じる。
これら3種類のバッファオーバーフローはセキュリティポリシーの外側で任意のコードを攻撃者に実行可能にする事が頻繁にある。さらに任意のコードの実行により他のセキュリティサービス機構を破壊する事も可能になる。またこれら3種類のバッファオーバーフローはクラッシュの原因にもなるので、意図的にクラッシュさせる攻撃が可能になる。
CWEでは「CWE-193: Off-by-oneエラー」がバッファオーバーフローの原因になると述べられており、整数オーバーフローもバッファオーバーフローの原因になる事が述べられている。
バッファオーバーフロー バッファオーバーフロー攻撃
バッファAの値を他のバッファBにコピーするとき、BのバッファサイズがAのバッファサイズよりも大きいことをチェックしない場合に生じる脆弱性である。この脆弱性は、プログラマーがこのようなチェックの実装を怠った事により生じる。これはプログラマーが最低限のセキュリティチェックすらしていないことを強く示唆する。
脆弱性の具体例としては、例えばC言語やC++において、配列サイズをチェックする事なく、配列にstrcpyやscanfで文字列等をコピーするといったものがある。攻撃者は意図的に大きな入力をstrcpy、scanf、getsに与えることで、古典的バッファオーバーフローを不正に生じさせる事ができる。
例えば攻撃者がバッファAをバッファオーバーフローさせる事により、Aの隣りにある変数xを不正に変更できた場合、xがセキュリティ上重要なデータ（例えば管理者権限を持っているか否かを判定するビットを保持している）であれば、セキュリティ上重要な問題が生じる。
スタックベースのバッファオーバーフローは「上書きされるバッファがスタック（すなわち、局所変数や、まれに関数のパラメータ）にアロケートされる」事が可能な場合に生じる脆弱性である。このような脆弱性はファジングを使用して発見されることが多い。
バッファオーバーフロー バッファオーバーフロー攻撃
スタックベースのバッファオーバーフローについて説明するためにプロセスのメモリ利用方法を復習する。オペレーティングシステム (OS) は各ユーザプロセスに仮想アドレス空間を割り振り、WindowsやLinuxなどのOSでは上位のアドレスをカーネルが使うカーネル空間とし、残りをユーザプロセス自身が用いるユーザ空間とする。カーネル空間はユーザプロセスがアクセスする事はできず、通常のプログラミングでは意識する事はない。
C言語やC++で書かれたプログラムの場合、ユーザ空間をさらに分割する。これらの言語で書かれたプログラムでは、仮想アドレスの最低位の箇所から順にプログラムの実行コードを置くコード領域（テキスト領域とも）、初期化された静的変数・大域変数を置くデータ領域、初期化されていない静的変数・大域変数を置くbss領域、malloc等で動的に確保されたメモリを置く（可変サイズの）ヒープ領域を確保する。
一方、ユーザ空間における仮想アドレスの最高位の箇所は関数のコールスタックを保存する（可変サイズの）スタック領域として用いられる。
スタック領域はプロセス中で呼ばれる関数のコールスタックを格納する領域で、コールスタック中の各関数のデータ（スタックフレームという）を並べて格納している。プロセス中で関数fが関数gを呼び出した場合、コールスタックは以下のようになる：
バッファオーバーフロー バッファオーバーフロー攻撃
プロセスで現在実行中の関数のスタックフレームの位置を覚えるためにプロセッサによって用いられるのがフレームポインタで、具体的には（現在実行中の関数がgであれば）gのSFPのアドレスを指している。SFPは関数呼び出し時に呼び出し元の関数のフレームポインタのアドレスを覚えるための領域で、fがgを呼び出した際、スタックフレームの値（＝fのSFPのアドレス）をgのSFPに格納する。なお、SFPは「Saved Frame Pointer」の略で、日本語訳は「退避されたフレームポインタ」である。
一方gのリターンアドレスは呼び出し元関数fのプログラムカウンタのアドレスを格納する。
今例えば、関数gはユーザから（ASCIIコードの）文字列を入力を受け取り、入力された文字列を配列char A[10]に格納するとする。Aのサイズは10であるので、関数gのプログラマはユーザから受け取った文字列をAに格納する前に、その文字列が本当に10文字以下なのかをチェックする機構をgに実装しておかねばならない。このようなチェック機構を実装するのを忘れていた場合、悪意のあるユーザ（以下、「攻撃者」と呼ぶ）によりスタックベースのバッファオーバーフロー攻撃を受けてしまう危険がある。
具体的には、攻撃者は以下のような文字列をgに入力する：
（シェルコード）…（シェルコードの仮想アドレス）
バッファオーバーフロー バッファオーバーフロー攻撃
ここでシェルコードとは、何らかの悪意のある短いプログラムで、例えば攻撃者のためにバックドアを開けたり、マルウェアのダウンロードを行ったりする。
この文字列が配列Aの先頭から順に書き込まれていくと、A[i]のアドレスはiが大きいほど大きくなるので、攻撃者が入力文字列の長さを適切に選べば、アドレス空間には以下のようにデータが書き込まれ、gのリターンアドレスがシェルコードの仮想アドレスに上書きされる：
よって関数gが終了したとき、gのリターンアドレス（の箇所に上書きされたシェルコードの仮想アドレス）が読み込まれるので、プログラムカウンタはシェルコードの位置にジャンプし、攻撃者の狙い通り、シェルコードが実行される事になる。
上で述べた攻撃のアイデアが実行可能であるためには、攻撃者がリターンアドレスに上書きすべき仮想アドレスを正確に知り、それを関数gに入力する必要があるが、スタックは動的に変化するため、これは容易ではない。そこで本節ではリターンアドレスに上書きすべき仮想アドレスの「おおよその値」さえ分かれば攻撃が可能になるテクニック（NOPスレッド）を述べる。
バッファオーバーフロー バッファオーバーフロー攻撃
NOPとは「何も行わない」事を意味するアセンブリ命令で、本来はタイミングを合わせるなどの動機により何もせずにCPU時間を消費するために用いられる。NOPスレッド(sled、そり)とはこのNOP命令を複数個並べたもので、これを利用する事により攻撃対象の関数をシェルコードの位置まで滑走させる。
具体的には攻撃者は下記のような文字列を攻撃対象の関数gに入力する：
NOP  … NOP (シェルコード)(戻りアドレス)…(戻りアドレス)
最初の「NOP … NOP」の部分がNOPスレッドである。攻撃者がNOPスレッドの長さや戻りアドレスの繰り返し回数を適切に選んでgに入力すると、スタック領域は例えば以下のようになる（攻撃に関係する部分だけ抜書き）：
バッファオーバーフロー バッファオーバーフロー攻撃
これでgのリターンアドレスは「戻りアドレス」にセットされるので、攻撃者が「戻りアドレス」としてNOPスレッド部分のアドレスを指定する事に事前に成功していれば、gの終了時にNOPスレッドへとプログラムカウンタが移動する。するとプログラムはNOPを順に実行して右へ右へと移動し、シェルコードの位置にたどり着いてシェルコードが実行されるので、攻撃成功となる。戻りアドレスがNOPスレッドのどこかに落ちさえすればよいので、前節で述べた攻撃違い、リターンアドレスにセットする値を完璧に制御する必要はなく、NOPスレッドの長さ分の誤差が発生しても攻撃が成功する事になる。
NOPスレッドは頻繁に使用されるため、多くの侵入防止システムベンダーでシェルコードの判定に使用されている。このため、エクスプロイトの作成者側では、シェルコードの実行に影響を及ぼさない（NOP以外の）任意の命令をランダムに選んでスレッドを構成することが常套手段となっている。
バッファオーバーフロー バッファオーバーフロー攻撃
攻撃を実行するには、あとは「戻りアドレス」として具体的にどの程度の値を代入すればよいかを知ればよい。しかし攻撃の標的となる組織の環境で戻りアドレスの絶対アドレスがいくつ程度の値になるのかを事前に知る事は難しい。そこで相対アドレスを利用して戻りアドレスを適切に選ぶ攻撃テクニックを紹介する。この攻撃のシナリオでは、攻撃者はシェルコードを含んだ攻撃用のプログラムh（をコンパイルして作った実行コード）を攻撃の標的となる組織に送りつけ、hのサブルーチンとしてgを呼び出す事で攻撃を行う。
この攻撃用プログラムhでは、変数xを宣言が宣言されているものとする。hが標的の環境でgを呼び出したとき、gのスタックフレームはスタック領域上でhのスタックフレームのすぐ隣に配置される事から、攻撃用文字列を入れ込むgの変数の絶対アドレスvar_addは
var_add = &x - (小さな値)
になるはずである。ここで「&x」はxのアドレスを表す。既に述べたようにNOPスレッドを使った攻撃では戻りアドレスとしてvar_add近辺の値を選べば成功するので、攻撃者はこの「小さな値」を決定しさえすればよい。
バッファオーバーフロー バッファオーバーフロー攻撃
よって攻撃者は関数gの実行コードを事前に入手し、(シェルスクリプト等を使って)NOPスレッドの長さや戻りアドレスを変えながら攻撃対象のプログラムを何度も実行することで適切な「小さな値」を選び、その「小さな値」を攻撃用プログラムhに書き込んでおけばよい。
関数gに埋め込む攻撃用の文字列は「NOPスレッド+シェルコード+戻りアドレスの繰り返し」という形をしており、gのリターンアドレスが「戻りアドレスの繰り返し」の部分に落ちない限り攻撃は成功しないので、関数gに攻撃用文字列を埋め込む箇所とgのリターンアドレスとが（仮想アドレス空間上で）あまりに近い場合は、攻撃に必要な長さのシェルコードを埋め込めないという問題が攻撃者に生じる。
しかし攻撃者が攻撃の標的となるマシンの環境変数を設定できる状況下では、攻撃者はこの問題を回避した攻撃が可能である。標的マシンでプロセスが実行される際には、そのプロセスの仮想アドレス空間に環境変数が読み込まれるので、攻撃者が事前に標的マシンの環境変数に「NOPスレッド+シェルコード」を書き込んでおけば、プロセスの仮想アドレスに「NOPスレッド+シェルコード」ができあがる事になる。プロセス中で関数gが実行された際、攻撃者は攻撃用文字列をgに入力して、リターンアドレスをそのNOPスレッドに書き換えれば攻撃が成功する事になる。
バッファオーバーフロー バッファオーバーフロー攻撃
より確実な攻撃方法として、攻撃プログラムhの中に環境変数を読み込む関数（getenv()等）を用いるものもある。
NOPスレッドを長くしすぎると、gのリターンアドレスの位置にすらNOPが書き込まれてしまって攻撃に失敗する為、NOPスレッドを長くして攻撃成功率を上げる手法には限界がある。しかし攻撃者がプロセスのヒープ領域の値をも自由に操れるという条件下では、攻撃者はヒープスプレーというテクニックを用いる事により、この限界を突破した攻撃を行う事が可能になる。
ヒープスプレーでは、NOPスレッドとシェルコードを、スレッド領域ではなくヒープ領域に埋め込み、戻りアドレスとしてヒープ領域中のNOPスレッドを指定する。ヒープ領域上のNOPスレッドにはスレッド領域のNOPスレッドと違い前述した長さの上限が存在しないため、「長いNOPスレッド＋シェルコード」の組み合わせを大量にヒープ中に書き込むことで攻撃成功率を上げる。
ウェブブラウザではJavaScriptなどのクライアントサイドスクリプトにより任意の長さのヒープを作成できるので、ブラウザを対象にしたドライブバイダウンロード攻撃ではヒープスプレーが使われる事が多い。
バッファオーバーフロー バッファオーバーフロー攻撃
攻撃者の入力したデータ（エクスプロイトなど）のアドレスは未知であるが、そのデータのアドレスがレジスタに格納されていることは分かっているという場合には、トランポリン(trampolining)と呼ばれる手法が利用される。この手法では、攻撃者の入力したデータにジャンプするオペコードのアドレスをリターンアドレスへ上書きする。例えばアドレスがレジスタRに格納されている場合、jump R（あるいはcall Rなど）というオペコードが格納されているアドレスにジャンプさせることでユーザの入力したデータを実行させる。この手法で使用するオペコードはDLLや実行ファイルの中のものを利用する。ただし、一般的にオペコードのアドレスにヌル文字が含まれていてはならず、また処理に使用するオペコードのアドレスはアプリケーションやオペレーティングシステムのバージョンによって異なる。Metasploitプロジェクトはこのような目的に適したオペコードのデータベースの一つであり、Windowsで使用できるオペコードが記載されている。
バッファオーバーフロー バッファオーバーフロー攻撃
mallocなどでヒープ領域に動的にメモリを確保する関数に対するオーバーフロー攻撃である。基本的な攻撃手法としては、関数がヒープに確保したメモリ領域が2つあるとき、そのうち一方の領域に対して確保済みのメモリサイズより大きなデータを入力する事でオーバーフローを起こし、もう一方のメモリ領域を書き換えるというものである。mallocは複雑な方法でメモリ確保の場所を決定しているものの、連続して2度mallocを実行した場合、その結果として確保される2つのメモリ領域は（仮想アドレス空間上で）近くに配置されている傾向があるため、上述のようなバッファオーバーフロー攻撃が可能になる。
より高度なヒープベースバッファオーバーフロー攻撃手法を説明する為の準備として、mallocのメモリ管理方法を説明する。なおメモリ管理方法の詳細はmallocの実装に依存するため、実行環境によって細かなところは下記の説明と異なる部分があるので注意されたい。
mallocは未使用なヒープ領域（の一部）をメモリプールとして管理しており、メモリプールは複数のchunkと呼ばれる単位からなっている。プログラム中でmallocが実行されるたびに、管理しているchunkの中から適切なサイズのものをプログラムに返す。適切なサイズのchunkがない場合は、システムコールにより新たなchunkを確保してプログラムに返す。mallocはchunkを（サイズ毎に異なる複数の）連結リストとして管理しており、chunkをプログラムに渡す際にこの連結リストからchunkを削除し、プログラムがメモリ領域をfreeすると、freeされたchunkが連結リストに加わる。
chunkは連結リストとして管理されているので、各chunkには「次のchunk」を指定するポインタ（Windowsでは「flink」、linuxでは「fd」）や「前のchunk」を指定するポインタ（Windowsでは「blink」、linuxでは「bk」）がある。
未使用chunkと隣接するメモリ領域が解放された場合は、解放されたメモリ領域と未使用chunkとを連結 (coalesce) する事で1つの大きなchunkを作って管理する。
より高度なヒープベースバッファオーバーフロー攻撃として、mallocがメモリ管理に使うメタデータを書き換える手法がある。例えばWindows XP SP1またはそれ以前のWindowsでは、mallocしたメモリ領域をオーバーフローさせる事で、そのメモリ領域の（仮想アドレス空間で）隣りにある未使用chunkのflinkやblinkを任意のアドレスに書き換えるという攻撃手法が可能であった。flinkやblinkはcoalesceのタイミングでmallocにより参照されるので攻撃が成功する。
バッファオーバーフロー攻撃の結果として、write-what-where状態（"write-what-where condition"、CWE-123。任意の場所に任意の値を書き込むことができる状態）になる危険がある。
write-what-where状態になると、セキュリティポリシーのスコープ外にメモリのデータを書き込むことができる。セキュリティポリシーのスコープ外にコードを置くことで、攻撃者はほぼ確実に任意のコードを実行できるようになる。管理者権限を制御しているフラグ等が書き換えられる場合も、攻撃者は任意のコードが実行可能になる。
攻撃者は意図的にバッファオーバーフローを起こすによりプログラムをクラッシュさせたり、処理を書き換えて無限ループに追い込むことでプログラムをフリーズさせてたりする事でプログラムの可用性を侵害できる。
古典的バッファオーバーフローやヒープオーバーフローなどの結果として、関数ポインタの書き換えが可能になるケースがある。攻撃者はnmコマンドを用いる事でプログラム中で用いられている様々な関数のアドレスを知る事ができるので、nmの結果を参照して攻撃に利用可能な関数に関数ポインタの値を書き換えられる。
バッファオーバーフロー 技術的対策
バッファオーバーフローを検出するコードをコンパイル時に実行コードに挿入する手法がある。典型的手法としては、ローカル変数とSFPの間に、カナリア（canary）もしくはクッキーと呼ばれる領域を挿入する方法である。プログラムは実行中カナリアを監視し続け、バッファオーバーフローによりカナリアが書き換わったらプログラムを停止する。
標準Cライブラリ等にはバッファオーバーフロー検知機能が施されていない関数が収録されているので、これを検知機能を持った関数に置き換えたライブラリを標準Cライブラリの代わりに使う事で攻撃を検知できる。例えばLibsafeは標準Cライブラリのstrcpy(*dest,*src)をより安全な関数に置き換えており、入力srcのサイズがコピー先のdestのサイズが大きいか否かを検知できる。
バッファオーバーフロー 技術的対策
典型的なスタックベースのバッファオーバーフロー攻撃では、本来データを格納すべき領域にシェルコードやNOP命令のような実行コードを置き、これをプログラムに実行させる事で攻撃が成立する。そこでこのような攻撃を防ぐため、データを格納すべき領域では実行不可にする、Write XOR eXecute（WXもしくはW^Xと略す）という対策手法が知られている。WXのWindowsにおける実装はDEP（英: data execution prevention、データ実行防止）と呼ばれる。またDEPではSEH例外ハンドラへのポインタが上書きされないように明示的に保護を行う。
一部のUNIX（OpenBSDやmacOSなど）はWXなどの実行保護が有効になった状態で出荷されている。それ以外のオプショナルなパッケージとしては以下のものが挙げられる。
また、プロプライエタリなアドオンとしては以下のものがある。
なお、2018年現在広く使われているx64アーキテクチャのプロセッサでは、WXを実現する為にデータ領域である事を識別するNXビットという仕組みがハードウェアレベルでサポートされている（インテルではNXビットのことをXDビットと呼んでいるが同一のものである）。
バッファオーバーフロー 技術的対策
バッファオーバーフロー攻撃を含めたメモリ破壊攻撃全般を緩和する技術としてASLR（Address Space Layout Randomization、アドレス空間配置のランダム化）がある。これは仮想メモリ空間におけるスタック領域やコード領域の位置、読み込まれるDLLの位置等を（プログラム起動時もしくはOS自身の起動時に）ランダムに変える技術で、これにより攻撃者が攻撃に有効な実行コードの特定箇所を指定してメモリ改ざんを行うのを困難にする。
ASLRはバッファオーバーフロー攻撃の発展形であるReturn-to-libc攻撃（後述）を緩和できるが、さらにその発展形であるReturn-oriented programmingには対抗できない。
カーネル空間のASLRをKASLR（kernel address space layout randomization）といい、linuxカーネル(バージョン3.14以降)、iOS(バージョン6以降)などで実装されている。またKASLRをバイパスしようとする攻撃に対抗する為の機構としてKernel page-table isolationがある。
gccとg++でコンパイルとスタック領域とヒープ領域に対してはASLRを用いるが、コード領域にASLRを用いるにはオプション「-pie」を使わねばならない。また共有ライブラリにASLRを用いるにはオプション「-fPIC」を指定する。
バッファオーバーフロー 開発時の対策
C言語やC++以外の言語ではバッファオーバーフローが発生しないよう対策が取られているものも多く、コンパイル時にバッファオーバーフローのチェックを行ったり、実行時にバッファオーバーフローに対する警告や例外を上げたりするものもある（Ada、Eiffel、LISP、Modula-2、Smalltalk、OCaml、およびC言語から派生したCycloneやD言語など）。
Javaプラットフォームや.NET Frameworkでは全ての配列に対して境界チェックが必須とされる。ほぼすべてのインタプリタ言語ではバッファオーバーフローへの対策が行われており、エラー発生時にはその状態が明確に伝えられる。境界チェックを行うのに十分な型情報を保持しているようなプログラミング言語では、境界チェックの有効・無効を切り替えるためのオプションが提供されていることもある。
バッファオーバーフロー攻撃は主にC言語やC++を対象としたものなので、以下ではプログラミング言語としてC言語かC++を選んだ場合に対しての対策を述べる。
バッファオーバーフロー攻撃を防ぐには、領域長とデータ長を意識したプログラミングを行う事が重要である：
標準Cライブラリを使う代わりに、バッファあふれを未然に防いだりエラーとして検出してくれたりするセキュアなライブラリを使う事も重要である。このようなライブラリとして以下のようなものがある。