Metin2 Bufferoverflow Fix - Mouseye sert basan lamer fixi

Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

hexe

Yasaklanmış Üye
Cezalı
Mesaj
377
Çözümler
1
Beğeni
352
Puan
419
Ticaret Puanı
0
Forum kuralı Madde 40/F-1 ihlali sebebi ile uyarı verilmiştir.
Neden ban yedin gibi sorular vardı; küfür edecektim o yüzden kendim kendimi banlattım.

Ek olarak bu tarz lamerler neden forumdan yasaklanmıyor anlamış değilim, Türk ceza kanununa göre suçlu konumunda iken gerekirken forum adminlerinin bu tarz kişileri yasaklamaması çok şaşırtıcı geldi. mmotutkunlarını aslında ben diğer forumlardan ayrı görüyordum, çok klişe gelecek bir laf olacak ; Forum dışındaki olaylar bizi ilgilendirmez veya bana dokunmayan yılan bin yaşasın düşüncesi sanırım bilmiyorum. Veya topluluk güvenliği önemsenmiyordur onu da bilmiyorum.
Fakat türk ceza kanununa göre ; Hukuken saldırıyı yapan kişi suçludur. Saldırıyı yaptığını açıkca konuşuyorsa ve itiraf ediyorsa genelde o forumlarda topluluk güvenliği için banlamak gerekiyor. Tabiki forumun banlamaması hukuki bir zorunluluk değil fakat güvenlik ve sorumluluk açısından beklenen bir adım olmalıydı.
Ek olarak her ne kadar korsan bir sunucuya saldırı yaptığını zannetse de ; devletin bakacağı tek şey ticari gelir elde edilen yerin maliyetini kısıtlayıp kısıtlamadığına bakar. Zaten gerekli yerlere bir kaç sunucu sahibi şikayetini oluşturdu.
Yani kısaca korsan bir sunucu olması sorumluluğu veya tck 224. maddeyi ortadan kaldırmıyor suçu yok etmiyor. Bu ayrımlar çok önemli. Bir sistem veya oyun veya teknolojik ürüne dair herşey ; korsan / lisanssız / gri alanda olsa bile suçu yok etmez. Demekki bu forumda suçlu çok önemsenmiyor olabilir veya kuralları da farklı olabilir.


Her neyse biz devam edelim aşağıda ki tüm adımlarını detaylıca okuyup anlamaya çalışırsanız nasıl bir şey olduğunu anlayabilirsiniz ve neredeyse tüm altyapılarda bu bufferoverflow mevzusu mevcut.

Şimdi fixe geçelim malum yarın 16 sunucu açılıyormuş bir çok sunucu sahibi istiyor ;

Kısaca sorun neydi ; Lamer sunucuya 200 veya üzeri büyüklüğünde paket gönderiyor daha sonra buffer_new() fonksiyonunda abort tetikliyor ve sonuç game.core, ayrıca farklı iplerden sürekli handshake flood yaparak normal oyuncuların girişini vs engelliyor.


Peki fix ne işe yarıyor ? ;

1 = ip ban kontrol , bağlantı limiti , handshake timeout ekleyerek bağlantıyı reddediyorum ve sunucu çalışmaya devam ediyor.
2 = 64mb alloc limit 32 mb input limit ve write boyut limiti ve kontrolü koyduk ve sadece o saldırganın yaptığı client kesiliyor sunucu çökmüyor.
3 = Bilinmeyen paket , flood ban tetikletmek ve bağlantıyı kapatmak ve ipyi definede belirtilen zamana göre banlamak


Ekstra alabileceğiniz önlemler ;

- slowloris bunu bilen bilir ben kısaca özetliyorum ; her 9 saniyede 1 byte gönderirse gönderen kişi 10 saniye timeout tetiklemez gibi ( rakamları isteidğiniz gibi ayarlayabilirsiniz.

- Geçerli paket spam yapabilirsiniz ; oyuna girip geçerli paketleri bağırma sohbeti , yürümek atak yapmak vs vs.. bunlar binlerce kez gönderildiği için flood koruması tetiklenmez. ( Bu karmaşıktır kendi sourcemde bulunuyor fakat aynısını paylaşmak istemiyorum ilerleyen günlerde belki değiştirerek paylaşabilirim. Bunu yapmasanızda zaten aşamayacak çünkü bu yukarıda anlatılanlar anormal bir durum değildir yani yetenek gerektirmeden 3-5 bilgiyle lamer olabiliyorsunuz)

- ve tabiki yoğun trafik ve tamamen abartarak aşırı güvenliğe kaçmak istiyorsanız firewall + os seviyesinde çözmeniz gerekir bunuda sunucu sağlayıcınız yapabilir. Bunlar kod değil sunucuyla alakalıdır.

==== Yukarıdaki 3 adım kapsamlı geliştirmelerdir.. Sunucu sağlayıcınızla konuşmalısınız. ====


libthecore klasörü içerisinde buffer.c dosyasını aç dosya başı includelerden sonra ekle ;

libthecore/buffer.c:
Genişlet Daralt Kopyala
#define MAX_BUFFER_ALLOC_SIZE (64 * 1024 * 1024)

1- buffer_new() fonsksiyonunu bulun içinde if (size < 0) return NULL; kontrolü var bu kontrolün hemen altına LPBUFFER buffer = NULL; satırından önce ekle ;

LPBUFFER buffer_new(int size)
{
    if (size < 0) {
        return NULL;
    }
    // --- buradan itibaren ekleyin ---
    if (size > MAX_BUFFER_ALLOC_SIZE) {
        sys_err("buffer_new: size %d exceeds max %d", size, MAX_BUFFER_ALLOC_SIZE);
        abort();
    }
    // --- BURAYA KADAR ---
    LPBUFFER buffer = NULL;   // -- bu satır zaten var, dokunma
    // ... devamı aynı
```


2- buffer_realloc() fonksiyonunu bul dosyanın sonlarına doğru içinde assert(length >= 0 ...) satırı var Bu assertin hemen altına

if (buffer->mem_size >= length) satırından önce ekle ;

void buffer_realloc(LPBUFFER& buffer, int length)
{
    assert(length >= 0 && "buffer_realloc: length is lower than zero");
    // --- BURADAN ITIBAREN EKLEYIN ---
    if (length >= MAX_BUFFER_ALLOC_SIZE) {
        sys_err("buffer_realloc: length %d exceeds max %d", length, MAX_BUFFER_ALLOC_SIZE);
        abort();
    }
    // --- BURAYA KADAR ---
    if (buffer->mem_size >= length)   // ---- bu satır zaten var dokunma
        return;
    // ... devamı aynı


3- buffer_read_proceed() okuma taşma kontrolü için   buffer_read_proceed() fonksiyonunu bul içinde   if (length < buffer->length)  blogu var bu blogun içinde;

 buffer->read_point += length;  satırından önce şu kodu ekle ;


void buffer_read_proceed(LPBUFFER buffer, int length)
{
    if (length == 0)
        return;
    // ... mevcut length kontrolu ...
    if (length < buffer->length)
    {
        // --- BURADAN ITIBAREN EKLEYIN ---
        if (buffer->read_point + length - buffer->mem_data > buffer->mem_size)
        {
            sys_err("buffer_read_proceed: buffer overflow! length %d read_point %d",
                    length, buffer->read_point - buffer->mem_data);
            abort();
        }
        // ---BURAYA KADAR ---
        buffer->read_point += length;   // -- bu satır saten var
        buffer->length -= length;
    }
    // devamı aynı



buffer_manager.h:
Genişlet Daralt Kopyala
1- #define __INC_METIN_II_GAME_BUFFER_MANAGER_H__ satirinin hemen altına
bu defineyi ekle ;

#define MAX_SAFE_TEMP_BUFFER_WRITE_SIZE (64 * 1024 * 1024)

2- TEMP_BUFFER sınıfında eski void write(...) satırını bul ve bool ile değiştir ;

        bool write(const void* data, int size);

NOT : eski kodda void write idi artık bool dönecek false geçersiz boyut ve sadece o client kesilir.
NOT : Template overload ekleme aynı imzaya sahip iki template derlerken hata verir.

Değişiklik sonrası şöyle görünecek ;

#define MAX_SAFE_TEMP_BUFFER_WRITE_SIZE (64 * 1024 * 1024)

class TEMP_BUFFER
{
    public:
        TEMP_BUFFER(int Size = 8192, bool ForceDelete = false);
        ~TEMP_BUFFER();

        const void * read_peek();
        bool write(const void* data, int size);
        int  size();
        void reset();

        LPBUFFER getptr() { return buf; }

    protected:
        LPBUFFER buf;
        bool     forceDelete;
};

#endif


buffer_manager.cpp:
Genişlet Daralt Kopyala
buffer_manager.cpp içerisinde void TEMP_BUFFER::write(...) fonksiyonu bul ve tamamen aşağıdakiyle değiştir;

bool TEMP_BUFFER::write(const void* data, int size)
{
    if (size < 0 || size >= MAX_SAFE_TEMP_BUFFER_WRITE_SIZE)
    {
        sys_err("TEMP_BUFFER::write: invalid size %d (max %d)", size, MAX_SAFE_TEMP_BUFFER_WRITE_SIZE);
        return false;
    }
    buffer_write(buf, data, size);
    return true;

}

[B]NOT : db/src/buffer_manager.h ve db/src/buffer_manager.cpp dosyalarına da aynı değişiklikleri uygulayın. Game tarafıyla birebir aynıdır.[/B]




desc.h:
Genişlet Daralt Kopyala
desc sınıfında değişkenleri bul ;  m_dwClientTime ve m_bHandshaking
satirlarini arayın. m_bHandshaking satirinin hemen altına ekle:

        DWORD   m_dwClientTime;    // ----var olan satır
        bool    m_bHandshaking;    // ---- var olan satır
        DWORD   m_dwConnectTime;   // --- Bunu ekle - timeout için bu
desc.cpp:
Genişlet Daralt Kopyala
Bu dosya çok önemli burayı dikkatlice okuyun en çok değişiklik burada yapıldı.

#include "shutdown_manager.h"
satırını veya son include satırını bul tüm includelardan sonra DESC::DESC() constructordan
önce ekle ;


#include <map>
#include <string>

extern int max_bytes_written;
extern int current_bytes_written;
extern int total_bytes_written;

// ========== flood koruma start ========== //
#define MAX_CONNECTIONS_PER_IP      10    // Ayni IP'den max eş zamanlı bağlantı //
#define HANDSHAKE_TIMEOUT_SEC       10    // Handshake icin max bekleme süresi //
#define BAD_PACKET_BAN_THRESHOLD    3     // 3 pakette geçici ban //
#define TEMP_BAN_DURATION_SEC       60    // Gecici ban suresi (saniye) //
Yukarıdakilerle sayılarla oynama yapabilirsiniz


static std::map<std::string, int>   s_mapIPConnCount;
static std::map<std::string, int>   s_mapIPBadPacketCount;
static std::map<std::string, DWORD> s_mapIPTempBan;

static bool IsIPTempBanned(const std::string& stIP)
{
    auto it = s_mapIPTempBan.find(stIP);
    if (it == s_mapIPTempBan.end())
        return false;
    if (get_global_time() - it->second > TEMP_BAN_DURATION_SEC)
    {
        s_mapIPTempBan.erase(it);
        s_mapIPBadPacketCount.erase(stIP);
        return false;
    }
    return true;
}

void FloodProtection_AddBadPacket(const std::string& stIP)
{
    int& count = s_mapIPBadPacketCount[stIP];
    ++count;
    if (count >= BAD_PACKET_BAN_THRESHOLD)
    {
        s_mapIPTempBan[stIP] = get_global_time();
        sys_err("FLOOD: IP %s temp banned (%d bad packets)", stIP.c_str(), count);
    }
}

void FloodProtection_Cleanup()
{
    DWORD dwNow = get_global_time();
    for (auto it = s_mapIPTempBan.begin(); it != s_mapIPTempBan.end(); )
    {
        if (dwNow - it->second > TEMP_BAN_DURATION_SEC * 2)
        {
            s_mapIPBadPacketCount.erase(it->first);
            it = s_mapIPTempBan.erase(it);
        }
        else
            ++it;
    }
    for (auto it = s_mapIPBadPacketCount.begin(); it != s_mapIPBadPacketCount.end(); )
    {
        if (s_mapIPTempBan.find(it->first) == s_mapIPTempBan.end())
            it = s_mapIPBadPacketCount.erase(it);
        else
            ++it;
    }
}
/* ========== -flood koruma son satır ========== */



-@ DESC::Initialize() içinde  DESC::Initialize() fonksiyonu bul ve içinde;
_pkDisconnectEvent = NULL; satırını ara ve bu satırdan sonra ekle ;

    m_pkDisconnectEvent = NULL;    // var olan satır
    m_dwConnectTime = 0;           // >>> bunu ekle


-@ DESC::Destroy() içinde ; m_bDestroyed = true;  satırı ara ve bu satırdan hemen sonra

if (m_pkLoginKey) satırından önce ekle ;



    m_bDestroyed = true;           // ---- var olan satır

    // >>> buradan itibaren ekle >>>
    // Baglanti sayaç to reduce //
    if (!m_stHost.empty())
    {
        auto it = s_mapIPConnCount.find(m_stHost);
        if (it != s_mapIPConnCount.end())
        {
            if (--it->second <= 0)
                s_mapIPConnCount.erase(it);
        }
    }
    // --- buraya kadar ---

    if (m_pkLoginKey)              // ---- var olan satır
    // ... devami ayni


-@ DESCT::Setup() içinde ;
- m_dwHandle = _handle; SATIRINI ARA VE BU SATIRDAN HEMEN SONRA ;
m_lpOutputBuffer = buffer_new(...) satırından  önce ekle



    m_dwHandle = _handle;          // ---- var olan satır

    // --- BURADAN İTİBAREN EKLE---
    // Geçici banned kontrol //
    if (IsIPTempBanned(m_stHost))
    {
        sys_log(0, "FLOOD: connection rejected (temp banned) from %s", m_stHost.c_str());
        return false;
    }

    // İp bağlantı limit //
    int& connCount = s_mapIPConnCount[m_stHost];
    if (connCount >= MAX_CONNECTIONS_PER_IP)
    {
        sys_err("FLOOD: too many connections (%d) from %s, rejecting", connCount, m_stHost.c_str());
        FloodProtection_AddBadPacket(m_stHost);
        return false;
    }
    ++connCount;

    // Handshake timeout  //
    m_dwConnectTime = get_global_time();
    // --- BURAYA KADAR ---

    m_lpOutputBuffer = buffer_new(DEFAULT_PACKET_BUFFER_SIZE * 2);  //--- bu satir zaten var
    // ... devamı aynı



-@ DESC::ProcessInput()` fonksiyonunu bulun. içinde ssize_t bytes_read; satırını ara.
Bu satırdan hemen sonra, if (!m_lpInputBuffer) satirindan önce ekle:


    ssize_t bytes_read;            // ---- var olan satır

    // ---- buradan itibaren ekle --
    // Handshake timeout //
    if (m_iPhase == PHASE_HANDSHAKE && m_dwConnectTime > 0)
    {
        if (get_global_time() - m_dwConnectTime > HANDSHAKE_TIMEOUT_SEC)
        {
            sys_err("FLOOD: handshake timeout (%ds) from %s", HANDSHAKE_TIMEOUT_SEC, m_stHost.c_str());
            FloodProtection_AddBadPacket(m_stHost);
            return -1;
        }
    }
    // ---- BURAYA KADAR ----

    if (!m_lpInputBuffer)          // -- var olan satır
    // ... devamı aynı


-@ Aynı fonksiyonda  buffer_write_proceed(m_lpInputBuffer, bytes_read); satırı bul.
Bu satırdan hemen sonra, if (!m_pInputProcessor) satırından ÖNCE  ekleyin:

    buffer_write_proceed(m_lpInputBuffer, bytes_read);

    // EKLENDI - 32MB input buffer limti //
#define MAX_SAFE_INPUT_BUFFER_SIZE (32 * 1024 * 1024)
    if (buffer_size(m_lpInputBuffer) > MAX_SAFE_INPUT_BUFFER_SIZE)
    {
        sys_err("DESC::ProcessInput: input buffer too large (%u bytes) from %s",
                (unsigned)buffer_size(m_lpInputBuffer), m_stHost.c_str());
        return -1;
    }
#undef MAX_SAFE_INPUT_BUFFER_SIZE

    if (!m_pInputProcessor)
    // ... devamı anyı


-@ USE_IMPROVED_PACKET_DECRYPTED_BUFFER aktifse, ProcessInput() içinde aşağıdaki
while döngüyü bulun. döngünün açılış parantezinden hemen sonra,
processingPoint += iBytesProceed; satirindan ÖNCE ekleyin:

  while (processingRemainSize > 0 &&
           !m_pInputProcessor->Process(this, (const void*)processingPoint,
                                       processingRemainSize, iBytesProceed))
    {
        // ---- buradan itibaren ekle  ----
        if (iBytesProceed == 0)
        {
            sys_err("DESC::ProcessInput: Process() returned 0 bytes from %s", m_stHost.c_str());
            return -1;
        }
        // ---- BURAYA KADAR ----

        processingPoint += iBytesProceed;   // <-- zten var
        // ... devami ayni



-@ USE_IMPROVED_PACKET_DECRYPTED_BUFFER aktifse, ProcessInput() içinde tum
temporary.write(...) ve m_lpInputDecryptedBuffer.write(...) çağrıları bukl.
Her birini if (!...) ile sarmalayip başarısızlıkta  return -1; ekleyin:

    //  ÖNCESİ (eski kod): //
    temporary.write(m_lpInputDecryptedBuffer.read_peek(), m_lpInputDecryptedBuffer.size());

    // SONRASI (yeni kod) - ayni satırı asagidaki gibi değiştir: //
    if (!temporary.write(m_lpInputDecryptedBuffer.read_peek(), m_lpInputDecryptedBuffer.size()))
        return -1;

Not: ProcessInput() içindeki tüm .write() çağrılarına bunu yap


-@ DESC::ChatPacket() fonksiyonunu bul içinde  TEMP_BUFFER buf; satırını ara.
Eski buf.write(...) cagrilarini if (!buf.write(...)) ile değiştirr:

    TEMP_BUFFER buf;
    // öncesi:  buf.write(&pack_chat, ...); buf.write(chatbuf, len);
    // sonrası:
    if (!buf.write(&pack_chat, sizeof(struct packet_chat)) || !buf.write(chatbuf, len))
        return;
    Packet(buf.read_peek(), buf.size());


Buraya kadar desc.cpp bitti.

main.cpp:
Genişlet Daralt Kopyala
io_loop() fonksiyonunu bul. Fonksiyonun başındaki değişken tanımlarının hemen altına,
DESC_MANAGER::instance().DestroyClosed(); satırından önce ekleyin:

Ayrica dosyanin basina (veya io_loop` fonksiyonundan once) extern tanimini ekleyin:


extern void FloodProtection_Cleanup();   // ----  BUNU dosya başına ekleyin

int io_loop(LPFDWATCH fdw)
{
    LPDESC  d;
    int     num_events, event_idx;       // bu satrlar zaten var

    // ----  buradan itibaren ekle ----
    {
        static DWORD s_dwLastCleanup = 0;
        DWORD dwNow = get_global_time();
        if (dwNow - s_dwLastCleanup > 60)
        {
            FloodProtection_Cleanup();
            s_dwLastCleanup = dwNow;
        }
    }
    // ---- BURAYA KADAR ----

    DESC_MANAGER::instance().DestroyClosed();   //
    // ... devamı aynı kalsın
input.cpp:
Genişlet Daralt Kopyala
CInputHandshake::Analyze() (veya CInputHandshake) fonksiyonunu bulun. Icinde
if (d->GetHandshake() != p->dwHandshake) satırını ara. Eski sys_err'den sonra,
--kapanış parantezinden çönce-- şu iki satırı ekleyin:

    if (d->GetHandshake() != p->dwHandshake)
    {
        sys_err("Invalid Handshake on %d", d->GetSocket());   // ---- var olan satır
        // ---- Bbunları ekle ----
        extern void FloodProtection_AddBadPacket(const std::string& stIP);
        FloodProtection_AddBadPacket(d->GetHostName());
        d->SetPhase(PHASE_CLOSE);
        // ---


Ayni fonksiyonun switch/if yapısının en altindaki else (veya default) bloğunu bul.
Eski sys_err'den sonra şu sattrları ekle;

   else
    {
        sys_err("Handshake phase does not handle packet %d (fd %d) ip : %s",
                bHeader, d->GetSocket(), d->GetHostName());   // --- varolan satır
        // >>> BUNLARI EKLEYIN >>>
        extern void FloodProtection_AddBadPacket(const std::string& stIP);
        FloodProtection_AddBadPacket(d->GetHostName());
        d->SetPhase(PHASE_CLOSE);
        // <<< <<<
        return -1;
    }


input_auth.cpp:
Genişlet Daralt Kopyala
CInputAuth::Analyze()`fonksiyonundaki switch'in default case'yi  bul.
Eski sys_err'den sonra şunları ekle:

    default:
        sys_err("This phase does not handle this header %d (0x%x)(phase: AUTH ip : %s)",
                bHeader, bHeader, d->GetHostName());   // <-- var olan satır
        // >>> BUNLARI EKLEYIN >>>
        {
            extern void FloodProtection_AddBadPacket(const std::string& stIP);
            FloodProtection_AddBadPacket(d->GetHostName());
            d->SetPhase(PHASE_CLOSE);
        }
        // <<< <<<
        return -1;

input_login.cpp:
Genişlet Daralt Kopyala
CInputLogin::Analyze() fonksiyonundaki switch'in default: case'ii bulun.

    default:
        sys_err("login phase does not handle this packet! header %d login cpp ip : %s",
                bHeader, d->GetHostName());   // <-- var olan satır

        // >>> BUNLARI EKLEYIN >>>
        {
            extern void FloodProtection_AddBadPacket(const std::string& stIP);
            FloodProtection_AddBadPacket(d->GetHostName());
            d->SetPhase(PHASE_CLOSE);
        }
        // <<< <<<
        return -1;
input_main.cpp:
Genişlet Daralt Kopyala
CInputMain::Analyze() fonksiyonundaki switch'in default: case'i bul Eger default: case yoksa ekleyin.
  

    default:
        sys_err("game phase does not handle this packet! header %d ip : %s",
                bHeader, d->GetHostName());

        // >>> BUNLARI EKLEYIN >>>
        {
            extern void FloodProtection_AddBadPacket(const std::string& stIP);
            FloodProtection_AddBadPacket(d->GetHostName());
            d->SetPhase(PHASE_CLOSE);
        }
        // <<< <<<
        return -1;
input_p2p.cpp:
Genişlet Daralt Kopyala
CInputP2P::Analyze() fonksiyonundaki switch'in default: case'ini bulun.
Eger default: case yoksa ekleyin:

    default:
        sys_err("P2P phase does not handle this packet! header %d ip : %s",
                bHeader, d->GetHostName());
        return -1;   // bağlantı kesilir, flood ban yetki yok dahili



NOT : tüm değişiklikleri ifdef ile sarmalamadım koşulsuz olarak uyguladım çünkü güvenlik kodu isteğe bağlı olmamalıdır. İsteyen ifdefli yapsın.

NOT : mysql/mariadb server.cnf için ise yani ;
max_allowed_packet =
max_connections =
wait_timeout =
interactive_timeout =
net_read_timeout =
net_write_timeout =

buradaki değerleri sunucu sağlayıcınız ayarlasın.

Hızlıca ayarladım yukarıdaki kodlarda parantez vs vs eksikleri varsa yorumlarda belirtebilirsiniz ve devamını geliştirmek isteyen arkadaşlar yorumda belirtebilir herkese iyi forumlar.

Magazin için bu konuyu ziyaret edin ; S1nWar lameri ve diğer lamerler tarafından 2 gündür tüm sunuculara saldırılara dair / Bufferoverflow
 
Son düzenleme:
1. Si;

Lamer silkti seni, silken birisi okkalıdır lamer değil.

2. Si;

"Neden ban yedin gibi sorular vardı; küfür edecektim o yüzden kendim kendimi banlattım."

Bu nasıl bir tabir la :zuha:

3. Sü;

Man kafa, sen yasal olmayan dosyaları kullanıyorsun haktan hukuktan bahsediyorsun...

4. Sü;

Yine boş yapıp kendini rezil etmişsin...

5. Si;

Bu copy-paster, manuel kafanın fixini uygulamayın bir şeye yaramaz, ciddi oyun sahipleri iletişime geçsin yardımcı olurum.

6. Sı;

Yine iyisin sana vakit ayırdım...

7. Si;

Mahkeme ne zaman :sofeer:
 
Forum kuralı Madde 40/F-1 ihlali sebebi ile uyarı verilmiştir.
1. Si;

Lamer silkti seni, silken birisi okkalıdır lamer değil.

2. Si;

"Neden ban yedin gibi sorular vardı; küfür edecektim o yüzden kendim kendimi banlattım."

Bu nasıl bir tabir la :zuha:

3. Sü;

Man kafa, sen yasal olmayan dosyaları kullanıyorsun haktan hukuktan bahsediyorsun...

4. Sü;

Yine boş yapıp kendini rezil etmişsin...

5. Si;

Bu copy-paster, manuel kafanın fixini uygulamayın bir şeye yaramaz, ciddi oyun sahipleri iletişime geçsin yardımcı olurum.

6. Sı;

Yine iyisin sana vakit ayırdım...

7. Si;

Mahkeme ne zaman :sofeer:
@Kaiser @Whistle dayı şu adamı forumdan yasaklasınıza hala forumda barınmasına nasıl göz yumabiliyorsunuz?
 
Irkçılık ve nefret söylemi (Fıkra veya mizah bağlamında, Hakaret içeren genellemeler) ihlali nedeni ile uyarı verilmiştir.
1. Si;

Lamer silkti seni, silken birisi okkalıdır lamer değil.

2. Si;

"Neden ban yedin gibi sorular vardı; küfür edecektim o yüzden kendim kendimi banlattım."

Bu nasıl bir tabir la :zuha:

3. Sü;

Man kafa, sen yasal olmayan dosyaları kullanıyorsun haktan hukuktan bahsediyorsun...

4. Sü;

Yine boş yapıp kendini rezil etmişsin...

5. Si;

Bu copy-paster, manuel kafanın fixini uygulamayın bir şeye yaramaz, ciddi oyun sahipleri iletişime geçsin yardımcı olurum.

6. Sı;

Yine iyisin sana vakit ayırdım...

7. Si;

Mahkeme ne zaman :sofeer:




1771599429914.webp


=

 
Server limit koymak iyi ama gerçek çözüm L3/L4/ipfw tarafında olur,
Connection limit ve buffer cap crashi azaltır fakat valid packet spam veya gerçek floodu durdurmaz.
Ipfw + rate limit + provider mitigation olmadan tam koruma sağlanmaz.

Kısa özet:
Böyle işlemler sunucu firmasından yapılması şartlandırmadır, opsiyonel olarak zevk vericek işlemler diyebiliriz bu konuya.
 
Server limit koymak iyi ama gerçek çözüm L3/L4/ipfw tarafında olur,
Connection limit ve buffer cap crashi azaltır fakat valid packet spam veya gerçek floodu durdurmaz.
Ipfw + rate limit + provider mitigation olmadan tam koruma sağlanmaz.

Kısa özet:
Böyle işlemler sunucu firmasından yapılması şartlandırmadır, opsiyonel olarak zevk vericek işlemler diyebiliriz bu konuya.

buffer overflow crash ile ddosu birbirine karıştırıyorsun ikisi tamamen farklı şeylerdir. Sunucu tarafında önlemi zaten turklokasyon aldı onun haricinde farklı firmayla çalışan varsa sunucu sahibiyle iletişime geçmeli.

Opsiyonel demen yanlış çünkü buffer_new çağrısını engellemezsen lamer her seferinde tek bir paketle sunucunu çökertir. Hiç bir firewall bunu göremez. çünkü firewall tcp içeriğini parse etmez. Sunucu sağlayıcısına şunu mu diyecek ? = benim game binary ye gelen paketlerin içeriğine bak

Yukarıdaki fix çökmeyi engeller , firewal ise trafik yoğunluğunu engelliyor.

Daha iyi çözümün varsa firewall + os seviyesinde yorumlarda anlatabilirsin yani daha çok pratik daha iyi olur bu konularda yorum yapmak değil de pratik.
core:
Genişlet Daralt Kopyala
#0  thr_kill () at thr_kill.S:4
warning: 4      thr_kill.S: No such file or directory
[Current thread is 1 (LWP 103298)]
(gdb) bt
#0  thr_kill () at thr_kill.S:4
#1  0x28c8ba8b in __raise (s=6) at /usr/src/lib/libc/gen/raise.c:50
#2  0x28d356fb in abort () at /usr/src/lib/libc/stdlib/abort.c:64
#3  0x083f7168 in buffer_new (size=<optimized out>, size@entry=218381008)
    at buffer.c:101
#4  0x083f7262 in buffer_new (size=218381008) at buffer.c:77
#5  buffer_realloc (buffer=@0xffff7a54: 0x2b059d60,
    length=length@entry=218381008) at buffer.c:262
#6  0x083f7390 in buffer_realloc (length=218381008,
    buffer=@0xffff7a54: 0x2b059d60) at buffer.c:259
#7  buffer_write (buffer=@0xffff7a54: 0x2b059d60, src=0x788a0b00,
    length=218362576) at buffer.c:153
#8  0x08084441 in TEMP_BUFFER::write (this=0xffff7a54, data=0x788a0b00,
    size=218362576) at buffer_manager.cpp:28
#9  0x0811b4b9 in DESC::ProcessInput (this=0x41279e00) at desc.cpp:304
#10 0x082848a5 in io_loop (fdw=<optimized out>) at main.cpp:962
#11 0x08284ace in idle () at main.cpp:836
#12 idle () at main.cpp:800
#13 0x08071b1d in main (argc=1, argv=0xffffdc74) at main.cpp:488
 
Bir lamerin arkasını toplamaya çalışıyorsun, senin günlerini aldı, sence ben mi lamerim, sen mi, yapay kafasın, yada copy-pastersin. Ötede oyna seni aşar böyle şeyler Hakan.
Söylesene evladım, DC deki kendi konuşmalarını neden sildin, beceriksizliğin onlarla örtülemez ama haberin olsun.:ROFLMAO:
 
Bir lamerin arkasını toplamaya çalışıyorsun, senin günlerini aldı, sence ben mi lamerim, sen mi, yapay kafasın, yada copy-pastersin. Ötede oyna seni aşar böyle şeyler Hakan.
Söylesene evladım, DC deki kendi konuşmalarını neden sildin, beceriksizliğin onlarla örtülemez ama haberin olsun.:ROFLMAO:

1771602686005.webp
 
Eğer kendi sunucunuzu veri merkezinde barındırıyorsanız mikrotik cihaz var ise çok kolay bir şekilde engellenebilir. Böyle kişiler sürekli gelip gider bu kişilere para vereceğinize cihaz satın alıp kendinize ait bir şekilde kurallar girebilirsiniz. Zaten büyük bir oyun sunucusu düşünüyorsanız bu cihaz fiyatları koymaz :)

Yani a kişisi aynı saldırıyı yapar sizden parayı alır bu sefer isim değiştirip b kişisi olarak tekrar gelir tekrar parayı alır ve böyle devam eder
 
Eğer kendi sunucunuzu veri merkezinde barındırıyorsanız mikrotik cihaz var ise çok kolay bir şekilde engellenebilir. Böyle kişiler sürekli gelip gider bu kişilere para vereceğinize cihaz satın alıp kendinize ait bir şekilde kurallar girebilirsiniz. Zaten büyük bir oyun sunucusu düşünüyorsanız bu cihaz fiyatları koymaz :)

Yani a kişisi aynı saldırıyı yapar sizden parayı alır bu sefer isim değiştirip b kişisi olarak tekrar gelir tekrar parayı alır ve böyle devam eder

peki bir şey sormak istiyorum = mikrotik veya herhangi bir ağ cihazı tcp bağlantısı içindeki uygulama verisini nasıl parse edecek ? mikrotik bunu görebiliyor mu ? Ben mikrotiğin sadece bir ip den bir tcp bağlantısının var olup olmadığını gördüğünü biliyorum.


Ayrıca cihaz alın çözülür demek koddaki buffer_new(218mb) açığını kapatmıyor. Lamer şunu yapar bağlantıyla normal trafik gibi görünen bir paket gönderip sunucuyu yine çökertir. Sunduğun mikrotik ise buna nasıl cevap verir ben bildiğim kadarını sana söyleyeyim = normal trafik olarak algılar ve geçer.
 
Eğer kendi sunucunuzu veri merkezinde barındırıyorsanız mikrotik cihaz var ise çok kolay bir şekilde engellenebilir. Böyle kişiler sürekli gelip gider bu kişilere para vereceğinize cihaz satın alıp kendinize ait bir şekilde kurallar girebilirsiniz. Zaten büyük bir oyun sunucusu düşünüyorsanız bu cihaz fiyatları koymaz :)

Yani a kişisi aynı saldırıyı yapar sizden parayı alır bu sefer isim değiştirip b kişisi olarak tekrar gelir tekrar parayı alır ve böyle devam eder

Ne alaka knk saldırıyı yiyen oyunların hepsi turklokasyonda falan barınıyor zaten layer7 seviyesinde koruma veriyor adamlar mikrotikle bu başka olay ezberden konuşmaya gerek yok adam gidip 1 gb bilişim fileslerine saldırmıyor ki
 
hatırladığım kadarıyla owsapın bununla ilgili fixi vardı bi bakın derim
 
Ne alaka knk saldırıyı yiyen oyunların hepsi turklokasyonda falan barınıyor zaten layer7 seviyesinde koruma veriyor adamlar mikrotikle bu başka olay ezberden konuşmaya gerek yok adam gidip 1 gb bilişim fileslerine saldırmıyor ki

Canlı sunucu sahiplerinin ve turklokasyon emrenin gelip açıklama yapmasını bekliyor herhalde anlamadım.

Turklokasyon sadece layer7 ile kalmıyor arka planda m2 ye özel geliştirmeler ve sunucu korumaları da yapıyorlar.



@darkbloodly senden kaç para istediler :D büyükmüydü rakam
 
Canlı sunucu sahiplerinin ve turklokasyon emrenin gelip açıklama yapmasını bekliyor herhalde anlamadım.

Turklokasyon sadece layer7 ile kalmıyor arka planda m2 ye özel geliştirmeler ve sunucu korumaları da yapıyorlar.

Canlı sunucu sahiplerinin ve turklokasyon emrenin gelip açıklama yapmasını bekliyor herhalde anlamadım.

Turklokasyon sadece layer7 ile kalmıyor arka planda m2 ye özel geliştirmeler ve sunucu korumaları da yapıyorlar.



@darkbloodly senden kaç para istediler :D büyükmüydü rakam
Kimden para istedik ki, ondan isteyelim, kuruntu yapma be çocuk..
 
1771615294762.webp


aynen para istemediniz saldırıda yapmadınız haklısınız bi siz şekilsiniz hıamına :D
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst