<7일차 4월 1일 일>

게스트하우스 야하타 -> 은각사 -> 우동집 오멘 -> 철학의 길 -> 난젠지 -> 게아게 인클라인 -> 

오야코동 히사고 -> 기요미즈데라 -> 기온 츠지리 -> 가츠규 가와라마치 -> 게스트하우스 야하타

 

 

철학의길

 

오늘의 첫 목적지는 은각사(=지쇼지)이다. 은각사 또한 교토의 대표적인 관광지로, 철학의 길과 붙어있기 때문에 보통 한꺼번에 묶어서 관광을 하게 된다. 나는 우선 은각사를 보고 철학의 길을 따라 남쪽으로 이동하며 관광하기로 했다. 은각사 바로 앞쪽에 오멘이라고 우동 맛집이 있는데, 11시 오픈이지만 앞에 웨이팅을 적을 수 있는 시스템이라 이름을 적어두고 은각사로 갔다.

 

은각사

역시나 은각사는 관광객이 많다. 그래도 금각사에 비해서는 부지가 다소 넓은 편이라 그래도 북적이는 느낌은 훨씬 덜했다. 

 

은각사

은각사는 금각사만큼의 화려한 느낌은 없다. 그래도 정원과 어울어져서 고즈넉한 느낌을 즐길 수 있다. 건물 뒤쪽으로 가면 언덕이 있고 전망을 볼 수 있는데, 별건 없지만 시간내서 산책할만은 하다.

 

우동집 오멘

11시 오픈 타임에 맞춰 우동집 오멘에 다시 도착했다. 여기는 원래 계획에 없었고 철학의 길 끝 쪽에 있는 카레우동집을 가려고 하였다. 근데 뭐 면요리이기도 하고 이른 점심/늦은 점심으로 2번 먹을 수 있을 것 같아서 오멘도 들리기로 하였다. 이따가 또 우동을 먹을 예정이기에 가장 작은 사이즈의 자루우동으로 시켰다.

 

우선 주문을 하면 위 사진처럼 간단한 야채와 참깨를 주는데, 얘들이 상당히 정갈하게 나와서 이쁜데다가 맛도 훌륭하다. 메인인 면과 쯔유도 곧 나오는데 얘들도 상당히 맛있다. 더 큰 사이즈로 시킬 걸 하고 상당히 후회했다...

 

철학의 길

철학의 길은 은각사에서 시작해서 난젠지까지 이어지는 상당히 긴 길이다. 일본의 니시다 키타로라는 철학자가 사색을 하던데에서 유래했다고 한다. 은각사-난젠지 사이 1.8km 가량으로 상당히 길지만 걸어볼만 하다. 아주 작은 천을 따라서 옆으로 작은 길이 나있는 형태인데, 여기도 교토의 대표적인 관광지라 사람이 상당히 많다. 게다가 철학의 길을 따라서 벚꽃이 쭉 심어져있기 때문에 벚꽃 구경 온 사람까지해서 굉장히 북적인다. 벚꽃/단풍시즌이 가장 사람이 많고 그 외에는 1.8km의 길에 사람들이 분산되어 있어서 이 정도로 북적이지는 않는다.

 

철학의 길

사람이 조금 많긴했지만 느긋하게 벚꽃 구경하며 걸어갔다. 

 

히노데 우동

철학의 길을 대략 30분정도 걸어서 목적지에 도착했다. 내가 이날 점심으로 원래 가려고 했던 곳은 카레우동으로 유명한 히노데 우동이다. 5년 전에 가본 곳인데, 맛이 인상깊었어서 추억팔이겸 다시 가보고 싶었다. 근데 가게가 문을 닫았길래 보니 일요일은 쉬는 날이였다... 오멘을 먹은지 그리 오래되진 않아서 배가 고프진 않았지만 너무 아쉬웠다. 

 

난젠지 가는 길

카레우동은 허탕치고 말았지만, 일정은 그대로 진행하여 난젠지로 향했다. 이 날도 날씨가 엄청 좋다.

 

난젠지

난젠지 사찰은 입장료가 무료이지만, 사실 별로 대단할 건 없다. 수도 없이 본 사찰 모습이라 별 감흥은 없었다. 그런데도 여기 온 이유는 사찰 때문이 아니다.

 

수로각

난젠지에는 메이지 시대(1890)에 지어졌다는 수로각이라는 거대한 수로가 있다. 인근 비와호에서 물을 전달하는 역할인데, 이국적으로 건축되어 굉장히 독특하다. 

 

수로각

수로각은 위로 올라서 걸어볼 수도 있다. 아래쪽에는 물탱크인지 뭔가가 보이고, 위쪽에서는 작은 수로 양옆으로 좁게 길이 나있다. 상당히 신선한 경험이었다.

 

게아게 인클라인

수로각을 따라서 쭉 걸어가면 게아게 인클라인이라는 곳이 나온다. 여기는 수로로 물자를 옮기던 철로인데, 지금은 사용중이지 않아서 시민 공원으로 이용되고 있다. 

 

게아게 인클라인

게아게 인클라인은 무엇보다 벚꽃 명소로서 유명하다. 이 때는 벚꽃 절정 시즌이라서 사람이 정말 바글바글했다. 그래도 벛꽃을 보거나 철도와 더불어서 사진을 찍기에는 정말 좋았다.

 

난젠지-수로각-게아게 인클라인은 교토의 메인 관광지는 아니다. 하지만 독특한 풍경과, 벚꽃을 즐길 수 있으니 일정상 여유가 좀 있다면 꼭 오는 것을 추천한다.

 

 

7일차 2편에 이어서...

235쪽

20.01.17 ~ 02.07(22일)

 

처음으로 읽어본 이즈미 쿄카의 작품이다. 일본 근대 환상문학의 대표주자라고 하는데, 확실히 작품 분위기가 굉장히 독특하고 매력있다. 이 책은 4개의 단편으로 이루어져있는데, 한 개의 초단편(외과실)과 중편 3개로 보면 된다. 첫 번째 작품이 고야성이 결말이나 반전은 약간 밋밋해도(당대엔 신선했을수도?) 작품 분위기와 묘사가 훌륭한 작품이라 굉장히 재밌게 읽었다. 다만 그 이후 세 작품들은 그냥저냥... 이였던듯.

[0]

double-free는 동일한 heap 메모리 공간에 대해 메모리 해제(free)를 2번 시도하여 발생하는 취약점이다. 메모리 해제는 코드 상의 여러 곳에 분포되어 있는 경우가 많아, 디버깅이 굉장히 어렵다(리눅스 커널에서도 double-free가 종종 발견된다.) 언뜻 생각하기로, 메모리 해제는 몇번을 해도 문제가 되지 않을 것 같다. 하지만 이는 심각한 취약점이 발생하게 되는데, 이를 이해하기 위해선 heap 메모리의 할당/해제에 대한 이해가 필요하다.

 

[1]

void * ptr = malloc(10);
free(ptr);

위 코드에서 ptr이 가르키는 메모리 공간을 해제하려고 한다. 그런데 ptr이 가르키는 메모리 공간이 10바이트라는걸 어떻게 알 수 있을까? ptr은 그저 메모리의 주소값만을 가지고 있을 뿐, 해당 메모리의 크기는 알 수가 없다. 따라서 이러한 정보를 표시하기 위해, heap 메모리가 할당 될때마다 chunk 라고 하는 메타데이터 영역도 생성하여 할당한다. 따라서, 위의 메모리 할당에서 실제로 10바이트가 아니라, chunk가 포함되어 더 큰 메모리가 할당된다. chunk의 메타데이터 정보는 다음과 같다.

struct malloc_chunk {
  INTERNAL_SIZE_T      prev_size;  /* Size of previous chunk (if free).  */
  INTERNAL_SIZE_T      size;       /* Size in bytes, including overhead. */

  struct malloc_chunk* fd;         /* double links -- used only if free. */
  struct malloc_chunk* bk;

  /* Only used for large blocks: pointer to next larger size.  */
  struct malloc_chunk* fd_nextsize; /* double links -- used only if free. */
  struct malloc_chunk* bk_nextsize;
};

[2]

위의 chunk 자료구조에서 double-free에 대해 중요한 자료구조는 fd와 bk이다. 이 포인터들은 이름에서 유추할 수 있듯이, 더블 링크드리스트에 사용되는데, 이 리스트는 bin이라고 하는 free된 chunk들을 모아놓은 리스트이다. 어떤 메모리 chunk가 해제되게 되면, bin에 추가되어 다음에 같은 사이즈의 할당이 될 경우 빠르게 재할당할 수 있도록 한다. 즉 [2]에서 free(ptr)이 될 경우 해당 chunk가 bin 리스트에 추가된다. 그런데 만약 free(ptr)이 한 번 더 이루어진다면? 

 

[3]

void * a = malloc(10);
void * b = malloc(10);

free(a);
free(b);
free(a);		//double free!

void * c = malloc(10);
void * d = malloc(10);
void * e = malooc(10);	//same as c

위 코드에서 a와 b가 할당되고, a,b,a순으로 free되었으므로 bin 리스트에는 a->b->a 순서가 된다. 즉 a는 하나의 메모리 chunk이지만 bin 리스트에서는 두 개의 chunk로 인식되어 버리는 것이다! 따라서 이 후 c,d,e 순으로 같은 크기의 10바이트 메모리 할당을 요청하게 되면, a, b, a를 각각 할당 받게 된다. 따라서 c와 e가 의도와 다르게 같은 메모리 공간을 점유하게 되어 버그가 발생한다. 만약 공격자가 c나 e중 하나를 컨트롤 할 수 있다면 핵심 데이터를 유출하거나(information leak), 함수 포인터 등을 덮어씌워서 공격자가 의도한 코드를 실행할 수 도 있다.(code execution)

 

그런데 double-free의 문제는 여기서 그치지 않는다. 위 코드에서 c,d까지만 할당되었다고 생각해보자. 그럼 c,d는 각각 이전의 a,b가 사용한 메모리 영역이 할당되었을 것이고, bin 리스트에는 아직 a가 하나 남아 있게 된다. 만약 공격자가 c를 컨트롤할 수 있고, 런타임에 overflow체크가 되지 않는다면, 공격자는 overflow를 통해 a의 chunk 메타데이터를 조작할 수 있다. 즉 fd와 bk를 덮어씌워서 bin 리스트를 조작할 수가 있고, 이를 이용해 공격자가 원하는 메모리 공간을 할당하도록 강제할 수도 있다.

 

 

[참고]

http://egloos.zum.com/studyfoss/v/5206220

 

[glibc] 동적 메모리 관리 (1)

glibc: 2.10.1arch: x86이번에는 GNU C library (이하 glibc)에서 동적 메모리를 관리하는 방식에 대해서 살펴볼 것이다.(여기서 설명하는 내용은 32비트 머신 환경에 해당하며 64비트 환경의 경우 차이가 있을 수 있다.)glibc 내에 포함된 동적 메모리 할당자 (malloc) 모듈은Doug Lea가 최초로 작성한 구현(이름의

egloos.zum.com

https://nroses-taek.tistory.com/161

 

Double Free Bug(DFB)

UAF 처럼 DFB도 말 그대로 2번 Free해서 나타나는 취약점입니다. 간단한 예시 0x20만큼 메모리를 세 번 할당했습니다. 하지만 주소에서 볼 수 있듯이 0x30만큼 차이가 납니다. 요청한 사이즈보다 크게 할당되는..

nroses-taek.tistory.com

https://heap-exploitation.dhavalkapil.com/attacks/double_free.html

 

Heap Exploitation

This book on heap exploitation is a guide to understanding the internals of glibc's heap. It also describes, in detail, various attacks possible on the heap structure.

heap-exploitation.dhavalkapil.com

 

'Computer Science > Security' 카테고리의 다른 글

Confidential Computing이란  (0) 2020.03.24
Memory safety - 3  (0) 2019.12.02
Memory Safety - 2  (0) 2019.11.12
Memory Safety - 1  (0) 2019.10.30

+ Recent posts