~미스터리라 하지 말지어다~ 보셨나요? 보려던 참이랍니다.
저의 스펙타클 설날 연휴를 말씀드리겠습니다. 사실 안 그럴 수도 있는데 저는 스펙타클했음.
이것은 워드프레스 보안 취약점, REST api에 관련된 이야기입니다. 전문성은 떨어집니다. 그냥 제가 어떻게 대처하느라 고생했는지 설명해보겠습니다…+호스팅 업체와의 대화, 젯팩(Jetpack)의 cron 오류와 test 계정이 계속해서 생성되는 오류에 관련된 이야기도 있습니다.
1.REST api
REST api라는 것이 워드프레스에 있어요. 요것은 워드프레스의 블록 체계나… 덕분에 플러그인에서도 대박 많이 쓰이는 api인데요. 이 녀석이 있어야 위젯관리건 글쓰기건 댓글이건, 플러그인 운영이건 편리하게 할 수 있다고 생각하시면 됩니다. (예시 : jetpack의 동기화나 통계도 이쪽에 신세를 진답니다. 제가 REST api 막았다가 안되길래 알았어요 ^-^ 죽을맛)
그런데 얘가 보안상 취약점이 많아요. 특히 api로 생성된 주소를 알고 있기만 하면 유저의 아이디같은 것을 파악할 수도 있고, 그를 통해서 해킹을 시도할 수 있거든요. 권한이 없는 사용자도 링크만 알면 접속이 가능하다는 점에서 링크를 자체적으로 수정해두거나, 아예 막아두는 플러그인을 깔아서 사용하지 않을 때는 막아두는 것이 가장 적절한 방법일 겁니다.
검색해보시면 REST api를 관리하는 방법 등등이 나오는데, 이 경우에도 플러그인 내부에서 해당 api를 불러올 때가 많기 때문에 매번 플러그인, 테마 업데이트마다 수정해주지 않으면 충돌할 가능성이 높습니다. 양쪽 모두 업데이트를 하며 덮어씌워지기 때문에 그게 또 매번 해야되는 고행이 되는 거예요. 차일드 테마가 있긴 하지만 저는 이쪽에서도 오류를 너무 자주 겪어보았습니다… 제가 온갖 짓을 하다가 그냥 이 친구랑 공존하기로 선택한 이유이죠… 물론 보안대처는 이것저것 해뒀어요.
하여튼 뭔일이 있었는지 되돌아가 봅시다.
지난 설날 연휴… 설날을 맞이하고 나자마자 자꾸 홈페이지에서 짱나게 알림이 왔습니다. 다행히 뭐가 털렸다! 는 알림은 아니었는데요, 그러려고 시도하는 녀석들이 많다는 알림이었어요.
자꾸 해외에서 계정을 만들려고 (분명 광고 뿌리려는 것임) 회원가입을 시도하고 있던 것입니다… 커피를 마시느니 옷에 쏟는게 아침에 일어나기 좋다고, 제가 새해 내내 아침에 잘 일어날 팔자인지 첫 아침부터 늦잠도 안자고 벌떡 일어났습니다. 아직 큰일이 안났다? 그럼 곧 날지도 모른다는 거 아니겠어요…!
저는 그리하여 저희집 사이트를 검사부터 돌리고 (VirusTotal에서 검사했습니다.) FTP 서버를 들어가서 php 위아래로 싹 뒤졌습니다. 눈에 불켜고 뒤지고 있자니 사람이, 역시 독을 먹고 죽는 건 안무섭지만 ‘네 홍차에 독을 탔고 넌 하루 뒤에 죽는다. 하지만 해독제가 있을지도?’ 이런 말을 듣는게 더 신경증 걸리는 협박인 것 같다고 느꼈어요. 저도 남한테 협박할 일이 있으면 참고해야겠어요… (할일도 없겠지만, 사실 여기서 교훈을 얻고 싶어요.)
일단 거기엔 별 문제가 없었는데. 그럼 아직 시도만 하고 있다는 결론이 섰습니다. 그리하여,
지금 로그인창만 보셔도 알 수 있으시겠지만 그 사이에 인증체계가 몇중이 되고 말았답니다. reCAPTCHA에다가 회원가입 인증제까지 도입되고만 저의 사이트…(조금 더 가볍게 운영하고 싶었던지라 reCAPTCHA 플러그인은 Login No Captcha reCAPTCHA을 썼고, 로그인 승인 관련해서는 New User Approve을 사용했습니다. 제법 잘 돌아가고 충돌하지 않으니 추천드립니다.) 이렇게까지 할 생각이 없었는데 사람이, 하필 회원가입을 받기 시작했더니 불안해져서 ㅠㅋ 여기저기 온갖거를 붙여서 만들어놓고 젯팩의 보안이 영 아니다 싶어 보안 플러그인까지 깔았지 뭐예요.
이제 글작성 안할때면 REST api도 막아두려고까지 생각했었지만, 워드프레스 사이트 플러그인의 특성상 어렵겠더라고요. 하지만 만약 사용하는 플러그인 자체가 적으시다면 해당 api를 글작성 할때를 제외하고는 아예 막아두고 비활성, 활성을 반복하는 것도 방법이긴 합니다. 저는 Disable WP REST api를 사용했었어요. (지금은 잠깐 포기) 효과는 끝내주는 대신 정말 ‘모든 걸’ 막아버립니다. 젯팩도 보안프로그램도, 글쓰기도…근데 댓글란은 살아있어요. 게시판도 살아있습니다. 웃기죠? 추천드립니다.
그래도 마음에 걸리실 분들을 위해… REST api 관련해서 수동으로 관리하는 법을 서술해둔 블로그가 있어서 그것도 첨부해둡니다. (기본 실행을 막는 법, 워드프레스 REST API 인증과 제한 및 제어)
2.젯팩은 왜 자꾸 오류를 내는가
젯팩이 cron 관련해서 오류를 내는 분 계신가요? 저는 그랬습니다. 결국 씨름 끝에 젯팩을 제거해버렸지만, 그래도 관련해서 워드프레스 포럼을 헤매고 다녔던지라 이런저런 이야기를 해볼게요.
영문으로는 ‘The scheduled event, jetpack_sync_full_cron, is late to run.’ 라고 뜨는 오류가 있습니다. 사이트 건강상태에서 확인이 가능해요. 해당 이벤트가 언제나 문제가 되는 것은 아니지만, 많은 경우 사이트를 느리게 만들어요. 영문 포럼에서는 동기화와 관련된 오류라고 추측하는 것 같더라고요. 저희 호스팅 업체에서는 모종의 마침 이것과 자동 업로드 예약과 관련된 문제라고 파악했습니다. 엑세스 로그에 꾸준히 들어온 것이 이 둘이거든요. 아무래도 DB 백업이든 뭐든 그것과 관련된 것이 아닐까요…
해결방법으로 나온 건 크게 이렇습니다.
- 호스팅 업체에 문의해서 충돌하거나 부하가 걸리게끔하는 문제를 정확히 파악하기
- 젯팩을 재설치하고, 플러그인 전체를 비활성화한 다음에, 하나씩 재실행하면서 젯팩과 충돌하는 것을 찾기.
영문 포럼에서 같은 문제를 겪던 사람들의 링크를 첨부합니다.
https://wordpress.org/support/topic/jetpack-scheduled-event-late-to-run-and-then-site-health-stuck/
https://wordpress.org/support/topic/jetpack-sync-slowing-down-site/
양쪽 모두 젯팩과의 동기화나 활성화를 포기했고, 저도 포기하긴 했습니다. 젯팩이 무거운 플러그인이긴 하기때문에, 가능하시다면 보안, SEO, 애널리틱스 등의 사용처를 분산해서 젯팩 외의 플러그인을 활용해보는 방안도 추천드려요. 저같은 경우는 상업블로그가 아니기 때문에 SEO는 포기했지만요. 애초에 젯팩의 통계가 그리 믿음직스럽지도 않았기 때문에 애널리틱스는 다른 사이트에 의탁하여 직접 FTP 서버에 업로드하고 수정하는 방식을 사용했어요. 보안은 이런저런 믿음직스러운 플러그인이 많지만 이것또한 무겁긴 해요.
제가 추천드리는 보안 플러그인은 iTHEMES SECURITY입니다. (사유: 그나마 가벼워서) 위에서 제가 취한 로그인 관련 조치들도 회원가입을 받는 사이트라면 그럭저럭 효과가 있을 겁니다. 이쪽에 REST api를 막는 자체적인 기능도 있어요.
그래서 테스트 계정은 왜 무작위로 생겨났느냐?
wp-cron.php의 문제같습니다. 예약글, 자동업데이트와 관련된 것인데, 엑세스 로그에 해당 링크가 꾸준히 기록되고 있더라고요. 제가 안그래도 걸어둔 예약으로 인해 주기적으로 제 사이트를 확인하고 있는 링크는 젯팩과 이쪽뿐이었다보니…wp-cron.php와 관련된 글은 여기있습니다. 이 기능이 보안 뿐만 아니라 성능과도 관련이 있다지 뭐예요? 참고참고.
저런 것들을 파악하느라 저의 연휴의 절반 정도가 꽉꽉 날아갔습니다.
진짜 끝내주는 하루하루를 보냈네요. 다행히 저 놀람덕분에 아침에 잘 깨는 새나라의 어른이 되긴 했어요. 새벽 5시 반에 일어나는 삶은 언제나 제법 만족스럽습니다.
이 고생을 하면서도 저는 홈페이지가 제법 재밌고 안락하네요. 모르는 걸 알아가는 과정이 이상하게 즐겁습니다. 저같은 사람이 어딘가엔 또 있겠죠? 저만 변태가 아닐거예요. 여튼간에 액땜했다고 생각하며 아침부터 이 고통의 연대기를 적습니다.
언제나 그렇듯 워드프레스 포럼과… 수많은 티스토리 블로그가 저를 살렸습니다. 인터넷으로 만든 블로그… 인터넷에 감사합니다.
사랑해요, 그… 얼굴도 이름도 모르는 여러분.