DOE AGORA Qualquer valor

Esta é a primeira parte dos tutoriais OSINT ofensivos para cobrir o treinamento (técnico e intelectual)

Боевой OSINT s01e01 - OSINT & RDP

Esta é a primeira parte dos tutoriais OSINT ofensivos para cobrir o treinamento (técnico e intelectual) e como configurar o monitoramento de vulnerabilidade do Bluekeep em hospitais usando bancos de dados Shodan e Elasticsearch.

Introdução

Esses tutoriais darão a você uma introduz as técnicas OSINT usadas por cibercriminosos para visar várias associações e pessoas por fraude e hacking. Este não será outro site com toneladas de links e descrições do que fazem, mas sim conhecimento técnico para analistas de segurança profissionais com pelo menos recursos de programação e mente analítica. Eu gostaria de mostrar todas as categorias OSINT - mídia social, mídia negra, vazamentos, espionagem industrial / corporativa e assim por diante.

Mais sobre OSINT ofensivo aqui

Este primeiro artigo da série se concentra em fazer a coisa certa - ou seja, configurar o ambiente, combinar várias ferramentas e configurar o banco de dados. Cada metodologia será apoiada por pesquisas e, nesta parte, veremos os protocolos de desktop remoto de código aberto com a vulnerabilidade do Bluekeep com foco em instituições médicas e financeiras.

Além deste artigo, mostrarei alguns truques OSINT e RDP para localizar máquinas específicas para propósitos específicos de spyware usando o preenchimento de credenciais e pesquisas reversas de imagens, então vamos começar.

Preparação

Eu sinto que tudo já foi dito sobre uma preparação psicológica para investigações OSINT e como você deve ter uma mente analítica, documentar tudo e desenvolver serviços. Claro, toda tarefa requer uma certa mentalidade, mas no final é uma mesma abordagem. Para mim, pessoal, uma abordagem de cima para baixo funciona melhor com uma ideia geral, dividindo o objetivo principal em tarefas menores e focando nos detalhes no final.

Nesse caso, o objetivo principal é encontrar serviços RDP vulneráveis ​​em instituições / financeiras que podem conter informações confidenciais e ninguém como encontrou antes. Para conseguir isso, precisamos dividi-lo em tarefas menores:

  • Obtenha informações sobre RDPs abertos
  • Armazenamento de dados
  • Execute verificações periódicas
  • Compare dados recentes com o banco de dados

Elucidar pequenos problemas permitir selecionar tecnologias específicas para pesquisa, bem como fontes de dados. Agora podemos pensar em aspectos técnicos como tipo de banco de dados (tipo, nuvem / local), linguagem de programação (incluindo IDE), serviços ou sistema operacional. Com isso em mente, podemos traduzir nossos objetivos em especificações.

  • Use Python e Shodan API para carregar informações RDP não seguras
  • Instale Elasticsearch para armazenamento de dados
  • Use um cron job para tarefas periódicas
  • Novamente, use Python para comparar novos resultados com o banco de dados

Claro que há mais, o próximo passo é determinar a melhor consulta Shodan, tempo periódico e sintonizar Elasticsearch. Este é apenas um exemplo, mas usei essa abordagem muitas vezes durante a pesquisa ou o desenvolvimento de ferramentas.

E agora já resolvemos tudo e podemos passar ao aspecto técnico.

Treinamento técnico

Esta parte requer habilidades básicas de terminal Linux e Python, mas tudo será explicado, agora podemos começar a configurar nosso banco de dados.

Elasticsearch é um mecanismo de pesquisa e análise de código aberto para todos os tipos de dados, incluindo textuais, numéricos, geoespaciais, estruturados e não estruturados.

Um torneamento do processo de instalação muito fácil; primeiro precisamos baixar e instalar a chave de assinatura

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Instale o transporte https

sudo apt-get install apt-transport-https

Salvar definições

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

e instale-o a partir do repositório

sudo apt-get update && sudo apt-get install elasticsearch

incendiado

sudo systemctl enable elasticsearch.service –now

para teste vá para

http: // localhost: 9200

Você pode encontrar uma configuração e gerenciamento adicional aqui

https://www.elastic.co/guide/en/elasticsearch/reference/current/deb.html

Python é uma das melhores linguagens para esse tipo de tarefa de script, e um bom IDE pode acelerar todo o processo de desenvolvimento e tornar nossa vida muito mais fácil. Não que as pessoas que escrevem no bloco de notas sejam ineficazes, mas o IDE é muito útil para se mover pelo código e gerenciar rapidamente o armazenamento. Meu favorito é Pycharm, ele cria um ambiente virtual separado para cada projeto, suporte núcleos, vários terminais, histórico local e muitos outros recursos.

O que você deve saber sobre este IDE são as teclas de atalho. Às vezes, quando o trabalho com o Pycharm, não toco no mouse por horas, tudo pode ser controlado com atalhos especiais e torna o trabalho extremamente fácil. Escolho o casal mais útil para o dia a dia.

2x turno - pesquise em todos os lugares

Você pode encontrar todos eles no site da Jetbrains.

OSINT e Bluekeep

Importamos os pacotes necessários para o nosso projeto

de elasticsearch importar Elasticsearch

Primeiro, precisamos criar um índice chamado rdp-monitor onde armazenaremos todos os dados.

es.indices.create (index = 'rdp-monitoring', ignore = 400)

и теперь мы можем получить информацию RDP от Shodan.

Пара вещей, которые мы должны включить

SHODAN_API_KEY = ""
query = "port:3389 org:hospital"
endpoint = "https://api.shodan.io/shodan/host/search?key="+SHODAN_API_KEY+"&query="+query+"&page="
cve = "CVE-2019-0708"
fresh = []

Fresh - это новый пустой список, который будет содержать новые (свежие) IP-адреса.

И код для извлечения хостов, уязвимых для Bluekeep

try:
    shodan_request = requests.get(endpoint)
    shodan_json = json.loads(shodan_request.text)
    for result in shodan_json['matches']:
        if not exists(result['ip_str']):
            check_each_host = requests.get("https://api.shodan.io/shodan/host/" + result['ip_str'] + "?key=" + SHODAN_API_KEY)
            check_each_host_json = json.loads(check_each_host.content)
            if 'vulns' in check_each_host_json:
                if cve in check_each_host_json['vulns']:
                    fresh.append(result['ip_str'])
                    print("New IP:" + result['ip_str'])
                    es.index(index="rdp-monitoring", id=check_each_host_json['ip_str'], body={"organization": check_each_host_json['org']})
        else:
            print("IP exists")

    if fresh:
        send_notification(fresh)

except Exception as e:
    print(e)

Он отправляет API-запрос в Shodan с запросом «port: 3389 org: hospital» (я не нашел точного придурка для Bluekeep), перебирает результаты, а затем делает еще один запрос для проверки каждого хоста на наличие CVE-2019-0708. Shodan не всегда возвращает vulns в общих результатах поиска, поэтому мы должны проверять каждый IP отдельно (check_each_host).

После этого мы проверяем, есть ли какие-либо уязвимости (уязвимости) и содержит ли этот список наш CVE-2019-0708. Если да, мы добавляем его в Elasticsearch.

es.index(index="rdp-monitoring", id=check_each_host_json['ip_str'], body={"organization": check_each_host_json['org']})
Я использую IP-адрес в качестве поля идентификатора, я делаю это для простоты и упрощения поиска без использования фильтрации источников.

Есть около 70 результатов, он проверяет только первую страницу, вы можете написать код для разбивки на страницы для получения дополнительных результатов.

Пока что мы сохранили IP-адреса и связанные с ними организации в Elasticsearch, но если скрипт будет запущен в следующий раз, он должен распознать, какие записи еще не находятся в базе данных. Для этого мы можем написать дополнительную функцию «Существует», которая используется в строке 5 приведенного выше фрагмента.

def exists(ip):
    try:
        es.get(index='rdp-monitoring', id=ip)
        return True
    except:
     return False

Он просто пытается получить документ на основе индекса и идентификатора, который в нашем случае является IP-адресом. Если запись не существует, она выдает ошибку 404, то есть, как мы можем «искать» без фильтров.

Последняя часть состоит в том, чтобы быть в курсе событий и получать почту каждый раз, когда появляется новое сообщение, для достижения этого нам нужно написать еще одну функцию, которая использует учетную запись Gmail для уведомления нас о новых машинах.

def send_notification(ips):
    body = "<h1>New IPs in hospitals with Bluekeep</h1><br>"
    ips_text = ""
    for ip in ips:
        ips_text = ips_text + "https://beta.shodan.io/host/" + ip + "<br>"
    
    msg = email.message.Message()
    msg['Subject'] = 'RDP Monitoring'
    msg['From'] = "@gmail.com"
    msg['To'] = "@gmail.com"
    msg.add_header('Content-Type', 'text/html')
    msg.set_payload(body + ips_text)
    gmail_user = "@gmail.com"
    gmail_password = ""        
        
        
    try:
        server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
        server.ehlo()
        server.login(gmail_user, gmail_password)
        server.sendmail(msg['From'], [msg['To']], msg.as_string())
        server.close()
        print('Email sent!')
        except Exception as e:
        print(e)
        print('Something went wrong...')
    pass

Это самый простой код, найденный где-то в сети и модифицированный для поддержки текстового / html-контента. По сути, сначала мы создаем информационный текст с нашими свежими IP-адресами (сохраненными в новом списке) и отправляем его на определенный адрес электронной почты. Вы должны ввести свой адрес электронной почты и пароль в коде, а также войти в свою учетную запись Gmail в браузере с того же компьютера, чтобы он работал.

После запуска новые записи появятся в Elasticsearch, и это должно выглядеть так

Вы можете поместить скрипт в cron, добавить его в свой мониторинг или объединить с другим в вашем арсенале.

Не только больницы являются ценной целью, запрос «port: 3389 org: bank» перечислит вам все RDP через порт 3389 в финансовых учреждениях, в названии которых есть «bank». Если пойти еще дальше, то использование свободного текстового поиска и таких слов, как «scada», покажет потенциальные системы промышленного контроля, а компрометация этого блока бесценна для некоторых участников угрозы.

Credential stuffing & RDP

Заполнение учетными данными обычно напоминает доступ к другим службам из-за скомпрометированных учетных данных жертвы. В большинстве случаев после массового сброса пароля киберпреступники проверяют эту же пару имени пользователя и пароля на других популярных платформах, таких как Facebook, Spotify, Netflix и т. Д. Это было предметом моего исследования в прошлом году, вы можете прочитать больше о заполнении учетных данных ниже.

https://www.offensiveosint.io/advanced-credential-stuffing-with-pepe/

Протокол удаленного рабочего стола не отличается, если кто-то использует один и тот же пароль в каждой службе, он должен знать, что он влияет на каждую личность и учетную запись в Интернете, даже самые личные, такие как доступ к персональному компьютеру через открытую RDP. Shodan использует OCR (оптическое распознавание символов) для извлечения текста из изображений, в некоторых случаях он включает имена пользователей и версию Windows.

Когда вы ищете RDP для конкретной компании и вам не повезло в их сети, не забудьте использовать метод свободного текстового поиска, компьютер может находиться в облаке и отображать имя организации в поле имени пользователя или в предупреждении безопасности.

APT используют две тактики для получения доступа к сети - нацеливание на персонал без технических знаний и знаний в области безопасности, таких как отдел кадров, для выполнения скрытой вредоносной нагрузки без обнаружения, а затем для повышения разрешений.

Ориентация на высокопоставленных лиц (генеральный директор, CISO, старшее руководство) для почти автоматического получения доступа к конфиденциальным документам зависит от разрешений жертв. Часто киберпреступники отправляют фишинговые электронные письма высшему руководству, например старшим аналитикам и инженерам, в точных секторах - медицине, правительстве, образовании или технике, но только в случае целенаправленных атак и использования фишинга.

HaveIBeenPwned & RDP

Чтобы проверить, стоит ли взламывать какой-либо RDP, основываясь на открытом имени пользователя, нам нужно запустить OSINT и навыки работы с электронной почтой.

Во-первых, давайте найдем RDP с электронной почтой в качестве учетной записи, вы можете использовать запрос «port: 3389 has_screenshot: true« gmail »» и изменить gmail на любого другого провайдера электронной почты или компанию. К сожалению, по неизвестным причинам вы не можете найти символ «@», который бы указывал весь потенциальный адрес электронной почты.

Следующий код извлекает адреса электронной почты Gmail из открытых RDP

query = "port:3389 has_screenshot:true gmail"
endpoint = "https://api.shodan.io/shodan/host/search?key="+SHODAN_API_KEY+"&query="+query+"&page="

req = requests.get(endpoint)
req_json = json.loads(req.text)

for match in req_json['matches']:
    text = match['opts']['screenshot']['text'].split("\n")
    for line in text:
        if "@" in line:
            print(line)

Быстрый поиск одного из адресов электронной почты из возвращенного списка (и снимок экрана выше) показывает, что он был скомпрометирован в 7 различных нарушениях.

Это много, и даже если пароль уникален, но не сгенерирован случайным образом, можно найти схему и угадать его доступ к RDP.

Но стоит ли эксплуатировать эту машину для каких-либо конфиденциальных материалов? Нам нужно выяснить, кто является владельцем адреса электронной почты. Быстрый поиск в Google показывает, что он [УДАЛЕНО] инженер и окончил [УДАЛЕНО].

Reverse Image search & RDP

Это также необычная техника, которую я никогда не слышал, это утомительная работа, но она может окупиться и подтвердить окончательные сомнения. Если на машине не обнаружен какой-либо адрес электронной почты и она не связана с какой-либо организацией, изображение профиля пользователя может помочь вам определить владельца машины и потенциальную ценность с точки зрения секретных документов или доступа.

Нам нужно отрезать изображение профиля от скриншота RDP и запустить его на одном из сервисов обратного поиска изображений.

В этом случае мне пришлось проверить пару сервисов для разных результатов. Люди, как и пароли, часто используют свою фотографию в различных сервисах, особенно в LinkedIn. Это один из методов отслеживания пользователей, но на этот раз он помогает сузить наш поиск до конкретных целей.

Имена пользователей RDP в формате имени и фамилии легче исследовать, вы должны искать учетные записи в социальных сетях и упоминания в Интернете об этом человеке, однако имя и имя не всегда уникальны, но изображения профиля. В этих двух случаях изображения были повторно использованы во многих социальных сетях, поэтому было легко определить, кто за этими учетными записями является старшим владельцем продукта и генеральным директором финансовой компании.

Заключение

OSINT é amplamente usado não apenas por agências de aplicação da lei e pesquisadores, mas também por cibercriminosos. Por cibercriminosos, quero dizer atores que visam pessoas e empresas específicas para obter o maior lucro possível - documentos confidenciais, dados de clientes, propriedade intelectual ou apenas dinheiro. Conhecendo seus métodos, você pode se proteger e não se tornar um alvo fácil, pelo menos.

Para os pesquisadores, o monitoramento de máquinas não protegidas do Bluekeep permite que olhem para as seguintes empresas comprometidas em potencial e prevejam as manchetes dos jornais.

Ao fornecer tutoriais e compartilhar conhecimento, espero cobrir algumas de minhas contas médicas. Se você gosta do meu trabalho e usa minhas ferramentas, por favor, doe.

https://www.offensiveosint.io/offensive-osint-s01e01-osint-rdp/

Comentários

Ebook

Postagens mais visitadas