Olá,
Bom a diferença é a seguinte: Usando Private a variável/Procedimento só estará visível no contexto onde foi declarado(a), isto é, na classe, estrutura ou módulo sendo impossível acessa-lo(a) fora do contexto (mesmo depois de instanciar essa classe).
Se for declarado como Public poderá ser acessado(a) fora do contexto onde foi declarado(a), e se o contexto for uma classe ou estrutura deve-se primeiro instanciar a mesma para acessar o procedimento ou variável em questão.
Bom quanto a parte de invasão, eu acho que você não deve criar um procedimento público num módulo por que aí sim ficará exposto.
Visual Studio 2010(Vb.Net)