채점을 하다보면 심심합니다. 혹시 PC^2로 진행되는 대회 채점을 해보신 분이라면
를 해본 경험이 있을줄로 압니다.
서울 대회 채점은 채점관 한분이 문제 하나를 맡아서 채점하기 때문에, 어택이 뜸한 문제를 출제한 분들은 심심합니다? (그래서?) Eagles팀이 제출한 소스코드를 읽어보던 채점관님 曰, '이건 뭔가 이상하다. test input/output을 알지 못하고서는 이런 프로그램을 작성할 수 없다.'
그러자 대회 감독님이 대회장으로 올라가서, Eagles팀이 사용하던 컴퓨터를 사용하지 못하게 하고, 그 근처에 로밍하고 있던 모retired님을 풀링해와서 컴퓨터 조사를 시키면서 사건이 시작되었습니다. 팀 코치 입장에서는 갑자기 대회감독이 뛰어와서 학생들이 컴퓨터를 못만지게 하더니, 뒤에서 구경하고 있던 사람을 데려다가 컴퓨터를 만지게 하더니, 어뷰징을 했다고 주장하니 기가막힐 노릇이라 대판 싸운듯 합니다. 왠간하면 근처에 있던 staff중 한명에게 시켰으면 좋았을텐데요.
문제가 되는 프로그램은 전부 2개. 한 프로그램에서는 배열에 저장된 문자들을 3개씩 건너뛰면서 출력하고 있었고, 다른 프로그램에서는 어떤 test input이 입력되는지를 if문으로 비교하면서 testcase가 작으면 DP를 돌리고 그렇지 않으면 특정 값을 찍고 있었습니다. 이 프로그램을 두고, 대회 본부측에서는 testcase를 입수해서 사용했다는 증거라고 주장한 반면, Eagles팀은 팀에서 연구해서 만들어낸 값이라고 주장하였습니다.
어쨌든, Eagles팀이 사용한 컴퓨터에서 채점할 때 사용되는 testcase들이 저장된 파일이 발견되었습니다. Eagles팀은 '이 파일들은 대회 시작할 때 부터 컴퓨터에 저장되어 있었다' 라고 주장했지만, 해당 정보를 담고 있는 파일들은 파일 생성 시각을 보았을 때, 대회중에 생성되었음을 알 수 있었습니다. 결국 시스템위원장님과 대회 감독님이 '너네 지금 이 PC IBM에 보내버린다, 실격' 정도로 대회장 상황은 종결됩니다.
이렇게, 대회는 Eagles팀이 실격하고, 서울대팀이 월드파이널 티켓을 지키는 모양으로 끝났습니다. (짝짝짝)
(결과적으로는 서울대회쪽으로 월파 티켓이 세장 나온 꼴이 되었지만)
이제 문제는 왜 이 testcase들이 Eagles팀이 사용한 컴퓨터에 저장되어 있었느냐? 인데,
일단 몇가지 가능성을 제시해 보자면,
일단 packet sniffing으로 서버와 judge머신간에 오간 packet를 훔쳐서 testcase를 얻었다는 잠정적 결론이 나왔지만(대회장 network가 전부 dummy hub였기 때문에 일단 packet은 다 갑니다), 서버 및 PC^2 시스템 구축 담당자(글쓴이) 입장에서 최악의 시나리오는 설정미스로 PC^2 서버가 돌아가던 컴퓨터 보안이 뚫린 경우입니다. 그렇게 되면 '이건 전부 노무현니 책임이다' 가 되면서 매우 곤란해집니다.
어쨌든 대회에서 사용된 PC^2서버가 증거물 1호, Eagles팀이 사용한 38번 PC가 증거물 2호로 채택되어 대전으로 실려내려갔고, 주말이 지난 뒤, 본격적인 수사(?) 가 시작됩니다.
일단 실마리가 될 만한 것은, Eagle팀이 자신들이 코딩한 프로그램을 전부 삭제했다는 것, 그리고, 대회 현장에 있었던 대회 도우미들(staff들)의 증언으로,
일단 프로그램을 전부 삭제했으니까, Restoration이라는 프로그램을 사용해서 PC38(Eagles팀이 사용한 컴퓨터)의 HDD에서 지워진 파일을 가능한한 전부 복구해 냈습니다. 이때 복구된 파일중에는 정체를 알 수 없는 .exe파일 다수와 windows API를 사용한 용도를 알 수 없는 C++ 소스코드가 있었습니다.
이 .exe파일들 또한 대회 중에 생성된 것이었습니다. 일단 이 파일들을 이용하여 서버를 다각도로 공격한 것이 아닌가. 라고 생각되어 대회장과 유사한 네트워크 환경을 구성하고 이 파일들을 실행해 보았지만 눈에 띄는 결과를 얻을 수 없었습니다.
어떻게 해야 할지 고민하는 동안에 다른 소식이 들어왔습니다. 채점관님들중 한분(최준수교수님)이 Eagles팀이 제출한 소스코드중 하나를 보니, 해당 코드는 testcase크기가 작은 경우에는 DP를 돌리고, 크기가 큰 경우는 testcase에 따라 지정된 값을 출력하는 프로그램이었다고 합니다. 그리고, 그 DP코드가 다른 팀이 제출한 코드를 sniffing한 것 같다, 또한 Eagles팀이 쉬운 문제는 직접 풀었겠지만 어려운 문제의 경우 다른 팀들이 제출한 프로그램을 훔쳤을지도 모른다는 의견을 주셨습니다.
서울 지역대회는 (일단 2004년부터는 계속) 인터넷 예선과 본 대회에서 제출된 소스코드들에 대해 부산대학교 모 연구실에 의뢰하여 표절검사를 실시하고 있습니다. 이번에도 부산대학교 조환규교수님을 통해서 의뢰를 하였고, 빙고!!!!가 날아왔습니다. 앞에서 언급된 DP코드가 다른 팀의 소스코드를 배꼈다는 것.
결국에는 '펀잡팀이 맞춘 문제는 testcase 보고 조립한 프로그램을 제외하고는 거의 모두 100% 표절입니다.' 라는 소식이 전해졌다. 그래서 결국 아무도 맞추지 못한 문제(H. Puzzle)는 펀잡팀도 풀지 못했다는 것.
조환규교수님이 보낸 메일을 인용하자면, '그러니까 아예 cheating을 하기로 작정을 하고 온 것 같습니다. 상당히 고의적이며, 악질적인 경우라고 생각을 합니다.' 라고 한다.
이쯤에서 Eagles팀이 계속 binary코드를 보고 있었다는 것에 착안해서 Eagles팀이 사용한 PC에서 un-delete한 .exe파일들을 hex editor(사실은 gvim의 hex editor모드)를 이용하여 살펴보았더니 그 파일들에서 서버와 채점용 pc가 주고받은 data들과 다른 참가자 컴퓨터에서 제출한 소스코드가 발견되었다.
그 파일들이 바로 패킷들을 저장해둔 파일이었던 것.
이렇게, 글쓴이는 이번 사태가 글쓴이의 책임이 아님을 입증하여 올해도 무사히-_- 넘어갈 수 있었습니다?
to be continued...

서울 대회 채점은 채점관 한분이 문제 하나를 맡아서 채점하기 때문에, 어택이 뜸한 문제를 출제한 분들은 심심합니다? (그래서?) Eagles팀이 제출한 소스코드를 읽어보던 채점관님 曰, '이건 뭔가 이상하다. test input/output을 알지 못하고서는 이런 프로그램을 작성할 수 없다.'
그러자 대회 감독님이 대회장으로 올라가서, Eagles팀이 사용하던 컴퓨터를 사용하지 못하게 하고, 그 근처에 로밍하고 있던 모retired님을 풀링해와서 컴퓨터 조사를 시키면서 사건이 시작되었습니다. 팀 코치 입장에서는 갑자기 대회감독이 뛰어와서 학생들이 컴퓨터를 못만지게 하더니, 뒤에서 구경하고 있던 사람을 데려다가 컴퓨터를 만지게 하더니, 어뷰징을 했다고 주장하니 기가막힐 노릇이라 대판 싸운듯 합니다. 왠간하면 근처에 있던 staff중 한명에게 시켰으면 좋았을텐데요.
문제가 되는 프로그램은 전부 2개. 한 프로그램에서는 배열에 저장된 문자들을 3개씩 건너뛰면서 출력하고 있었고, 다른 프로그램에서는 어떤 test input이 입력되는지를 if문으로 비교하면서 testcase가 작으면 DP를 돌리고 그렇지 않으면 특정 값을 찍고 있었습니다. 이 프로그램을 두고, 대회 본부측에서는 testcase를 입수해서 사용했다는 증거라고 주장한 반면, Eagles팀은 팀에서 연구해서 만들어낸 값이라고 주장하였습니다.
어쨌든, Eagles팀이 사용한 컴퓨터에서 채점할 때 사용되는 testcase들이 저장된 파일이 발견되었습니다. Eagles팀은 '이 파일들은 대회 시작할 때 부터 컴퓨터에 저장되어 있었다' 라고 주장했지만, 해당 정보를 담고 있는 파일들은 파일 생성 시각을 보았을 때, 대회중에 생성되었음을 알 수 있었습니다. 결국 시스템위원장님과 대회 감독님이 '너네 지금 이 PC IBM에 보내버린다, 실격' 정도로 대회장 상황은 종결됩니다.
이렇게, 대회는 Eagles팀이 실격하고, 서울대팀이 월드파이널 티켓을 지키는 모양으로 끝났습니다. (짝짝짝)
(결과적으로는 서울대회쪽으로 월파 티켓이 세장 나온 꼴이 되었지만)
이제 문제는 왜 이 testcase들이 Eagles팀이 사용한 컴퓨터에 저장되어 있었느냐? 인데,
일단 몇가지 가능성을 제시해 보자면,
- PC^2 서버나 채점용 컴퓨터의 보안이 뚫렸다.
- 다른 참가자들이 고의적으로 Eagles팀의 PC를 해킹해서 문제가 된 파일들을 집어넣었다.
- Eagles팀이 packet sniffing을 했다.
- 대회가 시작되기 전에 어떤 방식으로든 testcase가 유출되었다.
일단 packet sniffing으로 서버와 judge머신간에 오간 packet를 훔쳐서 testcase를 얻었다는 잠정적 결론이 나왔지만(대회장 network가 전부 dummy hub였기 때문에 일단 packet은 다 갑니다), 서버 및 PC^2 시스템 구축 담당자(글쓴이) 입장에서 최악의 시나리오는 설정미스로 PC^2 서버가 돌아가던 컴퓨터 보안이 뚫린 경우입니다. 그렇게 되면 '이건 전부 노무현니 책임이다' 가 되면서 매우 곤란해집니다.
어쨌든 대회에서 사용된 PC^2서버가 증거물 1호, Eagles팀이 사용한 38번 PC가 증거물 2호로 채택되어 대전으로 실려내려갔고, 주말이 지난 뒤, 본격적인 수사(?) 가 시작됩니다.
일단 실마리가 될 만한 것은, Eagle팀이 자신들이 코딩한 프로그램을 전부 삭제했다는 것, 그리고, 대회 현장에 있었던 대회 도우미들(staff들)의 증언으로,
- Eagles팀은 코딩을 하는 것은 거의 볼 수 없었고, 화면에는 소스코드가 아닌 binary가 떠 있었다고 합니다. 그 binary가 무엇이냐고 물어보니, 디버그를 하고 있었다고 대답했다고 합니다.
- 세명이 전부 문제를 풀고 있는게 아니고, 한명은 누가 접근하는지 보고 있었다고 합니다.
일단 프로그램을 전부 삭제했으니까, Restoration이라는 프로그램을 사용해서 PC38(Eagles팀이 사용한 컴퓨터)의 HDD에서 지워진 파일을 가능한한 전부 복구해 냈습니다. 이때 복구된 파일중에는 정체를 알 수 없는 .exe파일 다수와 windows API를 사용한 용도를 알 수 없는 C++ 소스코드가 있었습니다.
이 .exe파일들 또한 대회 중에 생성된 것이었습니다. 일단 이 파일들을 이용하여 서버를 다각도로 공격한 것이 아닌가. 라고 생각되어 대회장과 유사한 네트워크 환경을 구성하고 이 파일들을 실행해 보았지만 눈에 띄는 결과를 얻을 수 없었습니다.
어떻게 해야 할지 고민하는 동안에 다른 소식이 들어왔습니다. 채점관님들중 한분(최준수교수님)이 Eagles팀이 제출한 소스코드중 하나를 보니, 해당 코드는 testcase크기가 작은 경우에는 DP를 돌리고, 크기가 큰 경우는 testcase에 따라 지정된 값을 출력하는 프로그램이었다고 합니다. 그리고, 그 DP코드가 다른 팀이 제출한 코드를 sniffing한 것 같다, 또한 Eagles팀이 쉬운 문제는 직접 풀었겠지만 어려운 문제의 경우 다른 팀들이 제출한 프로그램을 훔쳤을지도 모른다는 의견을 주셨습니다.
서울 지역대회는 (일단 2004년부터는 계속) 인터넷 예선과 본 대회에서 제출된 소스코드들에 대해 부산대학교 모 연구실에 의뢰하여 표절검사를 실시하고 있습니다. 이번에도 부산대학교 조환규교수님을 통해서 의뢰를 하였고, 빙고!!!!가 날아왔습니다. 앞에서 언급된 DP코드가 다른 팀의 소스코드를 배꼈다는 것.
결국에는 '펀잡팀이 맞춘 문제는 testcase 보고 조립한 프로그램을 제외하고는 거의 모두 100% 표절입니다.' 라는 소식이 전해졌다. 그래서 결국 아무도 맞추지 못한 문제(H. Puzzle)는 펀잡팀도 풀지 못했다는 것.
조환규교수님이 보낸 메일을 인용하자면, '그러니까 아예 cheating을 하기로 작정을 하고 온 것 같습니다. 상당히 고의적이며, 악질적인 경우라고 생각을 합니다.' 라고 한다.
이쯤에서 Eagles팀이 계속 binary코드를 보고 있었다는 것에 착안해서 Eagles팀이 사용한 PC에서 un-delete한 .exe파일들을 hex editor(사실은 gvim의 hex editor모드)를 이용하여 살펴보았더니 그 파일들에서 서버와 채점용 pc가 주고받은 data들과 다른 참가자 컴퓨터에서 제출한 소스코드가 발견되었다.
그 파일들이 바로 패킷들을 저장해둔 파일이었던 것.
이렇게, 글쓴이는 이번 사태가 글쓴이의 책임이 아님을 입증하여 올해도 무사히-_- 넘어갈 수 있었습니다?
to be continued...
태그 : ACM-ICPC










덧글
lazyboy 2007/12/26 13:29 # 답글
초동수사에서는 근처에 있던 staff-_-였던 저도 같이 했습니다 긁적 ^^a덧붙여, Eagles팀이 G번에서 judge output을 printf로 출력하게 했던 솔루션을 그대로 H번에 제출했는데, 그것 또한 server - judge 사이의 통신을 유발시켜서 input/output을 가로채기 위했을 확률이 높습니다. H번의 input/output은 38번 PC에 그대로 있었고요.
제가 최준수교수님에게 보낸 진술서에 썼던 추리가 전부 맞아서 기쁩니다(?)
Josh 2007/12/26 17:00 # 답글
저는 서버담당이라 대회진행중에는 위에 올라가보지 못해서, 초동수사때 어떤 일이 있었는지 직접 보지 못하고 '카더라'만 들을 수 있었습니다. 위에서 보고 내려온 사람들이, staff아닌 사람이 컴퓨터를 만져서 시끄러웠다. 라고 해서 위와 같은 맥락으로 글을 썼습니다.하지만 지금 듣고 보니 어느정도 staff를 뽑은 의도가 맞아떨어져서 기쁩니다(?)