이 포스트는 널널한 개발자님 강의를 참조하여 작성한 포스트입니다.
TCP연결이 착각이라고 말했는데 이것과 관련해서 악용한 해킹사례가 있었다.
연결은 사실 End-point의 주관적인 판단에 불과하다. 즉 보안성이 전혀없는 판단이라는 것이다. 그래서 연결이 그 자체만으로 취약하다. 어떤 게임에서 이것과 관련한 버그가 있었다. 어떤 게임이 있으면 서버가 있을 것이고 서버에 사용자들이 접속해 있을 것이다. 예를들면 철수,영희,길동이가 접속해 있다 하자. 여기서 철수는 고렙이고 영희는 저렙이고 길동이라는 적군을 물리쳐야 한다고 하자. 그래서 고렙인 철수는 영희와 연합을 해서 길동이를 물리치고 싶은데 영희는 아이템도 없고 저렙이다 보니 어떻게 할까 생각을하다 이상한 생각을 하게된다.
철수 영희만 볼 수 있는 한적한 공간으로 이동을 한다. 그리고 철수는 아주 좋은 아이템을 길에 버린다. 그러면 철수, 영희 모니터 화면에는 좋은 아이템이 바닥에 버려진 화면을 공유할 것이다. 그리고 철수는 이 아이템을 다시 줍는과 동시에 LAN선을 뽑아버린다. 그러면 어떤 일이 일어나냐면 영희 화면에는 아이템이 바닥에 여전히 버려졌지만 철수는 아이템이 습득되어 있다. 이것을 확인하고 철수는 다시 LAN선을 연결한다. 그럼 TCP연결은 유지됨으로 영희는 이 아이템이 획득이 가능해지고 아이템 복제 버그가 일어난 것이다.
이 이야기를 한 이유가 바로 TCP연결은 주관적인 판단이고 착각이라고 말하고 싶었다. 즉 클라이언트가 SYN을 날려 연결요청을 하고 서버가 SYN+ACK를 날리면 클라이언트는 서버와 연결이 되었다 착각을 한다. 서버는 클라이언트에 ACK가 날라오기 전까지 연결이 안된것임에도 불구하고 말이다. 그래서 TCP연결에 딸려오는 말이 보안성이 없다는 것이다.