æ»æãããäŒç€Ÿãorganization.orgãã¡ã€ã³ãææããŠãããportal.organization.orgå éšãªãœãŒã¹ããã®äŒç€Ÿå ã§äœ¿çšãããŠãããšæ³åããŠãã ããã æ»æè ã®ç®æšã¯ããŠãŒã¶ãŒã®è³æ Œæ å ±ãååŸããããšã§ããããã®ããã«ãäŒç€Ÿã§äœ¿çšãããŠããé»åã¡ãŒã«ãŸãã¯ã¡ãã»ã³ãžã£ãŒãä»ããŠãªã³ã¯ãéä¿¡ããŸãã
ãã®ãããªã¡ãã»ãŒãžãé«ã確çã§åä¿¡ããããããªã³ã¯ãã©ããééã£ãå Žæã«ã€ãªããããšã«æ°ä»ããªãå ŽåããããŸãã ãªã³ã¯ãã¯ãªãã¯ãããšããŠãŒã¶ãŒåãšãã¹ã¯ãŒããèŠæ±ããã被害è ã¯èªåãå éšãªãœãŒã¹ã«ãããšèããŠãã¢ã«ãŠã³ãæ å ±ãå ¥åããŸãã ç¹ã«åŸæ¥å¡ã®ã·ã¹ãã ã䟵害ããã·ã¹ãã 管çè ã®ç¹æš©ãæ±ããŠæŠã£ãŠããå Žåãæ»æè ãæ¢ã«å¢çã«äŸµå ¥ããŠããå Žåãæ»æè ã®å¯èœæ§ã¯ç¹ã«é«ããªããŸãã
絶察çãªãæãè ã«å¯Ÿããé²åŸ¡ããèãåºãããšã¯äžå¯èœã§ãããDNSãªã¯ãšã¹ããä»ããŠååã解決ãã段éã§ããã®æ»æãé»æ¢ããããšããããšãã§ããŸãã
ä¿è·ã®ããã«ãã€ã³ã¿ãŒã»ãããããDNSèŠæ±ã§æ€åºãããååãé çªã«èšæ¶ããå¿ èŠããããŸãã äŒç€Ÿã¯ç€Ÿå ãªãœãŒã¹ã䜿çšããŠãããããportal.organization.orgãžã®ãªã¯ãšã¹ãã§ããã«ç¢ºèªã§ããŸãã 以åã«åºäŒã£ãååãšã䌌ããååã«åºäŒããšããã«ãæ»æè ã®IPã¢ãã¬ã¹ã®ä»£ããã«ãšã©ãŒãè¿ãããšã§dnså¿çã眮ãæããããšãã§ããŸãã
ãé¡äŒŒæ§ãã決å®ããããã®ã¢ã«ãŽãªãºã ã¯äœã§ããïŒ
- UTS39 Confusable DetectionïŒhttp://www.unicode.org/reports/tr39/#Confusable_DetectionïŒUnicodeã¯ã
貎éãªãã¡ãŒã·ã³ãã«ããŒãã«ã§ããã ãã§ãªããå€ãã®æšæºãšæšå¥šäºé ã§ããããŸãã UTS39ã¯ããŠãã³ãŒãæååãæ£èŠåããã¢ã«ãŽãªãºã ãå®çŸ©ããŸãããã®ã¢ã«ãŽãªãºã ã§ã¯ããã¢ã°ãªããç°ãªãæååïŒããšãã°ããã·ã¢èªã®ãaããšã©ãã³èªã®ãaãïŒãåã圢åŒã«å€æãããŸã - å éšæåã®é åã«ãã£ãŠç¹åŸŽä»ããããåèªã organization.orgãšorgainzation.orgãæ··åãããã
- 第1ã¬ãã«ãã¡ã€ã³ã®çœ®æã éåžžãååã®æåã®ã¬ãã«ã¯æå³ããªããªãããããçµç¹ããèŠãåŸã®äŒç€Ÿã®åŸæ¥å¡ã¯ãäŸå€ããããŸããã.orgãŸãã¯.netã®éããç¡èŠã§ããŸãã
ã»ãšãã©ã®å ŽåãäŒæ¥ãµãŒããŒã¯ãã€ã³ããããŸãããããã¯Webãã¹ããŸãã¯ãããã€ããŒã®æšæºã§ãããActive Directoryãåºã䜿çšãããŠãããããMicrosoft DNSãµãŒããŒã§ãã ãããŠãMicrosoft DNSãµãŒããŒã«ãã£ã«ã¿ãŒãæžã蟌ããšãã«æåã«ééããåé¡-DNSèŠæ±ããã£ã«ã¿ãŒåŠçããããã®APIãèŠã€ãããŸããã§ããã ãã®åé¡ã¯ããŸããŸãªæ¹æ³ã§è§£æ±ºã§ããŸãããœã±ããäœæ¥APIã§dllã€ã³ãžã§ã¯ã·ã§ã³ãšIATããã¯ãéžæããŸããã
æ¹æ³è«ãç解ããã«ã¯ãPE圢åŒã®ç¥èãå¿ èŠã«ãªããŸãã詳现ã«ã€ããŠã¯ãããšãã°ãã¡ããã芧ãã ãã ã å®è¡å¯èœãã¡ã€ã«ã¯ãããããŒãã»ã¯ã·ã§ã³ã®ããŒãã«ãããã³ã»ã¯ã·ã§ã³èªäœã§æ§æãããŸãã ã»ã¯ã·ã§ã³èªäœã¯ãããŒããŒãçžå¯Ÿã¢ãã¬ã¹ïŒçžå¯Ÿä»®æ³ã¢ãã¬ã¹-RVAïŒã§ã¡ã¢ãªã«ãããããå¿ èŠãããããŒã¿ãããã¯ã§ããããã¹ãŠã®ãªãœãŒã¹ãã³ãŒãããã®ä»ã®ããŒã¿ã¯ã»ã¯ã·ã§ã³ã«å«ãŸããŠããŸãã ãŸããããããŒå ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãæ©èœããããã«å¿ èŠãªå€æ°ã®ããŒãã«ãžã®ãªã³ã¯ïŒRVAïŒããããŸãããã®èšäºã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ãã€ã³ããŒãããŒãã«ãšãšã¯ã¹ããŒãããŒãã«ã®2ã€ãéèŠã§ãã ã€ã³ããŒãããŒãã«ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®åäœã«å¿ èŠãªé¢æ°ã®ãªã¹ããå«ãŸããŠããŸãããä»ã®ãã¡ã€ã«ã«ãããŸãã ãšã¯ã¹ããŒãããŒãã«ã¯ããã®ãã¡ã€ã«ãããšã¯ã¹ããŒããããé¢æ°ã®ãªã¹ããå«ãããªããŒã¹ãããŒãã«ã§ãããšã¯ã¹ããŒããã©ã¯ãŒãã£ã³ã°ã®å ŽåãäŸåé¢ä¿ã解決ããããã«ãã¡ã€ã«åãšé¢æ°åãæå®ãããŸãã
ãã¹ãŠã®éå±ãªCreateRemoteThreadãªãã§è¡ãã€ã³ãžã§ã¯ã·ã§ã³dllã PEãšã¯ã¹ããŒããã©ã¯ãŒãã£ã³ã°ã䜿çšããããšã«ããŸãã-ããã¯ãç®çã®ããã»ã¹ãèµ·åããããã«ãexeãã¡ã€ã«ã®ã€ã³ããŒãããŒãã«ããä»»æã®dllã®ååãšåãååã®exeãã¡ã€ã«ãå«ããã£ã¬ã¯ããªã«dllãäœæããããšãã«ããç¥ãããææ³ã§ãïŒäž»ãªãã®ã¯HKEY_LOCAL_MACHINE \ System \ã䜿çšããªãããšã§ãïŒ CurrentControlSet \ Control \ Session Manager \ KnownDLLsïŒã äœæãããdllã§ã¯ããšã¯ã¹ããŒãããŒãã«ã¯ã¿ãŒã²ããdllããã³ããŒãããŸããããšã¯ã¹ããŒããããé¢æ°ã®ã³ãŒããžã®ãã€ã³ã¿ãŒã®ä»£ããã«ãRVAããendpointïŒSendtoãã®åœ¢åŒã®è»¢éè¡ã«æžã蟌ãå¿ èŠããããŸãã Microsoft DNSãµãŒããŒèªäœã¯ãïŒ systemrootïŒ \ system32 \ dns.exeã«ãããµãŒãã¹HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ services \ DNSãšããŠå®è£ ãããŸãã
dnsãµãŒããŒã§ã®æçµçãªæ³šå ¥ã¢ã«ãŽãªãºã ã¯æ¬¡ã®ãšããã§ãã
- ïŒ systemrootïŒ \ system32 \ dnsfltãã£ã¬ã¯ããªãäœæããŸãïŒä»ã®ãã£ã¬ã¯ããªã䜿çšã§ããŸããsystem32ã§ãã£ã¬ã¯ããªãèŠã€ããããšã¯ãªãã·ã§ã³ã§ãïŒã
- ïŒ systemrootïŒ \ system32 \ dnsapi.dllãã³ããŒããŸã-ããã¯dns.exeãäœããã€ã³ããŒãããdllã§ããä»ã®ãdo n't notknowndllããéžæã§ããŸãã
- ã³ããŒããdllã®ååãendpoint.dllã«å€æŽããŸãããã®ååã転éè¡ã§äœ¿çšããŸãã
- æ¿å ¥ãããdllãååŸããé©åãªãšã¯ã¹ããŒãããŒãã«ãè¿œå ããdllãïŒ systemrootïŒ \ system32 \ dnsfltã«ã³ããŒããŸã
- ã¬ãžã¹ããªã®ããŒHKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ services \ DNSã§ãImagePathã®æ°ãããã€ããªã¢ãã¬ã¹ïŒ systemrootïŒ \ system32 \ dnsflt \ dns.exeãå€æŽããŸãã
- ïŒ systemrootïŒ \ system32 \ dnsflt \ dns.exeããïŒ systemrootïŒ \ system32 \ dns.exeãžã®ã·ã³ããªãã¯ãªã³ã¯ãäœæããŸã
æåŸã®ã¹ãããã¯ãªãã§ããïŒ å®éã«ã¯ãWindowsã«ã¯çµã¿èŸŒã¿ã®ãã¡ã€ã¢ãŠã©ãŒã«ããããããã©ã«ãã§ã¯ãWindowsãµãŒããŒã«ã¯ïŒ systemrootïŒ \ system32 \ dns.exeã¢ããªã±ãŒã·ã§ã³ã®ã¿ãããŒã53ããªãã¹ã³ããæš©å©ãæã£ãŠããŸãã å¥ã®ãã£ã¬ã¯ããªããèµ·åããããšãããšããããã¯ãŒã¯ã«ã¢ã¯ã»ã¹ããæš©å©ããªããªããŸãã ãªãã³ããŒããã®ã§ããïŒ ã·ã¹ãã å šäœãžã®åœ±é¿ãæå°éã«æããå ã®dnsapi.dllã«è§Šããªãããã«ããããã ã¢ããªã±ãŒã·ã§ã³ã®ã·ã³ããªãã¯ãªã³ã¯ãäœæã§ããã°ããã®ãããã¯ãŒã¯æš©éãååŸã§ããããšãããããŸãã æ¢å®ã§ã¯ã管çè ã®ã¿ãã·ã³ããªãã¯ãªã³ã¯ãäœæããæš©å©ãæã£ãŠããŸããããŠãŒã¶ãŒã«ã·ã³ããªãã¯ãªã³ã¯ãäœæããæš©å©ãäžãããšãçµã¿èŸŒã¿ã®ãã¡ã€ã¢ãŠã©ãŒã«ããã€ãã¹ã§ããããšã«æ°ä»ãã®ã¯äºæ³å€ã§ãã
DllMainããããã»ã¹ã«èªã¿èŸŒãã åŸãã¹ããªãŒã ãäœæããã€ã³ã¿ãŒã»ãããèšå®ã§ããŸãã æãåçŽãªå ŽåãdnsãµãŒãã¹ã¯ãws2_32.dllã®sendtoé¢æ°ãä»ããŠããŒã53ããUDPãã±ãããéä¿¡ããããšã«ãããååã®IPã¢ãã¬ã¹ãã¯ã©ã€ã¢ã³ãã«éç¥ããŸãã æšæºã§ã¯ãå¿çã倧ããããå Žåã«53åã®TCPããŒãã䜿çšã§ããå¯èœæ§ããããšæ³å®ãããŠããããã®å Žåã®sendtoã®ã€ã³ã¿ãŒã»ããã¯åœ¹ã«ç«ããªãããšã¯æããã§ãã ãã ããtcpã䜿çšããã±ãŒã¹ã®åŠçã¯ãããæéãããããŸãããåæ§ã®æ¹æ³ã§å®è¡ã§ããŸãã ä»ã®ãšãããUDPã®æãåçŽãªã±ãŒã¹ã説æããŸãã ãããã£ãŠãdns.exeã®ã³ãŒãã¯ws2_32.dllããsendtoé¢æ°ãã€ã³ããŒãããããã䜿çšããŠdnsãªã¯ãšã¹ãã«å¿çããããšãããããŸãã é¢æ°ãã€ã³ã¿ãŒã»ããããã«ã¯ããŸããŸãªæ¹æ³ããããŸããå€å žçãªæ¹æ³ã¯ã¹ãã©ã€ã·ã³ã°ã§ããæåã®sendtoåœä»€ãç¬èªã®é¢æ°ã§jmpã«çœ®ãæãããããã®å®äºåŸã«ã以åã«éä¿¡ãããsendtoåœä»€ã«ç§»è¡ããŠããsendtoé¢æ°ã®å éšã«ç§»è¡ããŸãã ã€ã³ããŒãããŒãã«ã§ã¯ãªãGetProcAddressã䜿çšããŠsendtoãåŒã³åºããŠãã¹ãã©ã€ã·ã³ã°ã¯æ©èœããŸãããã€ã³ããŒãããŒãã«ã䜿çšããå Žåã¯ãã¹ãã©ã€ã·ã³ã°ã®ä»£ããã«IATããã¯ã䜿çšããæ¹ãç°¡åã§ãã ãããè¡ãã«ã¯ãããŠã³ããŒãããdns.exeã€ã¡ãŒãžã§ã€ã³ããŒãããŒãã«ãèŠã€ããŸãã ããŒãã«èªäœã®æ§é ã¯ãããããã«ããããã詳现ã«ã€ããŠã¯PE圢åŒã®èª¬æãã芧ãã ããã
äž»ãªãã®ã¯ãã·ã¹ãã ããã€ã¡ãŒãžãããŒãããããã»ã¹ã§ãã€ã³ããŒãããŒãã«ã®sendtoé¢æ°ã®éå§ãžã®ãã€ã³ã¿ãŒãæžã蟌ãããšã§ãã ã€ãŸããsendtoåŒã³åºããã€ã³ã¿ãŒã»ããããã«ã¯ãå ã®sendtoã®ã¢ãã¬ã¹ãã€ã³ããŒãããŒãã«ã®é¢æ°ã®ã¢ãã¬ã¹ã«çœ®ãæããã ãã§ãã
ããã§ãååãèšå®ããããŒã¿ã®åä¿¡ãéå§ããŸããã sendtoé¢æ°ã®ãããã¿ã€ãã¯æ¬¡ã®ããã«ãªããŸãã
int sendto( _In_ SOCKET s, _In_ const char *buf, _In_ int len, _In_ int flags, _In_ const struct sockaddr *to, _In_ int tolen );
sãããŒã53ã®ãœã±ããã®å Žåãlenãµã€ãºã®dnså¿çã¯bufãã€ã³ã¿ãŒã«é 眮ãããŸãã 圢åŒèªäœã¯RFC1035ã§èª¬æãããŠããŸããç®çã®ããŒã¿ãååŸããããã«å¿ èŠãªããšãç°¡åã«èª¬æããŸãã
æšæºã®ã¡ãã»ãŒãžæ§é ã¯æ¬¡ã®ãšããã§ãã
å¿ èŠãªæ å ±ã®ããããŒïŒã¡ãã»ãŒãžã¿ã€ãããšã©ãŒã³ãŒããããã³ã»ã¯ã·ã§ã³å ã®èŠçŽ æ°ã ã¿ã€ãã«èªäœã¯æ¬¡ã®ããã«ãªããŸãã
struct DNS_HEADER { uint16_t id; // identification number uint8_t rd : 1; // recursion desired uint8_t tc : 1; // truncated message uint8_t aa : 1; // authoritive answer uint8_t opcode : 4; // purpose of message uint8_t qr : 1; // query/response flag uint8_t rcode : 4; // response code uint8_t cd : 1; // checking disabled uint8_t ad : 1; // authenticated data uint8_t z : 1; // its z! reserved uint8_t ra : 1; // recursion available uint16_t q_count; // number of question entries uint16_t ans_count; // number of answer entries uint16_t auth_count; // number of authority entries uint16_t add_count; // number of resource entries };
åçãåŸãã«ã¯ã質åã»ã¯ã·ã§ã³ã解æããå¿ èŠããããŸãã ã»ã¯ã·ã§ã³èªäœã¯ãããããŒïŒq_countïŒã«ç€ºãããŠããæ°ã®ãããã¯ã§æ§æãããŸãã åãããã¯ã¯ããªã¯ãšã¹ãã®ååãã¿ã€ããããã³ã¯ã©ã¹ã§æ§æãããŸãã ååã¯æååã®ã·ãŒã±ã³ã¹ãšããŠãšã³ã³ãŒããããåæååã¯æååã®é·ãã®ãã€ãã§å§ãŸããŸãã æåŸã¯é·ããŒãã®æååã§ãã ããšãã°ãhomedomain2008.ruãšããååã¯æ¬¡ã®ããã«ãªããŸãã
Answersã»ã¯ã·ã§ã³ã¯äŒŒãŠããŸãããããã¯ã¯ãååãã¿ã€ããã¯ã©ã¹ãTTLãè¿œå ããŒã¿ã§æ§æãããŠããŸãã IPã¢ãã¬ã¹ã¯addã«å«ãŸããŸãã ããŒã¿ã ååã®è§£æã«ã¯å¥ã®å°é£ããããŸãã ã©ããããã©ãã«ã®é·ãã®ä»£ããã«ã¡ãã»ãŒãžã®ãµã€ãºãå°ããããããã«ãå¥ã®ããŒã¿é åãžã®ãªã³ã¯ãèŠã€ããããšãã§ããŸãã 次ã®ããã«ãšã³ã³ãŒããããŸããé·ãã®æäžäœ2ãããã11ã®å Žåã次ã®ãã€ããšé·ãã®æäžäœãããã¯ãã¡ãã»ãŒãžã®å é ãåºæºãšãããã€ãåäœã®ãªãã»ãããšããŠè§£éãããå¿ èŠããããŸãã ãã®ãªãã»ãããè¶ ããŠãååã®ãããªãåæãè¡ãå¿ èŠããããŸãã
ãããã£ãŠãå¿ èŠãªAPIãã€ã³ã¿ãŒã»ããããdnsã®åçã解æããŸããã次ã«ããã®åçãããã«ã¹ãããããããšã©ãŒãè¿ããšãã決å®ãäžãå¿ èŠããããŸãã ããŒã¿ããŒã¹ã«ãŸã ååšããªãååããšã«ãåçãããçãããããã©ããã確èªããå¿ èŠããããŸãã
Unicode Technical Standard tr39ã®ã¹ã±ã«ãã³é¢æ°ã®çµæãããŒã¿ããŒã¹å ã®ä»»æã®ååã®çµæãšäžèŽããååããŸãã¯å éšæåã䞊ã¹æ¿ããããšã«ããããŒã¿ããŒã¹ã«ååšããååãšç°ãªãååããçãããããšèŠãªããŸãã ãã§ãã¯ãå®è£ ããããã«ã2ã€ã®ããŒãã«ãä¿åããŸãã æåã®ãã®ã¯ããŒã¿ããŒã¹ããã®ãã¹ãŠã®ååã®ã¹ã±ã«ãã³çµæã§æ§æãããŸãã2çªç®ã®è¡šã§ã¯ãæåã®ã¬ãã«ãé€ãåã©ãã«ããæåãšæåŸã®æåãåé€ããåã©ãã«ã®æ®ãã®æåã䞊ã¹æ¿ããããšã«ãããããŒã¿ããŒã¹è¡ããååŸããè¡ãæžã蟌ã¿ãŸãã ããã§ãæ°ããååã2ã€ã®ããŒãã«ã®ããããã«å«ãŸããŠããå ŽåãçããããšèŠãªããŸãã
ã¹ã±ã«ãã³é¢æ°ã®æå³ã¯ã2è¡ã®é¡äŒŒæ§ãå€å¥ããããšã§ãããã®ãããæåã¯åè¡ã«å¯ŸããŠæ£èŠåãããŸãã ããšãã°ãXlÅã¯Xloeã«å€æããããããé¢æ°ã®çµæãæ¯èŒããŠãUnicodeæååã®é¡äŒŒæ§ãå€æã§ããŸãã
äžèšã®å®è£ äŸã¯githubã«ãããŸãã
ã€ã³ã¿ãŒã»ããã«é¢ããå°ããªæè¡çãªåé¡ã«å ããŠããé¡äŒŒãããååã®æ€åºã«ã¯ããã«å€§ããªåé¡ããããããå®éã«æŠèª¬ããããœãªã¥ãŒã·ã§ã³ã§ã¯éåžžã®ä¿è·ãæäŸã§ããŸããã åŠçããã®ãããã§ãããïŒ
- é åãšãã¢ã°ãªãã®çµã¿åããã
- ã¹ã±ã«ãã³ã«ã«ãŠã³ããããªãæåã眮ãæãã\ãè¿œå ããŸãã
- UTS tr39ã¯ã¹ã±ã«ãã³ã«éå®ãããã1ã€ã®ã©ãã«ã§æåã»ããã®æ··åãå¶éã§ããŸãã
- æ¥æ¬èªã®å šè§ãã€ã³ãããã³ãã®ä»ã®ã©ãã«åºåãæåã
- rnicrosoft.comã®ãããªãã°ããããã®