*λ²νΌ μ€λ²νλ‘μ° κ³΅κ²©(Buffer Overflow Attack)
: μ°μλ λ©λͺ¨λ¦¬ 곡κ°μ μ¬μ©νλ νλ‘κ·Έλ¨μμ ν λΉλ λ©λͺ¨λ¦¬ λ²μλ₯Ό λμ΄μ μμΉμ μλ£λ₯Ό μ½κ±°λ μ°λ €κ³ ν λ λ°μνλλ°,
μ΄λ₯Ό μ΄μ©ν΄ μ μμ μΈ μ½λλ₯Ό μ€νμν€κ±°λ νλ‘κ·Έλ¨ μ€μλμ μ λ°μμΌ κ³΅κ²©μ νλ‘κ·Έλ¨μ ν΅μ ν κΆνμ νλ
-μ€ν λ²νΌ μ€λ²νλ‘μ°
: μ€νμ ν λΉλ λ²νΌλ€μ΄ λ¬Έμμ΄ κ³μ° λ±μ μν΄ μ μλ λ²νΌ νκ³μΉ λλ κ²½μ° λ²νΌ μ€λ²νλ‘μ° λ°μνμ¬
λ³΅κ· μ£Όμ λ³κ²½ λ° κ³΅κ²©μκ° μνλ μμ μ½λ μ€ν
(1) μ€ν : ν¨μ μ²λ¦¬λ₯Ό μν΄ μ§μ λ³μ λ° λ§€κ°λ³μκ° μμΉνλ λ©λͺ¨λ¦¬ μμ
-ν λ²νΌ μ€λ²νλ‘μ°
: νμ ν λΉλ λ²νΌλ€μ λ¬Έμμ΄ λ±μ΄ μ μ₯λ λ, μ΅μ΄ μ μλ ν λ©λͺ¨λ¦¬ μ¬μ΄μ¦ μ΄κ³Όνμ¬
λ¬Έμμ΄ λ±μ΄ μ μ₯λλ©΄ μ€λ²νλ‘μ°κ° λ°μνμ¬ λ°μ΄ν°μ ν¨μ μ£Όμ λ±μ λ³κ²½νμ¬ κ³΅κ²©μκ° μνλ μμ μ½λ μ€ν
(1) ν : μ¬μ©μκ° λμ μΌλ‘ ν λΉνλ λ©λͺ¨λ¦¬ μμ
*argv[]
:argv[0]μ νλ‘κ·Έλ¨ λͺ , argv[1]λΆν° main λ§€κ°λ³μ
ex)./test a
#include <string.h>
void foo (char *bar)
{
char c[12];
strcpy(c, bar); // no bounds checking
}
int main (int argc, char **argv)
{
foo(argv[1]);
}
μ€ν λ²νΌ μ€λ²νλ‘ - μν€λ°±κ³Ό, μ°λ¦¬ λͺ¨λμ λ°±κ³Όμ¬μ
μν€λ°±κ³Ό, μ°λ¦¬ λͺ¨λμ λ°±κ³Όμ¬μ . μ€ν λ²νΌ μ€λ²νλ‘(stack buffer overflow)λ νλ‘κ·Έλ¨μ΄ νλ‘κ·Έλ¨μ΄ μλν λ°μ΄ν° ꡬ쑰체μ λ©λͺ¨λ¦¬ μ£Όμ(μΌλ°μ μΌλ‘ κ³ μ λ λ²νΌ κΈΈμ΄λ₯Ό κ°λ) μΈλΆμ μ½ μ€νμ
ko.wikipedia.org
μν€λ°±κ³Όμμ κ°μ Έμ¨ μ€ν λ²νΌ μ€λ²νλ‘μ° μ½λμ΄λ€.

foo()λ μΈμκ° 11 λ°μ΄νΈλ³΄λ€ ν΄ λ, λ°ν μ£Όμλ₯Ό κ²Ήμ³μ°κ² λλ€.
μ¦ foo()κ° λ°ν μ κ·Έ μ£Όμλ‘ μ ννλλ°, ν΄λΉ μ£Όμμ 곡격μκ° μνλ μ½λλ₯Ό μμ±νλ©΄ ν΄λΉ μμ½λλ‘ λ체λλ€.
*μ€ν λ²νΌ μ€λ²νλ‘μ° λμ μμ ν μ½λ
- strcpy ν¨μ λμ strncpy ν¨μ μ¬μ©
(1) strncpy(char *dst, const char *src, size_t len)μ elnμ sizeof(buffer)-1λ‘ μ€μ νλ€.
- μ λ ₯κ° μ¬μ κ²μ¦
(1) if(strlen(argv[1] >= sizeof(buffer)) λ₯Ό μ΄μ©
(2) nullλ¬Έμ ν¬ν¨μ μν΄ λμΌν κ°λ ν¬ν¨
*μ€ν λ²νΌ μ€λ²νλ‘μ° λμκΈ°μ
-μ€ν κ°λ(Stack Guard) : λ©λͺ¨λ¦¬μμμ νλ‘κ·Έλ¨μ λ³΅κ· μ£Όμμ λ³μ μ¬μ΄μ νΉμ κ°(μΉ΄λ리 λ¨μ΄) μ μ μ₯ν΄λμλ€κ° κ·Έ κ°
λ³κ²½ μ μ€λ²νλ‘μ°λ‘ κ°μ νμ¬ νλ‘κ·Έλ¨ μ€ν μ€λ¨
-μ€ν μ΄λ(Stack Shield) : ν¨μ μμ μ λ³΅κ· μ£Όμλ₯Ό Global RET νΉμ μ€νμ μ μ₯ ν
ν¨μ μ’ λ£ μ μ μ₯λ κ°κ³Ό μ€νμ RETλ₯Ό λΉκ΅ν΄ λ€λ₯΄λ©΄ μ€λ²νλ‘μ°λ‘ κ°μ
-ASLR(Address Space Layout Randomization) : λ©λͺ¨λ¦¬ 곡격μ λ°©μ΄νκΈ° μν΄ μ£Όμ κ³΅κ° λ°°μΉλ₯Ό λμν
μ€ν μλ§λ€ λ©λͺ¨λ¦¬ μ£Όμ λ³κ²½

*λ μ΄μ€ 컨λμ 곡격(Race Condition Attack)
: μ€νλλ νλ‘μΈμ€κ° μμνμΌμ λ§λλ κ²½μ°, μ μμ μΈ νλ‘κ·Έλ¨μ ν΅ν΄ κ·Έ νλ‘μΈμ€ μ€ν μ€μ
λΌμ΄λ€μ΄ μμνμΌμ λͺ©μ νμΌλ‘ μ°κ²° (μ¬λ³Όλ¦ λ§ν¬)νμ¬ μ μμ μΈ νμλ₯Ό νλ κ²
-λ μ΄μ€ 컨λμ : λ μ΄μμ νλ‘μΈμ€λ μ€λ λκ° κ³΅μ μμμ λμμ μ κ·Όμ μ κ·Ό μμμ λ°λΌ λΉμ μμ μΈ κ²°κ³Όκ° λ°μνλ 쑰건
-νλ‘μΈμ€κ° setuid μ€μ μΌλ‘ root κΆνμΌλ‘ μ€ν μ κΆν μμΉμ ν΅ν μ€μ μμμ μ κ·Ό κ°λ₯
*ν¬λ§· μ€νΈλ§ 곡격(Format String Attack)
: ν¨μμμ μ¬μ©λλ λ¬Έμμ΄μ μ /μΆλ ₯ ννλ₯Ό μ μνλ λ¬Έμμ΄λ‘,
μΈλΆλ‘ μ λ ₯λ κ°μ κ²μ¦νμ§ μκ³ μ μΆλ ₯ ν¨μμ ν¬λ§· μ€νΈλ§μ κ·Έλλ‘ μ¬μ©νλ κ²½μ° λ°μ
-ν¬λ§· μ€νΈλ§μ ν¨μμ μ λ ₯ νλΌλ―Έν°λ‘ μ§μ μ¬μ©νμ§ μκ³ ν¨μ μ¬μ©μ ν¬λ§· μ€νΈλ§μ μ§μ μ§μ
ex)printf(argv[1]); -> printf("%s",argv[1]);
'μ¬λ¬κ°μ§ > μ 보보μ μ 리' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [μ 보보μ μ 리] μμ€ν - μλμ° μλ² μ·¨μ½μ (0) | 2023.03.16 |
|---|---|
| [μ 보보μ μ 리] μμ€ν - UNIX/Linux μλ² μ·¨μ½μ (0) | 2023.03.15 |
| [μ 보보μ μ 리] μμ€ν - UNIX/Linux μλ² λ³΄μ (0) | 2023.03.09 |
| [μ 보보μ μ 리] μμ€ν - UNIX/Linux μμ€ν κ΄λ¦¬ (0) | 2023.03.08 |
| [μ 보보μ μ 리] μμ€ν - UNIX/Linux κΈ°λ³Έ λ° λͺ λ Ήμ΄ (0) | 2023.03.03 |